Bank statement to Xero
Get the months your feed never had.
Convert statement PDFs into the OFX file Xero's Import a Statement accepts, so periods from before the feed existed arrive as reconcilable bank statement lines rather than a spreadsheet nobody can tie back.
50 free page credits · No card · Cancel anytime
- OFX, the format Xero prefers
- Reconcilable statement lines
- Whole years at once
Export transactions
1,284 rowsFormat
| Date | Description | Amount |
|---|---|---|
| 2025-10-24 | STRIPE PAYOUT 4af2c9 | +4,820.00 |
| 2025-10-23 | AWS EMEA SARL | −1,204.00 |
| 2025-10-22 | WHOLE FOODS MKT | −112.88 |
PDF statement you upload
24/10 STRIPE PAYOUT 4af2c9........4,820.00
23-10 AWS EMEA SARL us-east-1 1,204.00-
22 OCT WHOLE FOODS MKT #214 112.88
21/10 UBER *TRIP..............24.40
20-OCT-2025 GUSTO PAY 9931 18,440.00
[illegible: scan quality]
OFX file Xero imports
<STMTTRN>
<TRNTYPE>CREDIT
<DTPOSTED>20251024
<TRNAMT>4820.00
<NAME>Stripe
<MEMO>STRIPE PAYOUT 4af2c9
</STMTTRN>
<STMTTRN>
<TRNTYPE>DEBIT
<DTPOSTED>20251023
<TRNAMT>-1204.00
<NAME>Amazon Web Services
<MEMO>AWS EMEA SARL us-east-1
</STMTTRN>
… 3 more transactions
A bank feed starts the day you switch it on.
Everything before that is your problem: the months a client ran before they engaged you, the account that closed in March, the card the feed does not cover at all. Xero will happily import that history, but only as OFX, QIF, or CSV, and what you have is a PDF. So it gets typed in, or it gets left out and the reconciliation never quite closes.
How it works
From statement PDF to Xero, screen by screen
- 01
Upload the statements
A month or a year at a time: scanned, multi-page, and password-protected PDFs all work, up to 50 MB each.

Drop the files in, forward the bank's email to a private import address, or post them to the API. - 02
Confirm the import
Review what is queued and decide whether statements carrying warnings still count in your analytics. Nothing is read until you confirm.

The warning types that will still count toward analytics are named before anything is extracted. - 03
Let each one reconcile
Transactions are extracted and checked against the statement's own opening and closing balances. A month that does not tie is flagged here rather than in Xero, where a broken reconciliation is far more expensive to unpick.

The activity panel names the stage and the seconds elapsed as each statement moves through the queue. - 04
Fix descriptions before they travel
OFX carries the description, not your category, so the narration is what Xero's bank rules will match on. Correct it here, in bulk, where a shift-clicked range is one action.

Select a range and fix the merchant or the description in one pass, rather than a row at a time. - 05
Export OFX
Choose OFX rather than QuickBooks: Xero wants the plain file, without the Intuit web-connect header that makes one a .qbo.

OFX and QuickBooks sit side by side in the format list. Xero takes the left one.
Once you have the file
Importing the statement into Xero
Xero calls this Import a Statement, and it lives on the bank account itself.
- 1
Open Accounting, then Bank accounts
Xero's manual import is per account, so pick the account the statement belongs to before importing anything.
- 2
Use the account's menu, then Import a Statement
The menu icon sits on the bank account's own card rather than in the page header.
- 3
Upload the OFX file
Xero accepts OFX, QIF, and CSV here, and recommends OFX where the bank offers it, which is what the export gives you.
- 4
Review the lines, then complete the import
Xero lists what it read and lets you clear anything you do not want before committing. The result is bank statement lines waiting to be reconciled.
Imported lines are statement lines, not transactions. They still need reconciling against bills, invoices, or bank rules, exactly as a feed's lines do.
What makes the import reconcile cleanly
History a feed cannot reach
Feeds begin at connection. Statement PDFs go back as far as the bank keeps them, which is how a mid-year engagement gets a full-year set of books.
The format Xero asks for
Xero imports OFX, QIF, and CSV, and recommends OFX. The export is plain OFX 1.02, no Intuit header, nothing for Xero to reject.
Balance-checked before it leaves
Opening and closing balances are reconciled against the parsed rows, so a missing page shows up as a flag rather than as a reconciliation that will not close.
FITIDs for overlap
Every transaction carries the identifier OFX defines for de-duplication, so an overlapping month adds what is new instead of doubling what is there.
Descriptions bank rules can match
The merchant is resolved out of the raw narration and both travel with the row, which gives Xero's bank rules something consistent to key on.
One account at a time, on purpose
Xero imports per bank account, so filter to one account and one period and export exactly those rows.
What Xero accepts, and what this gives it
Xero's manual import takes three formats. Only one of them is worth using.
| Format | Where it stands |
|---|---|
| OFX | Xero's own recommendation, and what the export produces. Dates, signed amounts, and identifiers are typed rather than guessed from columns. |
| CSV | Accepted, with Date and Amount mandatory and a date-format prompt on upload. Workable, but the mapping is yours to get right every time. |
| QIF | Accepted, and older than both. No identifiers, so re-imports overlap. |
| Not accepted at all, which is the reason this page exists. |
FAQ
Common questions
How do I import a bank statement PDF into Xero?
Xero cannot read a PDF. Convert the statement to OFX first, then use Accounting, Bank accounts, the account's menu, and Import a Statement. Xero reads the OFX and creates bank statement lines ready to reconcile.
Why OFX rather than CSV?
Xero accepts both and recommends OFX. In an OFX file the date, the signed amount, and the transaction identifier are typed fields, so there is no column mapping to configure and no date-format question to answer wrongly.
Can I import history from before I connected the feed?
Yes, and it is the main reason to do this. A feed only carries transactions from the point it was connected; a statement PDF carries whatever period it covers, so archived months import the same way as recent ones.
Will importing overlapping months create duplicates?
Each transaction carries a FITID, the field OFX defines for de-duplication. Software that honours it matches on the identifier rather than on the description and amount, so overlapping periods add only what is new.
Do categories come across?
No: categories are not part of the OFX schema, and Xero does its own coding through bank rules and reconciliation. What travels is the date, the amount, the resolved merchant, and the description, which is what those rules match on.
Does this work for credit cards and closed accounts?
Yes. Any account whose statements you can download as PDFs converts the same way, including cards and accounts that have since been closed and can no longer be connected.
Converting a statement from a specific bank?
Written up for the format each of these banks prints.
Keep exploring
Bank Statement → QuickBooks
Categorize first, then export an OFX/QBO QuickBooks imports.
Bank Statement → GnuCash
Plain OFX for File → Import → Import OFX/QFX.
Bank Statement → Moneydance
OFX for the accounts Direct Connect cannot reach.
Bank Statement → Sage
OFX scoped to one account, the way Sage reads it.
Bank Statement → Wave
The file format Wave recommends over CSV.
Give Xero the months it missed.
Upload the statements, check the balances tie, and import a year of OFX in an afternoon.