Free tool

CSV to Xero converter — bank-import CSV in two clicks

Drop a CSV or PDF bank export. We auto-detect the layout, normalise the dates and amounts, and download a CSV with the exact column headers Xero wants — *Date, *Amount, Payee, Description, Reference.

or paste rows

CSV parsing and Xero CSV generation happen entirely in your browser.

Runs in your browser
No upload, no signup. Your file never leaves your device.
Free and unmetered
Use it as often as you need. No daily quota, no credit card.
EU-built, GDPR-first
Hosted in Frankfurt. Built by a small EU team that takes privacy seriously.

Why bank CSVs almost never import cleanly into Xero

Xero's bank-statement import is fussy in a way that catches almost every first-time user. It looks for two required columns marked with an asterisk — *Date and *Amount — plus at least one of Payee, Description, or Reference. Dates must be in DD/MM/YYYY, and amounts must be a single signed column: positive for money in, negative for money out. Drop a vanilla bank export into Xero's upload screen and you get a polite but unhelpful error: "Your file is not in the correct format."

The fix is mechanical — rename the headers, flip the date format, merge the bank's separate Debit and Credit columns into a single signed Amount column. People do this in Excel every month. This tool does it in two clicks, in your browser, without uploading anything anywhere.

What Xero needs in the CSV

  • *Date— required. DD/MM/YYYY format. Xero will reject ISO dates, MM/DD/YYYY, and most variants. (If your Xero org is on a US-locale, you can switch the format under your org settings — most of the world uses DD/MM.)
  • *Amount— required. One signed number per row. -45.30 for an expense, 2500.00 for a deposit. No currency symbols, no thousands separators, no parentheses for negatives.
  • Payee— strongly recommended. This is what shows in Xero's reconcile screen. If your bank export doesn't have a separate payee column, we use the first chunk of the description as a sensible fallback.
  • Description— the full narration / details from the bank. Helps Xero's bank-rule engine match the right contact.
  • Reference— payment reference, cheque number, or wire reference. Optional, but if your bank gives it to you, keep it — Xero shows it on the imported transaction.

What this tool fixes for you

  1. Metadata rows above the header.Most bank CSVs have 1-7 rows of account name, statement period, opening balance, and blank rows before the actual headers. Xero refuses to parse those. We scan the first 15 rows for a date-shaped header and skip everything above it. You can see what was skipped in the "Skipped metadata rows" toggle so it's never a black box.
  2. Split Debit / Credit columns. European banks especially love giving you two positive-only columns instead of one signed column. We merge them: debit becomes negative, credit becomes positive, both go in the *Amount column Xero wants.
  3. EU vs US locale numbers. 1.234,56 (EU) and 1,234.56 (US) both get normalised to plain 1234.56. Parentheses negatives (45.30) and trailing DR/CR markers are handled too.
  4. Date format normalisation. ISO (2026-04-15), 15/04/2026, 15.04.2026, and 15 Mar 2026 all get rewritten to the DD/MM/YYYY Xero expects.
  5. UTF-8 BOM. Xero needs a BOM on the file or it can mis-decode names with accents, umlauts and currency symbols. We prepend one automatically.
  6. RFC 4180 CSV escaping.Commas, quotes and newlines inside descriptions are escaped the way Xero's parser expects. No more half-imported lines because someone's description had a comma in it.

How to import the CSV into Xero

  1. Sign in to Xero and go to Accounting → Bank accounts, then click the bank account you're importing into.
  2. Click Manage Account → Import a Statement.
  3. Choose the CSV you downloaded from this tool. The format will be CSV (.csv) Custom.
  4. Map the columns — Xero will pre-fill most of them because we used the column names it recognises.
  5. Review the import summary and confirm. Transactions land in the bank account ready for reconciliation.

If you started from a PDF statement and don't need the CSV middle step, our paid converter does PDF → reconciled CSV (or Xero-ready CSV directly) in one pass. The main converter is free for the first 7 pages per day.

Common error messages and what they mean

  • "Your file is not in the correct format"— Xero couldn't find the required *Date / *Amountheaders, or the dates aren't in DD/MM/YYYY. This tool fixes both.
  • "The statement balance does not match"— your CSV transactions don't add up to the opening-to-closing balance Xero is expecting. Use our Reconciliation Checker to find which row is off before you re-import.
  • "Duplicate transactions detected" — Xero matches on date + amount + description. If your statement period overlaps an earlier import, Xero correctly skips duplicates. Trim the CSV to only the new period.
  • "Negative amounts not allowed"— this only happens if you've enabled the older two-column (Spent / Received) Xero import format. Switch back to the single-amount format in the Xero org settings and the file we generate will work.

When to skip CSV altogether

CSV imports work, but they're a step you can avoid. If your bank only gives you PDF statements (most do), going PDF → CSV → Xero adds two places where data can drift — the PDF parse and the Xero import map. Our paid converter does PDF → reconciled Xero CSV in one pass, including the balance-reconciliation check that catches extraction errors before they land in Xero. For occasional use the free tier handles 7 pages per day. For ongoing bookkeeping, paid plans start at €19/month with Xero-ready output included.

Not sure which plan you need? Try our plan estimator.

FAQ

Is this really free?
Yes — the CSV parsing and Xero CSV generation run entirely in your browser, so we don't pay per conversion. Use it as much as you want, no signup. If you upload a PDF instead of a CSV, that counts against your free 7-pages-a-day on our main converter.
Does the file work for all Xero countries?
Yes. The *Date, *Amount, Payee, Description, Reference column set is the same in every Xero region — UK, AU, NZ, US, ZA, EU, IE, SG, HK, MY, all of them. Date format is DD/MM/YYYY everywhere except a small minority of US-locale orgs; switch the org locale or use Xero's date format setting if needed.
Why does Xero need the asterisks (*) on Date and Amount?
Xero's CSV parser uses the asterisk as the signal that a column is required, distinct from the optional Payee/Description/Reference. We include the asterisks automatically in the header — don't strip them or the import will fail.
My bank export has Debit and Credit as separate columns. Will that work?
Yes. We detect Debit / Credit / Withdrawal / Deposit / Money Out / Money In as separate columns and merge them into a single signed *Amount column the way Xero wants. Debits become negative, credits stay positive.
Can I import multiple months in one CSV?
Yes — Xero accepts any date range in a single CSV. If your earlier months are already in Xero, the import wizard will flag duplicates and let you skip them.
Does this work for credit card statements?
Yes. Charges should be negative (money out of the card account from your perspective), payments positive. If your card export uses the opposite convention, the Debit/Credit column path will get the signs right automatically.
What about Xero's QIF and OFX import paths?
Xero also accepts QIF and OFX files. If you have an OFX/QBO/QFX file already, you don't need this tool — just upload it to Xero directly. Use our OFX File Validator if you want to preview what Xero will see before importing.
Will accents and special characters survive the round-trip?
Yes. We emit the CSV as UTF-8 with a byte-order mark (BOM), which is what Xero's parser expects for non-ASCII text. Café, Müller, Søren, naïve, etc. all import cleanly.

Related tools and guides