1. Your Revolut statement
Revolut Business > Accounts > the currency account > Statement > Excel/CSV. One currency account at a time. Columns are matched by name (Date completed (UTC), Type, Description, Payment currency, Amount, Total amount, Exchange rate, Fee, Balance).
Choose a file or paste the text, then click Read, check and build journals.
Result
Foreign-currency position
| Realised FX in the statement | Balance held | Cost | Worth at last rate | Unrealised (not journalled) |
|---|
Journals
| Journal | Date | Account | Debit | Credit | Memo |
|---|
Download
The accounts must already exist in your software under these names or codes. Post the journals, then match each conversion against the other balance's statement through Revolut Conversion Clearing.
The model, and what it leaves out
- Valuation: each row is valued in your base currency at the rate you typed for its day (nearest earlier day, then the month's rate). A conversion into your base currency uses the rate Revolut printed on the row, so the proceeds equal what actually landed.
- Average cost: money received adds to the balance at its value on the day; money leaving (sent, card, fees, conversion) leaves at the balance's average cost. The difference between what it was worth and what it cost is the realised gain or loss, booked on its own line.
- Running balance proof: every row must follow from the one before. Revolut statements may list newest or oldest first; the page puts the rows in order by that chain, works out whether the Fee column is inside the Amount or on top, and reports the first row where it breaks.
- Clearing: conversions between Revolut balances are journalled to a clearing account so the two statements net to zero once both are posted.
- Not checked: that the statement matches your Revolut account or books, tax rules for foreign exchange in any jurisdiction, unrealised gains (shown, not journalled), conversions between two non-base currencies (valued at your rate), and that the accounts exist in your software.
Common questions
How do I record Revolut multi-currency transactions in QuickBooks or Xero?
Download the statement CSV for one currency balance from Revolut, paste it here, choose the currency your books are kept in and type the exchange rates you use for the books. The page values every row in your base currency, books money received, money sent, card spending, fees and conversions to their own accounts, puts the realised exchange gain or loss on its own line, and writes a balanced journal per month for Xero, QuickBooks Online or QuickBooks Desktop.
What is realised FX gain or loss on a Revolut balance?
When you hold foreign currency and later spend, send or convert it, the base-currency value it leaves at can differ from what it cost you to acquire. That difference is a realised exchange gain or loss and belongs in your profit and loss. This page tracks the balance at average cost and books the difference on each row that takes money out.
Which exchange rates does it use?
Rates you type, in base currency per 1 unit of the statement currency, either for a day (2026-09-10 1.1200) or for a whole month (2026-09 1.1050); a day with no rate uses the nearest earlier one. For a conversion into your base currency it uses the exchange rate Revolut printed on that row, so the proceeds match what landed. The page never fetches rates.
How does it prove the statement is complete?
Every Revolut row carries a running balance. The page checks that each balance equals the one before plus the row's amount (and works out whether Revolut's Fee column is inside the Amount or on top of it), lists the first row where the chain breaks, and checks the closing balance against the figure you type from your Revolut account.
What about opening balances from before the statement?
The first row's running balance implies an opening balance. If you type its base-currency cost, gains carry over correctly from earlier periods; if you do not, it is valued at the first day's rate and the page says so.
Is it safe to paste a Revolut statement into a web page?
The page runs in your browser, the file is read locally and nothing is uploaded; a test in the code asserts there are no network calls. A statement shows counterparties and references; delete those columns if you would rather not have them on screen, because the page only needs the date, amount, currency, description, running balance, fees and exchange columns.
What does this not check?
Whether the statement matches your Revolut account or your books, tax treatment of foreign exchange anywhere (some jurisdictions treat small personal-use gains differently, and business rules vary), unrealised gains at period end (shown for information, not journalled), conversions between two non-base currencies (valued at your rate, not Revolut's), and that the account names or codes exist in your accounting software.