HomeHelp

How to import a bank statement into Xero: OFX or CSV?

Short answer

Use OFX whenever you can get it. Xero recommends OFX over every other format, and an OFX import has no columns to map. Use CSV when your bank offers nothing else or you are building the file yourself. Xero can't import a PDF statement at all, so a PDF has to be turned into one of those files first.

Xero can't import a PDF

Xero's manual import accepts OFX, QFX and QuickBooks files, QIF, and CSV. Its help page says plainly that PDF statements can't be imported.

If you have online banking, export the transactions from there: it's usually offered when you view them as a list, and a file straight from the bank is better than any conversion. If a PDF is all you have, because the account is closed or a client sent a statement, Xero's own suggestion is a conversion service that turns it into one of the formats above.

Import an OFX file

Import one file per bank account. In Xero:

  1. In the Accounting menu, select Bank accounts.
  2. Find the account, open its menu, and choose Import a Statement.
  3. Drop the file into File to upload, or select it from your computer, then click Next.
  4. Review the transactions and untick any you don't want.
  5. Click Complete import.

What Xero needs from a CSV file

A CSV takes more preparation, and the first import asks you to match each column to a Xero field. Xero remembers that mapping for later imports with the same headings. What its help page asks for:

  • Only Date and Amount are required. Payee, Description and Reference make reconciling easier.
  • One Amount column for money in and out: money received positive, money spent negative, written as -30.00 or (30.00). No commas as the decimal separator.
  • Credit cards follow the same rule: payments positive, purchases negative.
  • Delete opening and closing balance columns, since Xero works out the balance itself, and delete the account number and any empty rows.
  • A header row in row 1 with a unique name for each column.
  • No more than 100,000 rows in one file.
  • Dates in a format Xero lists, such as DD/MM/YYYY, MM/DD/YYYY or YYYY/MM/DD. If a date could be read two ways, Xero asks which format you mean and applies it to that file and every later CSV import.

Duplicates and roles

  • Xero skips transactions it has already imported from another file, so an overlapping date range doesn't double up.
  • Importing needs the administrator role, or the standard role with bank account access.

Turning a PDF statement into a file Xero accepts

ZeroParse reads the PDF, checks the transactions against the totals the statement prints, and gives you an editable table before anything is exported.

Export for Xero writes an OFX file, the format Xero recommends, and we tested it with a real import into a Xero organisation. Amounts arrive with Xero's signs, including on card statements that print them the other way round, and the description fills both Payee and Description. It's part of the Pro and Firm subscriptions.

The CSV export is free on every plan. Set CSV dates, under the table, to DD/MM/YYYY or MM/DD/YYYY, both on Xero's list; the default, YYYY-MM-DD, is not. We haven't tested a CSV import into Xero, so check the dates on Xero's review screen before you complete the import.

Sources

Checked against these help pages on 27 September 2026. They change; if one now says something different, it is right and this page is out of date.

Only have the PDF?

Xero's manual statement import accepts OFX and recommends it over CSV, because there are no columns to map. ZeroParse turns a PDF statement into an OFX file Xero reads directly. New accounts get 50 free PDF credits, no card required.

Common questions

Can I export to Xero?
Yes — the "Export for Xero" button produces an OFX file Xero imports directly with no column mapping, verified with a real import into a Xero organisation. It's a Pro feature, alongside .QBO.
Can I change the date format in the CSV export?
Yes. CSV dates, under the table, writes dates as YYYY-MM-DD (the default), DD/MM/YYYY or MM/DD/YYYY. For Xero, pick DD/MM/YYYY or MM/DD/YYYY: its CSV import lists those, not YYYY-MM-DD. QuickBooks recommends DD/MM/YYYY. It changes only the CSV. The Excel export stores real dates, and "Show as" in the Date column changes only how the table looks.
How does ZeroParse handle debit vs. credit on a credit card statement?
We normalize every statement to the same convention QuickBooks and Xero expect: money you spent (a purchase) exports as negative, money you received back (a payment or refund) exports as positive — whether the file is a bank account or a credit card statement. Card issuers often print it the opposite way on the page itself (a purchase shown as a plain positive number, since it increases what you owe); we detect a credit card statement automatically and flip it, so what you export is ready to import rather than something you'd need to invert by hand.
What does the badge on each file mean — "Matches statement totals", "Doesn't match statement", or "Verify against the statement"?
After extraction, we check whether the rows we found add up to what your statement says about itself — its opening and closing balance, its own column totals, or the running balance printed beside each row. "Matches statement totals" means they do, to the cent. The running balance is the most useful of the three when a file has one, because it is checked at every row rather than once at the end, so it can tell you which row something goes wrong at — and it catches a case the totals cannot: a file that is missing transactions whose amounts happen to cancel out. "Doesn't match statement" means they don't, and we show you exactly which figures disagree. "Verify against the statement" means your statement didn't print anything we could check against — no balances, no totals, no running balance — so we're telling you to eyeball it yourself rather than pretending it's fine. It's a common enough outcome that we publish the actual rate across our own test corpus on the benchmark page rather than asking you to take a number on trust. None of this is the same as an accountant reconciling your account against an independent record; it only checks that what we extracted is internally consistent with what your own statement says. Edit an amount or delete a row afterward and we re-run the same check automatically, so the badge always reflects what you're about to export — and because that recheck runs entirely in your browser, fixing a flagged row never sends anything back to our servers or creates a new copy of your data there.

All questions and answers