How to import a Revolut statement into Xero

Revolut’s spreadsheet statement is close to what Xero’s bank statement import wants, but not close enough to upload as it is. Its dates carry a time of day in a format Xero doesn’t list, fees sit in a column of their own, and the file includes transactions that never completed. This page walks through each mismatch for a Revolut personal statement, what to change, and which of those changes SpreadsheetFix makes for you in the browser.

Updated
From
Revolut CSV export
To
Xero bank statement import
SpreadsheetFix rules
Free up to 5,000 rows

What the Revolut export looks like

Header row, as current exports show it. Check it against your file.
Type,Product,Started Date,Completed Date,Description,Amount,Fee,Currency,State,Balance

Revolut doesn’t publish the layout of its statement file. The header above is the one current exports use according to the open-source parsers and guides listed under Sources, which agree on it. Open your own file and compare its first row with it before following the steps, because Revolut has changed the layout before and tools built on it have had to catch up.

Every transaction has two timestamps, Started Date and Completed Date, written like 2026-09-02 10:02:51. Started Date is when you paid or the transfer began; Completed Date is when it settled and the balance moved. For a card payment the two can be a day or more apart, so a coffee bought on the 31st can complete in the following month.

Amount is signed, with money out negative, which is what Xero wants. Fee is a separate column, so a charge such as an ATM fee isn’t included in Amount, and Balance is the running balance of the account. State says whether a row is COMPLETED. Revolut’s own help says statements include pending, completed and reverted transactions, so a file downloaded mid-month can hold rows that will never reach your bank balance.

Downloading it

  1. 1

    In the Revolut app, go to Home, tap Accounts and pick the currency account.

  2. 2

    Tap More (…), then Statement.

  3. 3

    Choose the period, pick Excel rather than PDF, and tap Generate.

What Xero needs

  • Only Date and Amount are required. Payee, Description and Reference are optional.
  • Money in and money out share one Amount column: income positive, expenses negative.
  • Dates in a listed format, such as DD/MM/YYYY, MM/DD/YYYY or DD-MM-YYYY.
  • Delete opening and closing balance columns, the account number and empty rows.
  • A header row in row 1, with a unique name for each column.
  • No more than 100,000 rows per file.

From Xero’s own help pages, listed under Sources below.

Where they don’t match

Dates like 2026-09-02 10:02:51 aren’t one of the date formats Xero lists for CSV imports.

Rewrite both date columns as DD/MM/YYYY. SpreadsheetFix does this, and drops the time of day.

Xero wants every amount in one column, but Revolut’s fees are in a second one.

Add each non-zero fee as its own row, with the fee as a negative amount on the same date.

Rows whose State isn’t COMPLETED never moved money, but would import as if they had.

Filter the State column and delete every row that isn’t COMPLETED before you import.

Xero calculates the balance itself and asks you to delete balance columns.

Delete the Balance column. Keep a note of the closing balance to check the reconciliation against.

Step by step

  1. 1

    Download the statement from the Revolut app as Excel, one currency account at a time, and match each to its own Xero bank account.

  2. 2

    Upload the file below. SpreadsheetFix rewrites Started Date and Completed Date as DD/MM/YYYY, tidies spacing and removes blank rows, then checks that Amount, Fee and Balance total the same as before.

  3. 3

    Download the cleaned CSV and open it in Google Sheets, or in Excel through Data > From Text/CSV with the date columns set to Text, so the dates aren’t converted again.

  4. 4

    Delete rows whose State isn’t COMPLETED, add a row for each fee, and delete the Balance column.

  5. 5

    In Xero, go to Accounting > Bank accounts, open the account’s menu and choose Import a Statement.

  6. 6

    Assign Completed Date to Transaction Date, Amount to Transaction Amount and Description to Payee or Description, then confirm DD/MM/YYYY if Xero asks.

What SpreadsheetFix does here

The date problem is the one most likely to stop the import, and it’s the one SpreadsheetFix fixes completely. Both timestamp columns are rewritten as DD/MM/YYYY, the first date format Xero lists, and the time of day is dropped. The Started Date of a card payment and its Completed Date are converted separately, so each keeps its own day.

Because cleaning runs in your browser, the statement, with its payees and balances, is never uploaded. Before you download, the totals check adds up the Amount, Fee and Balance columns and confirms that they match the original to the cent, so you know that rewriting dates didn’t touch a figure.

Everything on this page uses free rules, so files up to 5,000 rows clean without an account. Filtering by State, adding fee rows and deleting the Balance column are left out of the preset, because they are decisions about your books rather than formatting. On Pro, the Filter Rows and Delete Columns rules can do the first and the last.

Choose a fileor drop a CSV, TSV or Excel file here, up to 50 MBProcessed in your browser. Nothing is uploaded.

No file to hand?

Before and after

Before: a Revolut export
Type,Product,Started Date,Completed Date,Description,Amount,Fee,Currency,State,Balance
CARD_PAYMENT,Current,2026-09-01 08:14:22,2026-09-02 10:02:51,Pret A Manger,-6.45,0.00,GBP,COMPLETED,1243.55
TRANSFER,Current,2026-09-03 12:00:05,2026-09-03 12:00:06,To ACME Supplies Ltd,-250.00,0.00,GBP,COMPLETED,993.55
TOPUP,Current,2026-09-05 09:11:42,2026-09-05 09:12:12,Payment from Client SARL,1500.00,0.00,GBP,COMPLETED,2493.55
ATM,Current,2026-09-06 14:20:00,2026-09-06 14:20:01,Cash at Lisbon ATM,-100.00,1.00,GBP,COMPLETED,2392.55
After
Type,Product,Started Date,Completed Date,Description,Amount,Fee,Currency,State,Balance
CARD_PAYMENT,Current,01/09/2026,02/09/2026,Pret A Manger,-6.45,0.00,GBP,COMPLETED,1243.55
TRANSFER,Current,03/09/2026,03/09/2026,To ACME Supplies Ltd,-250.00,0.00,GBP,COMPLETED,993.55
TOPUP,Current,05/09/2026,05/09/2026,Payment from Client SARL,1500.00,0.00,GBP,COMPLETED,2493.55
ATM,Current,06/09/2026,06/09/2026,Cash at Lisbon ATM,-100.00,1.00,GBP,COMPLETED,2392.55

Eight timestamps rewritten as DD/MM/YYYY. The ATM row’s 1.00 fee still needs its own row before import: -1.00 on 06/09/2026.

Totals check, Amount: 1,143.55 − 0.00 removed = 1,143.55

What it won’t do

  • This page’s preset keeps every column, so the Balance column is still in the download. On Pro, tick it in the Delete Columns rule before you download; otherwise delete it in your spreadsheet.
  • The free preset doesn’t filter rows by State. On Pro, Filter Rows can keep only rows where State equals COMPLETED. SpreadsheetFix doesn’t turn the Fee column into separate rows, so look for non-zero fees yourself.
  • Xero remembers how you assigned the columns. If a later Revolut file has different columns, Xero asks you to assign them again, so compare the header row each time.

Questions

Which Revolut date should I use in Xero, Started Date or Completed Date?

Completed Date, in most cases. It is when the money actually left or reached the account, so it matches the balance Revolut shows and makes the Xero reconciliation agree. Started Date is useful as a reference when you match card payments to receipts.

Why does Xero reject the dates in my Revolut file?

Revolut writes each date with the time of day, for example 2026-09-02 10:02:51, and that isn’t one of the formats Xero’s CSV import lists. Rewrite the dates as DD/MM/YYYY first.

How do I get Revolut fees into Xero?

Xero’s import takes a single amount column, so a fee in Revolut’s Fee column won’t come through on its own. Add a separate row for each fee with a negative amount and a description such as “Revolut fee”, then reconcile it to your bank charges account.

Does SpreadsheetFix upload my Revolut statement?

No. The file is read and cleaned by JavaScript in your browser tab. Nothing in it is sent to SpreadsheetFix’s servers.

Sources

Xero and Revolut help pages

The Revolut column layout

Revolut doesn’t publish the columns of its CSV export. The header row on this page is the one these independent parsers and guides agree on. Banks change their exports without notice, so treat your own file’s first row as the authority.