How to import a bank statement into Xero manually
By Satwinder Singh, Founder & Developer ·
Xero's bank feeds are one of the best things about it. You connect your account once and transactions just show up. Until the feed breaks, or your bank isn't supported, or you need six months of history from before you signed up.
That's when you need a manual statement import. Xero has supported it forever, and it's not hard, but there are two or three places where it's easy to make a mess you'll be cleaning up for days.
What Xero needs from you
Xero imports CSV files (it also takes OFX and QIF, but CSV is the most flexible). The simplest file has three columns:
| Date | Amount | Description |
|---|---|---|
| 03/04/2026 | -42.18 | TESCO STORES 2231 |
| 03/04/2026 | 1250.00 | CLIENT PAYMENT - ACME LTD |
Money out is negative, money in is positive. Xero can also handle separate debit and credit columns, but one signed amount column gives you fewer things to get wrong.
Xero's own template uses the headings *Date, *Amount, Payee, Description and Reference. You don't strictly need those exact names, since you map the columns during import, but using them makes the mapping step quicker.
If you only have a PDF statement, convert it first. In BankStatementHub you can upload the PDF, check each row against the original, and download it as Xero (CSV) in that template layout.
Step by step
- In Xero, go to Accounting > Bank accounts.
- Find the account you're importing into and click Manage account > Import a statement.
- Click Browse, choose your CSV, and click Import.
- Assign each column in your file to a Xero field: Transaction Date, Amount, Payee, Description, Reference.
- If your file has a heading row, tick Don't import the first line because they are column headings.
- Confirm the date format when Xero asks (more on this below).
- Click Save, check the summary, and Complete Import.
The lines show up on the account's reconcile screen, ready to match or create transactions against, exactly like feed lines.
Get the date format right, every time
Xero asks you which date format your file uses. Answer it honestly, even if it feels obvious.
If you're in the UK, Australia or New Zealand, your statements almost certainly use day first: 03/04/2026 is 3 April. A US statement uses month first, so the same text means 4 March. Pick the wrong one and Xero doesn't complain. It just files every transaction under the wrong date, and anything after the 12th of the month either fails or ends up somewhere strange.
Before importing, scroll your file for a date like 25/03/2026. A number over 12 in the first position means it's day first. That one check settles it.
Avoid importing the same lines twice
This is the big one. If your bank feed is already bringing in transactions from 1 June onwards and you import a statement covering all of June, the overlapping days arrive twice. Xero shows them as separate statement lines, and you'll be reconciling ghosts.
Before you import:
- Open the account and look at the date of the oldest statement line already there.
- Trim your CSV so it ends the day before.
If it's already happened, you can remove the extra lines. Open the account's Bank Statements view, select the duplicated lines and delete them. Do this before you reconcile anything against them; deleting reconciled lines is a lot more work.
A few things that cause failed imports
- Currency symbols or commas in amounts.
£1,250.00should be1250.00. - Blank rows at the end of the file.
- Text in the amount column, such as
DRorCRsuffixes. Convert those into negative and positive numbers instead. - Mixed date formats in one file, which happens when someone pastes rows from two different exports together.
Once it's in
Reconcile the account up to the statement's closing balance. The balance shown in Xero for the last imported line should match the closing balance printed on the statement. If it's out, you're almost always looking for one of three things: a missing transaction, a duplicate, or a sign flipped the wrong way.
If you converted the statement with a running balance check, you've already ruled out the first and third before the file even reached Xero, which makes that hunt a lot shorter.
Quick checklist
- CSV with date, a single signed amount, and a description
- Date format confirmed by spotting a day greater than 12
- Amounts are plain numbers with no symbols or DR/CR text
- Date range doesn't overlap the existing feed
- Heading row skipped during import
- Closing balance in Xero matches the statement