How to import a bank statement PDF into Xero

Xero's statement import takes a CSV (and some other bank file types), not a PDF. So the job is: get the transactions out of the PDF, shape them into a CSV, import, and check the totals. This page covers each step and where it usually goes wrong.

Source note. Xero Central pages load with JavaScript and the page text did not load in the tool I used (tried 2026-10-04 and 2026-10-05). Where I quote Xero, the text comes from a search-result summary of Xero Central. The detailed column rules come from third-party guides that disagree in places (shown below). Open Xero's own article for your region before relying on a detail: Import a bank statement in CSV format (Xero Central, US).

1. Check the PDF has a text layer

Try selecting a line of text in the PDF. If you can, the methods below work. If not, it is a scan or photo and needs OCR before anything else.

2. Get the rows out of the PDF

Use Excel's Data > Get Data > From File > From PDF (Microsoft documents the PDF connector for Excel: Power Query PDF connector, read 2026-10-04), or copy and paste from the PDF viewer into a sheet. Details for multi-page statements are in the PDF to Excel guide.

3. Shape the CSV

ColumnStatusRule (third-party sources)
DateRequiredMust match your Xero organisation's regional date setting. One guide: DD/MM/YYYY for UK/AU/NZ, MM/DD/YYYY for US.
AmountRequiredOne signed column: money in positive, money out negative. No currency symbols.
PayeeOptionalFree text.
DescriptionOptionalFree text.
ReferenceOptionalE.g. cheque number or bank reference.

Sources: easybankconvert.com and statementedge.com (both third-party vendor blogs, read 2026-10-04). They also list Analysis Code (statementedge) or Bank Account (easybankconvert) as optional; they do not agree, so leave those out unless you need them.

If your PDF has separate Debit and Credit columns, Xero's help (as summarised in a search result) says income and expense amounts must be in the same Amount column. Merge them: with money out in column C and money in in column D, put =D2-C2 in a new column and fill down.

4. Import and map the columns

From Xero Central's CSV import article (search-result summary, 2026-10-04): "The first time you import a CSV bank file, you need to assign each column in the import file to a bank statement field. This assignment applies to future CSV imports, unless the new file contains extra columns or different column headers."

Practical consequence: keep the same headers every month for the same bank account, or you will be asked to map again.

5. How big a file can be

Third-party guides disagree: one says a maximum of 1,000 transactions per import (easybankconvert.com), another says up to 500 lines excluding the header (a search-result summary), and one mentions 1 MB. Xero's own limit was not readable by my tools. Safe approach: split anything above about 500 rows into several files.

6. Pitfalls specific to Xero

7. Another option: a desktop script

I sell a one-time $29 Python script that reads text-layer PDF statements and writes CSV files, including a Xero layout. It is a script you run on your own computer, not a website. You need Python installed and one install command (pip install pdfplumber). It does not read scanned, photographed or password-protected PDFs. I have not tested it on a real bank's layout, and I have not tested its Xero file in a live Xero organisation, so check its output against your statement and import a small test file first. Bank Statement PDF to CSV Converter on Gumroad.

If you do a few statements a month, the manual method is the better choice.