Importing Transactions
Import bank and payment data from CSV files, Open Banking, PayPal, Amazon, and more.
Supported Import Methods
| Method | Source | Auto-sync |
|---|---|---|
| CSV Upload | NatWest, Starling, Monzo, any UK bank | Manual |
| Open Banking | Plaid (300+ UK banks) | Automatic |
| PayPal | PayPal REST API | Manual import |
| Amazon Seller | Amazon Seller Central (SP-API) | Manual import |
| Amazon Buyer | Amazon Order History | Manual import |
| Wise | Wise multi-currency | Coming soon |
| Revolut | Revolut multi-currency | Coming soon |
CSV Import
Navigate to Import and upload your bank statement CSV. TaxMTD auto-detects:
- NatWest - Date, Type, Description, Value, Balance
- Starling - Date, Counter Party, Reference, Type, Amount, Balance
- Monzo - Full Monzo export with merchant data
- Generic - Any CSV with date, description, and amount columns
Source Labels
Every imported transaction is tagged with its source:
| Source | Badge | Import Method |
|---|---|---|
| NatWest | NatWest | CSV |
| Starling | Starling | CSV |
| Monzo | Monzo | CSV |
| PayPal | PayPal | API |
| Amazon Seller | Amazon Seller | SP-API |
| Amazon Buyer | Amazon Buyer | Order History |
| Plaid | Plaid | Open Banking |
Smart Transfer Detection
When you import a NatWest CSV containing PAYPAL PAYMENT entries, TaxMTD automatically:
- Tags them as bank transfers (not real expenses)
- Marks them as excluded from tax calculations
- Shows a Transfer ↔ indicator
This prevents double-counting when you also import PayPal transactions.
Amazon Seller Integration
Connect your Amazon Seller Central account to import orders, fees, refunds, and FBA settlements.
What Gets Imported
- Completed orders with line items
- Amazon fees (referral, FBA, advertising)
- Refunds and returns
- FBA settlement reports
- Profit/loss per product
TaxMTD calculates profit per product after deducting Amazon fees, shipping, and refunds.
Amazon Buyer Integration
Import your Amazon purchase history to automatically categorise business expenses.
What Gets Imported
- Full order history with item details
- Auto-matching to bank transactions
- Business vs personal split per item
- HMRC-ready expense categorisation
This is unique to TaxMTD - no other UK accounting platform imports Amazon purchase history or auto-splits business vs personal items.
API Example
JavaScript
const res = await fetch('https://dev.taxmtd.uk/api/upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
csv: csvContent,
periodStart: '2026-01-30',
periodEnd: '2026-02-27',
periodLabel: 'Jan 2026'
})
})
const { data } = await res.json()
console.log(`Imported ${data.stats.total} transactions from ${data.bankLabel}`)
Python
res = requests.post(
"https://dev.taxmtd.uk/api/upload",
json={
"csv": csv_content,
"periodStart": "2026-01-30",
"periodEnd": "2026-02-27",
"periodLabel": "Jan 2026",
},
cookies=session_cookies,
)
data = res.json()["data"]
print(f"Imported {data['stats']['total']} transactions from {data['bankLabel']}")
PHP
$response = Http::withCookies($session)
->post('https://dev.taxmtd.uk/api/upload', [
'csv' => $csvContent,
'periodStart' => '2026-01-30',
'periodEnd' => '2026-02-27',
'periodLabel' => 'Jan 2026',
]);
$data = $response->json()['data'];
echo "Imported {$data['stats']['total']} transactions from {$data['bankLabel']}";
Rust
let res = client
.post("https://dev.taxmtd.uk/api/upload")
.json(&serde_json::json!({
"csv": csv_content,
"periodStart": "2026-01-30",
"periodEnd": "2026-02-27",
"periodLabel": "Jan 2026"
}))
.send().await?
.json::<serde_json::Value>().await?;
let data = &res["data"];
println!("Imported {} transactions", data["stats"]["total"]);
cURL
curl -X POST https://dev.taxmtd.uk/api/upload \
-H "Content-Type: application/json" \
-d '{"csv":"Date,Type,Description,Value,Balance\n01/02/2026,DEB,AMAZON,-29.99,1470.01","periodStart":"2026-01-30","periodEnd":"2026-02-27"}'