Guide
Importing a bank statement into Xero: every file rule and limit
Manually importing a bank statement into Xero fails for a small, boring and entirely documented set of reasons. The file is the wrong shape, the dates are ambiguous, the amounts are split across two columns, or the format is one your organization is not eligible for. None of it is guesswork, and all of it is avoidable if you know the rules before you build the file.
This guide collects the requirements Xero publishes for each accepted format, in one place, with the failure each one causes. Every limit below is quoted from Xero Central and was checked on 9 September 2026. Xero revises these pages without announcement, so treat anything that looks surprising as worth confirming against Xero's own documentation on the day you read this.
The formats Xero accepts, and the one it prefers
Xero states that it supports OFX, QFX, QIF, PDF, CSV and QuickBooks file formats for manual bank statement import, and it recommends OFX where possible, because an OFX file can usually be imported without changing the export from your bank at all.
That preference is worth taking seriously. Almost everything later in this guide is a way of describing what goes wrong when a human has to reshape a file by hand. If your bank offers OFX, most of this page stops applying to you.
| Format | Use it when | What bites |
|---|---|---|
| OFX, QFX, QuickBooks | Your bank offers it. Xero's own recommendation. | Usually imports with no edits to the file at all. |
| QIF | Your bank offers QIF but not OFX. | Accepted, and also Xero's suggested fallback when a CSV is too large. |
| US or Canadian organization, not on the Xero Ledger plan. | 100 pages, 35MB, 200 DPI, English, no password, straight scan. | |
| CSV | Your bank exports nothing else, or you are building the file yourself. | Column shape, date format and decimal separator do all the damage. |
One rule cuts across all of them: if you have several bank accounts, you import a separate file for each account. There is no combined-file path.
You also need the right role. Xero requires the administrator or standard plus bank accounts user role to import a bank statement, and the PDF path additionally allows the cashbook client role. If the import option is missing entirely, check your role before you debug the file.
What we'd do
Start from the statement, not from whatever your bank happens to export. The format table above only matters while the file is your problem. MatchLedger reads the statement itself, from any bank or card issuer, in any country, PDF or CSV, scans included, and writes one Xero-ready CSV per account. No OFX hunt, no template, no format that turns out to be unavailable on your plan. See how it works.
PDF import: real, but narrower than people expect
Xero does import PDF bank statements. Two eligibility rules decide whether you will ever see the option, and both catch people out:
- Geography. Xero states that PDF bank statement import is currently only available in Xero organizations in Canada and the United States. A UK, Australian or New Zealand organization does not get this path, whatever the file looks like.
- Plan. PDF imports are not available for organizations on the Xero Ledger pricing plan, which is the plan a lot of accounting practices put their compliance-only clients on.
If you clear both, the file itself has to satisfy a specific list. Xero requires that a PDF statement:
- has a maximum height and width of 40 inches, or 2880 points
- is 35MB or less
- has a minimum resolution of 200 DPI
- is written in English
- is a debit or credit statement
- is scanned straight, because crooked or slanted scans can result in an error
- has a maximum of 100 pages per statement
- is not password protected
Xero also recommends using a file provided digitally or downloaded directly from your bank, and publishes a list of banks whose statement types it has validated. Statements from banks outside that list can still be imported, with the caveat that accuracy may vary while support for them is developed. Xero does recognise transactions that duplicate ones already imported in other files and excludes them during import, which is genuinely useful when you are stitching a year together file by file.
For the step by step version of this route, including what to do when Xero rejects a scan, see how to import a PDF bank statement into Xero.
What we'd do
Turn any PDF or scan into a verified Xero-ready CSV, whatever your organization is eligible for. Not one of the rules above applies to a CSV. MatchLedger reads statements from any bank or card issuer, in any country, PDF or CSV, scans included, and writes the file in Xero's own column shape. A UK or Australian organization, a client on the Xero Ledger plan, a 140-page statement and a crooked scan all still have a route in. If a layout ever reads wrong, we build support for it free.
The CSV rules that cause most import errors
CSV is where the work is, because you are hand-building a file to meet a spec. Xero publishes a template you can download from inside the product, under the bank account's menu, and it is worth starting there rather than reshaping your bank's export from scratch.
One amount column, with negatives
Xero's rule is that both income and expense amounts must be in the same column. Income is positive, expenses are negative, written either with a minus sign in front or in brackets, so -30.00 or (30.00). Bank exports frequently arrive with separate debit and credit columns, and merging them correctly, without losing the sign on a refund, is the single most common piece of manual work in this job.
No commas as decimal separators
Xero states plainly that you should not use commas to show decimal places. This is the rule that quietly destroys European-formatted exports, where 1.234,56 means one thousand two hundred and thirty four euros and fifty six cents. Get this wrong and the import either fails or, worse, succeeds with amounts off by a factor of a hundred or a thousand.
What we'd do
Never hand-edit a decimal separator again. This is the failure worth paying attention to, because it does not announce itself: the import succeeds and the amounts are wrong. MatchLedger writes amounts in the convention Xero expects, and it checks the extracted set against the statement's own opening and closing balances, so a file whose amounts are off by a factor of a hundred cannot tie and does not pass silently. See the export formats.
Dates, and the template region trap
Dates must use one of Xero's accepted formats. The trap is upstream of that: the import template Xero gives you is regional, and the region is determined by the language set in your web browser. If Xero cannot determine it, the file defaults to New Zealand English. A US bookkeeper whose browser language is set to something unexpected can download a template with day-first column headings and never notice, which turns 03/07 into the wrong month with no error message at all.
You can change your browser language and download the template again, or edit the headings in a spreadsheet program. Either way, check the region before you fill 400 rows.
Payee names create contacts
The Payee column is recommended rather than mandatory, and it has a side effect. If the payee already exists as a contact in Xero, the name in your file has to match the contact name exactly, or you end up with two contacts for the same vendor. Bank descriptions are machine strings, not vendor names, so this is worth cleaning before import rather than merging contacts afterwards.
The row limit, and what it means
Xero states that you cannot import a CSV file with more than 100,000 rows, and that if you hit it you should delete any empty rows in the file and try again, or use a different import file type such as OFX or QIF. In practice the empty-row advice is the operative part: a spreadsheet that has had data deleted from it often carries thousands of blank rows that Xero counts and you cannot see.
The other columns Xero recognises are Description, which appears under Particulars in the Bank statements tab, Reference, and Check number. Headings are optional, but mapping columns is easier with them, and mandatory fields are marked with an asterisk in the template.
What we'd do
Write the file to Xero's spec so none of these rules are yours to remember. You pick Xero as the destination before exporting, and the CSV comes out with income and expenses in one signed column, a date format Xero accepts, no commas inside decimals and no columns Xero will not map. That is this entire section, handled at the export step instead of in a spreadsheet at midnight. See the export formats.
What none of these rules check
Every requirement on this page is about the shape of the file. Not one of them is about whether the file contains everything the account actually did.
A CSV with 380 of the statement's 400 transactions imports perfectly. It satisfies the column rules, the date rules and the row limit. Xero accepts it, the lines appear ready to reconcile, and the twenty that went missing on page seven leave no trace anywhere in the process. Bank feeds have the same blind spot, which is why this shows up as a discrepancy months later rather than as an error on the day.
What we'd do
Prove the set is complete before Xero ever sees it. MatchLedger extracts every transaction, then checks the extracted set against the statement's own numbers: opening balance plus activity has to equal the closing balance printed on the page. A page that failed to extract is caught there, while it is still a file on your desk rather than a difference in the books.
Add the account ledger for the period and it reconciles the two against each other, which is the check no import step performs: one-to-one matching so a transaction can only settle once, near-miss handling so a few cents of bank fee does not read as a missing item, and a matched, missing and duplicate report at the end. See how both halves work.
A working order for the job
- Check whether your bank offers OFX. If it does, use it and skip the CSV rules entirely.
- If you are on PDF, check eligibility first, geography and plan, before you check the file.
- If you are on CSV, download Xero's template from inside the bank account and confirm its region matches your date order.
- Merge debits and credits into one signed amount column, and remove commas from decimals.
- Prove the file is complete against the statement's own closing balance before you import, not after.
- Import one account at a time, oldest period first, so any overlap stays visible.
If you just need the transactions out of one PDF and into a spreadsheet, the bank statement converter does that on its own, and the CSV it produces opens straight in Excel.
Common questions
Can Xero import a PDF bank statement?
Yes, with conditions. Xero lists PDF among the formats it accepts, but PDF bank statement import is only available to organizations in the United States and Canada, and it is not available on the Xero Ledger pricing plan. The file must be in English, no more than 100 pages per statement, 35MB or less, at least 200 DPI, no larger than 40 inches or 2880 points in either dimension, not password protected, and scanned straight. Crooked scans can produce an error.
How many rows can a Xero CSV bank statement have?
Xero states that you cannot import a CSV file with more than 100,000 rows. If you hit that message on a smaller file, the usual cause is empty rows below your data, so delete them and try again. Xero also suggests using a different import file type such as OFX or QIF.
Why does Xero reject my CSV amounts?
The most common causes are the amount column shape and the decimal separator. Xero wants income and expense amounts in the same column, with income positive and expenses negative, written either with a minus sign or in brackets, for example -30.00 or (30.00). It also states that you should not use commas to show decimal places, which is what breaks European-formatted exports.
Which file format should I use for Xero?
Xero recommends OFX where your bank offers it, because an OFX file can usually be imported without editing the export at all. QFX, QuickBooks and QIF files are also accepted. CSV is the fallback when your bank exports nothing else, and PDF is available to US and Canadian organizations that are not on the Xero Ledger plan.
Why did my Xero import create duplicate contacts?
The Payee column creates or matches contacts by name. Xero's guidance is that if the payee already exists as a contact, the name in your file has to match the contact name in Xero exactly, otherwise you get a second contact for the same vendor. Cleaning payee names before import is easier than merging contacts afterwards.
Does Xero check that my imported statement is complete?
No. Xero checks the file's shape, not its completeness, and it does exclude transactions it recognises as duplicates of ones already imported. Nothing in the import step compares the number of transactions in your file against what the statement itself says the account did. That check is a separate step, and it is the one that catches a page that failed to extract.
Keep reading
- QuickBooks Online upload limits. The same exercise for QuickBooks, where the numbers people quote often belong to the wrong upload path.
- How to import a PDF bank statement into Xero. The walkthrough for the PDF route, and the CSV fallback when your organization is not eligible for it.
- Statement-first bookkeeping. Why the statement, not the feed and not the receipt, should be the spine of the job.
- The catch-up bookkeeping playbook. Where import limits stop being an inconvenience and start setting the schedule.
Turn statement PDFs into a Xero-ready CSV, and prove the set is complete before you import it. Every plan is $0 during the open beta. No card, nothing to cancel.
Start Free