Bank Statement PDF to CSV for Xero — Xero bank import

Xero does not accept PDF bank statements. Its import wizard takes CSV, OFX, QFX, QBO or QIF, and this gives you the CSV already in the columns Xero maps: Date, Amount, Payee, Description and Reference, with dates written dd/mm/yyyy and money out negative.

Xero's import wizard takes CSV, OFX, QFX, QBO or QIF — all of which are here.

One Amount column, already signed

Xero's import has a single Amount field. A British statement prints money in and money out as two separate columns, and combining them by hand in a spreadsheet is the step this removes — money out is written negative, using the direction the bank's own running balance confirms.

Or skip mapping entirely

If you would rather not map anything, download the same statement as OFX or QFX from this site and Xero reads the columns itself.

Checked before you import

Press Verify transactions and a statement that does not reconcile is flagged here, not discovered weeks later during a bank reconciliation.

What the CSV file contains

Field by field, where each part of the download comes from.

On the statementIn the CSVHow
DateDateWritten dd/mm/yyyy, whatever order the statement printed.
Paid out, Paid inAmountOne signed column, money out negative, by the column the bank used and the running balance beside it.
DescriptionPayee, DescriptionThe bank's narration in both.
Type, Ref or Cheque NoReferenceThe bank's own code or reference, where a column is headed that way.
BalanceNot writtenXero's import has no balance column. It is used to confirm each amount's direction.
Opening balance lineNothingIt moves no money, so it is not a transaction.

Sample output

Made by this converter's own code from a made-up statement table like the one the PDF reader produces. The output is the file it writes, not retyped.

The input: Statement table

A made-up UK statement table, as the PDF reader hands it to the file writer. Reading the PDF itself is not part of this sample.

Date        Type  Description              Paid out  Paid in   Balance
01/03/2026        BALANCE BROUGHT FORWARD                      1,820.15
02/03/2026  FPI   EXAMPLE LTD SALARY                 2,450.00  4,270.15
04/03/2026  DD    MADE-UP COUNCIL TAX      146.00              4,124.15
13/03/2026  DEB   SAMPLE CAFE & BAKERY     8.40                4,115.75
20/03/2026  FPO   FICTIONAL LETTINGS RENT  950.00              3,165.75

The output: CSV for Xero

The whole file.

Date,Amount,Payee,Description,Reference
02/03/2026,2450.00,EXAMPLE LTD SALARY,EXAMPLE LTD SALARY,FPI
04/03/2026,-146.00,MADE-UP COUNCIL TAX,MADE-UP COUNCIL TAX,DD
13/03/2026,-8.40,SAMPLE CAFE & BAKERY,SAMPLE CAFE & BAKERY,DEB
20/03/2026,-950.00,FICTIONAL LETTINGS RENT,FICTIONAL LETTINGS RENT,FPO

Questions about converting a statement to CSV

Does Xero import PDF bank statements?

Only for organisations in the United States and Canada, not on the Ledger plan, and only a PDF downloaded from the bank rather than a scan. Everywhere, its statement import takes CSV, OFX, QFX, QBO and QIF, and this CSV is written in the columns that import maps: Date, Amount, Payee, Description and Reference.

Which date format should I choose in Xero?

Day first, dd/mm/yyyy. Every date in the file is written that way, whatever order the statement printed, so the one choice is right for the whole file.

Why is there one Amount column instead of Paid in and Paid out?

Xero's import has a single Amount field. Money out is written as a negative figure and money in as a positive one, so there is nothing to combine by hand before importing.

Related guides