How to import Revolut statements into Xero, from CSV and PDF
Export the Revolut account statement as CSV for a clean import, or as PDF if you need the certified version. Xero's importer needs a date, a description and a single signed amount, so Revolut's separate Fee column and its REVERTED rows both have to be resolved before the file will balance.
Export the right file
Revolut offers the same period in more than one shape, and picking the wrong one costs an hour. In the Revolut app or web banking, open the account, choose the statement, and pick the format by what you need it for.
- CSV: one row per transaction with machine-readable columns. This is what you want for an import.
- Excel: the same data, and fine if your workflow already lives in a spreadsheet.
- PDF: the presentable, certified-looking version. Accountants and lenders ask for this one. It imports too, but the table has to be read out of the layout first.
Set the date range to the period you are posting, not to everything available. Overlapping ranges are the main cause of duplicated lines in a manual import, because Xero's importer has no memory of what you loaded last time.
The three columns Xero will argue with
Xero's manual import wants a date, a description and an amount, with money out negative. Revolut's export is structured differently, in three specific ways.
- Amount and Fee are separate columns. A payment with a conversion fee is two numbers in Revolut and one movement in the bank. Import the Amount column alone and the account will be out by the total of the fees for the period.
- REVERTED rows sit alongside the original. A reverted transaction leaves both the original line and its reversal in the export. Both belong in the ledger, and deleting one to make the balance look right breaks it in the other direction.
- The date column format follows your Revolut locale. Xero asks you to declare whether the file is day-first or month-first, and getting it wrong silently posts a month of transactions to wrong dates rather than failing.
Quick check before you import: sum the Amount column, add the Fee column, and compare against the movement between the opening and closing balance on the statement. If those do not agree, the file is not ready.
Importing the CSV into Xero
- In Xero, open the bank account and choose to import a statement.
- Upload the prepared CSV and map the columns: date, description, and a single signed amount, or separate debit and credit columns if that is how you have shaped it.
- Declare the date format. This is the step to slow down on.
- Review the preview. Xero shows what it will create, and this is the last point at which a sign error is cheap to fix.
- Import, then check the account's balance in Xero against the statement's closing balance before reconciling anything.
Getting a PDF statement in
Xero's importer does not read PDFs. The usual route is to get the table out first, either by copying it into a spreadsheet and repairing the columns by hand, or by running it through a converter that outputs CSV. Both work, and both are a per-statement job with no check that the result is complete.
The failure mode to watch for is silent truncation: a converter that drops the last page of a multi-page statement produces a file that imports cleanly and is simply missing a week. Comparing the imported closing balance against the PDF's own closing balance catches it. Nothing else does.
If the Business feed already covers part of the period
Revolut Business has a native Xero feed that runs from the day it was connected. Importing a statement that overlaps a period the feed already delivered produces two copies of every transaction in the overlap, and Xero's manual import will not warn you.
Manually, the defence is to set the statement's date range to end the day before the feed starts, and to check the first and last lines against the ledger. It works, and it depends on getting the boundary right every time.
StatementClear takes the same export and posts it through Xero's Bank Feeds API with the overlap checked automatically: lines already in the account are skipped, the running balance is verified, and what arrives is a feed rather than an import you will repeat next month.
Stop importing Revolut statements. Feed them instead.
StatementClear posts the statements you already export into Xero as live bank feed lines, deduped and balance-checked before anything reaches the ledger.