Xero has bank feeds, and when a feed is connected it pulls transactions in automatically. But feeds are not always an option. The account might be closed, the client might be with a bank Xero does not connect to, or you might be reconciling an old period the feed never covered. When that happens, Xero lets you import a statement manually. The catch is that it reads CSV, not PDF, and it expects the columns in a shape it recognizes. If you hand it a messy file, the import either fails or posts transactions to the wrong dates.
This guide covers the whole path: getting a clean CSV out of the PDF, understanding what Xero's importer actually wants, and mapping the columns so the upload works the first time.
What Xero's manual import expects
Xero's statement importer is stricter than it looks. It wants one dated row per transaction, and it needs to see, at minimum, three things: a Date, an Amount, and a Payee or Description. The date has to be in a format Xero can parse, the amount has to be a plain number, and every row that represents a transaction needs to be present with no summary lines mixed in.
You have a choice on the amount. Xero accepts a single signed Amount column, where money out is negative and money in is positive, or two separate columns for money spent and money received. Either works. What does not work is a column full of currency symbols, thousands separators, or blank rows where the statement had a page break. Xero reads those literally and chokes.
So the real task is not the upload itself, which takes a minute. It is producing a file clean enough that Xero accepts it without complaint.
Get a clean CSV from the PDF first
You cannot upload a PDF to Xero, so the first move is converting it. The tempting shortcut is to open the PDF, select the transaction rows, and paste them into a spreadsheet. It almost never survives the trip. Dates fuse with descriptions, the amount column jumps a cell, and negatives lose their sign. You end up rebuilding the file by hand, which defeats the point.
A converter that reads the statement's layout is the faster route. ConvertFin turns a PDF statement into an Excel or CSV file with four columns: Date, Description, Amount, and Balance. Those first three map directly onto what Xero asks for, and the Balance column is there if you want to sanity-check the running total before you import. Credit card statements often have no running balance, so that column comes through empty, which is normal and does not affect the Xero import.
One detail worth calling out: ConvertFin runs entirely in your browser. The PDF is parsed on your own machine and never uploaded to a server. When the statement belongs to a client rather than to you, that changes the calculus of which tool you are comfortable running it through. The security page explains how the local parsing works if you want the specifics.
If you would rather see the exact output format before committing to the workflow, the convert to CSV walkthrough shows what the file looks like row by row.
The one thing that breaks this: scanned statements
Before you go further, check whether your PDF actually contains text. Open it and try to highlight a transaction with your cursor. If the text selects, you are fine. If nothing highlights and the whole page behaves like a picture, the statement is a scanned image, and no text-based converter can read it. There is no text underneath to extract.
This trips people up because a scan and a real PDF look identical on screen. ConvertFin does not do OCR, so it needs selectable text to work. If you are stuck with a scan, the honest fix is either to download a fresh PDF straight from online banking, which is almost always text-based, or to run the image through OCR first. We wrote up the options for scanned statements separately, because it is a common enough dead end to deserve its own page.
Import the CSV into Xero
Once you have a clean CSV, the Xero side is quick.
In Xero, open the bank account you are reconciling from the dashboard. Click Manage Account in the top right, then choose Import a Statement. Xero asks you to browse to your file, so pick the CSV you just converted.
The next screen is where the work happens. Xero shows you a preview and asks you to match its fields to your columns. Point the Date field at your Date column, the Amount field at your Amount column, and the Payee or Description field at your Description column. If your file uses a single signed amount column, tell Xero that spent and received are combined and let it read the sign. If you split debits and credits into two columns, map each one to the matching field instead.
Watch the date format closely. Xero needs to know whether your file reads as DD/MM/YYYY or MM/DD/YYYY, and getting it backwards silently posts a transaction dated the 3rd of April to the 4th of March. The preview shows you parsed dates, so glance at a few rows and confirm they look right before you continue.
Finish the import, and the transactions land in your account ready to reconcile. From there Xero treats them like any other imported line: you match them to bills and invoices, or code them to accounts, exactly as you would with a live feed.
Errors you might hit, and the fix
Most failed Xero imports trace back to the file, not the software.
- "The file could not be imported." Usually a header or summary line sitting above the transaction rows, or a stray blank row. Delete anything that is not an actual transaction.
- Amounts come in as zero or text. Currency symbols and thousands separators are the culprit. Xero wants
1250.00, not$1,250.00. - Dates land in the wrong month. The date format was set backwards during mapping. Re-import and fix the format on the mapping screen.
- Duplicate transactions. If you import a range that overlaps what a feed already brought in, you will get doubles. Import only the gap the feed missed.
- Missing rows. Statements sometimes break transactions across pages with subtotals in between. A layout-aware conversion keeps the rows intact; a copy-paste job tends to drop them.
A clean starting file heads off nearly all of these, which is the whole argument for converting properly instead of wrestling with paste.
The short version
Xero will not read a PDF, but it reads CSV well once the columns are clean. Convert the statement to a CSV with Date, Description, and Amount, confirm the PDF has real text and is not a scan, then map those three columns onto Xero's importer and watch the date format. If you also keep books in QuickBooks, the same conversion feeds that import with only the upload step changing.
Ready to start? Convert your PDF statement to CSV in your browser, check the columns, and import. Once you have run it once, each statement after that takes a couple of minutes.
