The best way to import historical transactions into Xero is to convert your old bank-statement PDFs into a CSV that matches Xero's import layout, then bring them in through Import a Statement under the bank account. Xero's bank feeds only pull roughly the last 90 days, so anything older has to come in manually as a statement CSV — there's no live API that backfills years of history. Convert the statements, check that every line reconciles against the running balance, then import the file. That's the whole job, and the reconciliation check is what keeps you from importing a month that's quietly missing a transaction.
This is a file import, not an automated sync. You produce a clean CSV and Xero reads it as reconcilable bank statement lines, exactly as if a feed had delivered them — just sourced by hand from your statements.
Why bank feeds can't do this for you
Xero's bank feeds are built for keeping a live account current, not for loading the past. When you connect a feed, it typically imports around 90 days of recent activity and then keeps pulling new transactions. Ask it for two years ago and it has nothing to give you.
So if you're setting up a new Xero file, migrating from another system, or catching up a backlog, the historical period is on you. The data lives in your bank statements — usually as PDFs you've downloaded or been sent. The task is turning those statements into a CSV Xero will accept, with the figures intact.
Here's the mistake we see most: people retype the statements or copy-paste from the PDF, import the lot, and only discover three months later that a page break dropped four transactions. By then the numbers are reconciled and trusted. Getting the import right *before* it goes in is far cheaper than unpicking it after.
Step by step: import historical transactions into Xero
Work through these in order. Each step assumes the one before it is clean.
- Gather every statement for the period. Download the PDFs for each month you need to backfill, in date order, with no gaps. A missing month is a missing opening balance later.
- Convert each PDF to a spreadsheet. Get the transactions out of the PDF and into Excel or CSV. Scanned or photographed statements need OCR to read the text; a plain copy-paste tends to scramble columns and merge wrapped lines.
- Check the figures reconcile. Before you trust a single row, confirm that opening balance + transactions = closing balance for each statement. The running balance is your safety net — the first row where your recomputed total stops matching the bank's printed balance is exactly where a transaction was misread or dropped.
- Map the columns to Xero's layout. Xero's Import a Statement expects, at minimum, a Date, an Amount, and a Payee or Description. You can also include a Reference. Arrange your columns to match.
- Get the date format right. Xero asks you which date format the file uses during import (for example DD/MM/YYYY or MM/DD/YYYY). Pick the one your statement actually uses, or every date will land wrong or be rejected.
- Decide signed amount vs separate debit/credit. Xero accepts either a single signed Amount column (money out as negative, money in as positive) or separate debit and credit columns. Use one approach consistently across the file — don't mix.
- Import a Statement, per bank account. In Xero, open the bank account, choose Manage Account → Import a Statement, upload the CSV, map the fields when prompted, and confirm. Import into the account the statement belongs to.
- Reconcile inside Xero. The imported lines now sit in Xero as statement lines, ready to match against bills, invoices, and spend money. This is the same reconcile screen a live feed would feed into.
Get the Xero CSV format right the first time
Most rejected imports come down to four things, and all four are avoidable.
- Dates. Tell Xero the exact format your file uses. A UK statement reading 03/04/2024 is 3 April; if Xero reads it as MM/DD it becomes 4 March, and your whole period shifts.
- Amounts. Either one signed column (−45.00 for money out, 45.00 for money in) or two columns (debit and credit). Strip currency symbols and thousands separators — leave plain numbers.
- One file per bank account. Don't merge two accounts into one CSV. Import each account's statements into that account in Xero.
- No duplicate periods. If a statement overlaps the previous one by a day, you'll double-count the boundary transactions. Trim overlaps so each transaction appears once.
Column | What Xero expects | Common slip |
|---|---|---|
Date | A real date in a stated format | Wrong format picked at import → shifted or rejected dates |
Amount | Signed number, or split debit/credit | Currency symbols left in, or signs the wrong way round |
Payee | Who the money went to / came from | Left blank, leaving lines hard to reconcile |
Description | What the transaction was | Merged with Payee, or truncated from a wrapped PDF line |
Reference | Optional cheque or transaction ref | Helpful for matching; safe to omit |
Where the reconciliation check earns its place
Converting a PDF is the easy part. Knowing the converted file is *complete* is the hard part, and it's the step almost every tool skips.
Export Bank Statement converts the PDF — including scanned and photographed statements via OCR — into clean Excel or CSV, then runs the running-balance check for you. It recomputes opening + transactions against the printed closing balance and flags any statement that doesn't reconcile, so you catch a missing or misread line before it ever reaches Xero. We've seen a backfill where everything looked tidy until the check caught a 1,200 transfer dropped at a page break — the totals said "doesn't reconcile", and the fix took a minute instead of a quarter's worth of detective work.
It exports in Xero's native bank-import CSV format, so the lines come in as reconcilable statement lines through Import a Statement. Be clear on what this is and isn't: it's convert, then import the CSV. It does not push transactions into Xero through a live bank-feed API — that's a separate, certified integration. Think of it as producing a verified import file you control, not a one-click sync.
Manual entry vs a verified conversion
Step | Retype / copy-paste | Verified conversion |
|---|---|---|
Get data out of the PDF | Key it in line by line | Converted to Excel/CSV, scans read via OCR |
Catch a missing transaction | Hope you notice | Running-balance check flags it |
Confirm the period reconciles | Recompute by hand | Done automatically, marked pass or fail |
Match Xero's CSV layout | Reformat columns yourself | Exported in Xero's native import format |
Get it into Xero | Import a Statement | Import a Statement |
The columns differ in one place that matters: catching what's absent. A human is good at checking the figures they can see and poor at noticing the figure that was never there. The running-balance check is built for exactly that blind spot.
Frequently asked questions
How do I import old transactions into Xero?keyboard_arrow_down
Convert your historical bank-statement PDFs into a CSV with Date, Amount and Payee or Description columns, then go to the bank account in Xero and choose Manage Account → Import a Statement. Map the fields, set the correct date format, and import. The transactions arrive as bank statement lines you can reconcile, the same as a feed would deliver.
Why won't Xero's bank feed import my historical transactions?keyboard_arrow_down
Bank feeds are designed to keep a live account current, so they typically only pull about the last 90 days and then track new activity. They don't backfill older history. Anything beyond that window has to be imported manually as a statement CSV.
What format does Xero need for a bank statement CSV import?keyboard_arrow_down
At a minimum, a Date column, an Amount column, and a Payee or Description column; a Reference column is optional. Amounts can be a single signed column (negative for money out) or separate debit and credit columns. During import, Xero asks which date format the file uses — set it to match your statement.
Can Export Bank Statement push transactions straight into Xero?keyboard_arrow_down
No. It produces a CSV in Xero's native bank-import format that you import yourself — convert, then import. It isn't a live bank-feed API, and it isn't a bookkeeping service. You decide what gets imported and reconciled, which is the point when you're loading historical data.
How do I know the imported history is complete and correct?keyboard_arrow_down
Check that each statement reconciles before you import — opening balance plus all transactions should equal the printed closing balance. A converter that recomputes the running balance and flags any statement that doesn't reconcile catches missing or misread lines up front, so you're not importing gaps into Xero. See how to import PDF bank statements into Xero and the Xero bank statement CSV format guide for the field-level detail.
Try it on your own statement
Clean Excel/CSV, with every transaction checked to balance.
