Xero manual bank statement import: what it accepts and where it stops
Xero's manual import accepts CSV, OFX, QIF and QBO files, not PDF or Excel. It needs a date, a description and either one signed amount or separate debit and credit columns. It has no duplicate detection, no balance verification, and it imports a period rather than establishing a feed.
Formats Xero accepts
- CSV: the general-purpose route, and the one most exports end up as. Requires column mapping on every import unless the file shape is identical each time.
- OFX: a banking interchange format. Where a bank offers it, it carries the field structure with it and needs no mapping.
- QIF and QBO: older interchange formats, still offered by some banks and accepted by Xero.
Not accepted: PDF and Excel. Both are what most banks and platforms actually hand you, which is why converting exports is the step that turns a five-minute job into an hour.
The CSV rules that reject a file
- A date column, with the day-first or month-first order declared at import. Getting it wrong posts to wrong dates rather than failing.
- A description column. Blank descriptions import, and then reconcile badly.
- Either one signed amount column, with money out negative, or separate debit and credit columns. Mixing conventions in one file will not import.
- No currency symbols or thousands separators inside the amount cells.
- Consistent columns from the first row to the last. A statement that changes shape partway through, which multi-page PDF conversions often produce, fails or imports half a period.
Card statements are the classic sign trap. Most card exports show purchases as positive numbers, because the statement is written from the issuer's point of view. Imported as-is, a month of spending posts as money coming in.
The four limits that matter
The format rules are annoying but learnable. These four are structural, and they are why an import is not a feed.
- No duplicate detection. Import an overlapping period and Xero creates a second copy of every transaction in the overlap. Nothing warns you, and unpicking it afterwards is manual.
- No balance verification. Xero imports what the file contains. If the export was truncated, or a page was lost in conversion, the import succeeds and the account is simply wrong.
- It is a period, not a connection. Every month is a fresh export, a fresh reformat and a fresh import, for every account, forever.
- No statement-line status. Imported lines behave differently from fed lines in some of Xero's reconciliation tooling, and the account never shows as fed.
When an import is the right tool
Genuinely: a one-off historical catch-up on an account that will have a native feed going forward, or a closed account being brought into the books for the last time. The work is bounded and it will not recur.
It stops being the right tool the moment it repeats. An account with no native feed is not a one-off import; it is the same import every month for as long as the account exists, which is the shape of the problem for foreign bank accounts, corporate cards, FX balances and finance facilities.
The alternative to importing the same account every month
Xero's Bank Feeds API is what native feeds use, and it is open to applications as well as banks. That is the route StatementClear takes: upload the statement in whatever format you can export, PDF and Excel included, and the lines post into Xero as feed lines rather than as an import.
Both of the limits that cost real money are handled at that point: overlapping uploads are deduplicated against what is already in the account, and the running balance is checked against the statement before anything posts, so a truncated export is caught rather than reconciled.
Stop importing Foreign bank account statements. Feed them instead.
StatementClear posts the statements you already export into Xero as live bank feed lines, deduped and balance-checked before anything reaches the ledger.