Revolut · account statement · EU

Convert Revolut CSV Statements to QuickBooks QBO/OFX Format

Drop a Revolut export below. The columns are pre-selected for this layout, the rows are checked for the problems that break imports, and the QBO, OFX or QFX file is generated on this page. Your statement is parsed by a Web Worker inside your own browser and never leaves the device.

Imports into Xero, QuickBooks and Sage.

  • No upload — parsed locally
  • Pre-mapped for this layout
  • Ready for Xero
Revolut converter

Statement conversion workspace

Statement file input

Data is parsed entirely in local memory via client-side Web Workers. Zero server uploads. Impenetrable compliance.

Column mapping rules

mapping rules

Live preview

0 rows
Awaiting statementrows render here as they parse

Pre-flight

awaiting file

Output format compliance

[OFX SGML Specification v1.0.2 Compliant]
[QuickBooks Desktop-compatible Web Connect ID]
[SHA-1 Transaction Deduplication Protection]

Guest threshold reached

Daily guest threshold reached. Create a free account to unlock unlimited conversions.

Guests get 2 conversions every 24 hours. Your file stays loaded — close this to keep working on the mapping.

Upgrade to convert this file

This statement has 0 transactions. The free tier converts up to 50 per file.

Sign in to upgrade

Your file never leaves the browser. Only the subscription check and anonymous usage counters touch the network, and neither carries statement data.

The Revolut CSV layout

What a Revolut export contains, and which field each column becomes in the converted file.

Date format
YYYY-MM-DD HH:MM:SS (YMD)
Amount convention
One signed column, plus a SEPARATE Fee column
Header row
10 columns
Currency
€ EUR · e.g. €1.234,56
Layout checked
2026-09-05

This layout is compiled from published export formats and has not yet been diffed against a live Revolut download. Banks change their columns, and the shape differs between account types. Your conversion is unaffected — the converter reads the real schema from your file — so adjust the mapping above if your export differs from the table.

Revolut CSV columns and the field each becomes
#Column in exportPre-selected as
1Typeignored
2Productignored
3Started Datedate
4Completed DatepostedDate
5Descriptiondescription
6Amountamount
7Feeignored
8Currencycurrency
9Statetype
10Balancebalance

Import errors this layout causes, and what happens instead

Revolut is the hardest common case, for three compounding reasons. The Fee column is a separate charge from Amount, so importing only Amount leaves your totals short by every transaction fee in the period — a small, consistent shortfall that is easy to overlook and annoying to find later. A multi-currency account exports all its currencies into one file with a Currency column, which has no valid OFX representation and must be split per currency first. And the State column includes REVERTED and PENDING rows for money that never actually moved.

No statement data leaves your device

Conversion runs in a Web Worker inside this page, so your statement is never uploaded. Because none of its contents reach our servers or any third party, there is no transfer of client financial data to a processor when you use this tool — the file, and every account number and payee name in it, stays on the machine that opened it.

Running off the main thread is also what keeps the page responsive. Encoding detection, a full parse and emitting a large document are heavy on a long statement; on the main thread that would freeze the interface. The worker carries a processing deadline, so a malformed file fails with a clear message rather than hanging.

Three things touch the network, and none carries statement data: a subscription check when a file exceeds the free row limit, an advertising tag recording that a conversion happened, and anonymous usage counters — the output format and a coarse size band such as “51–200 rows”. No filename, no amounts, no payee names, no account numbers. The file stays in the tab, and closing the tab discards it.

Revolut CSV conversion questions

How do I convert a Revolut CSV statement to Xero?
Export your Revolut account statement transactions as CSV, then drop the file into the Luventra converter. The Revolut column layout is pre-selected, so the Date, Description and Amount fields map automatically. Generate a QBO, OFX or QFX file and import it into Xero. The statement is parsed inside your own browser, so the file is never uploaded.
Why does my Revolut CSV fail to import into Xero?
Revolut is the hardest common case, for three compounding reasons. The Fee column is a separate charge from Amount, so importing only Amount leaves your totals short by every transaction fee in the period — a small, consistent shortfall that is easy to overlook and annoying to find later. A multi-currency account exports all its currencies into one file with a Currency column, which has no valid OFX representation and must be split per currency first. And the State column includes REVERTED and PENDING rows for money that never actually moved.
What date format does a Revolut export use?
Revolut exports dates in YYYY-MM-DD HH:MM:SS format. Luventra reads that order directly and rewrites each date into the OFX timestamp format that Xero expects, so days and months are not transposed on import.
How does Revolut represent debits and credits in its CSV?
One signed column, plus a SEPARATE Fee column Luventra normalises this into a single signed amount per transaction before writing the QBO or OFX file, which is what Xero expects.
Is my Revolut statement uploaded to a server?
No. The Revolut CSV is parsed and converted entirely inside an isolated Web Worker in your own browser. No transaction text, amounts, payee names, account numbers or file names are transmitted to Luventra or any third party, and no copy of the statement is stored anywhere.
Does a Revolut CSV export include a header row?
Yes. A Revolut export starts with a header row: Type, Product, Started Date, Completed Date, Description, Amount, Fee, Currency, State, Balance. Luventra matches those column names automatically, so the mapping is already correct when the file loads.