Revolut keeps its trading statement separate from the bank statement, and the two look nothing alike — the first trap is exporting the wrong one. The bank statement knows your card spending; the Invest account statement knows your trades, and that's the one a portfolio import needs.
Step 1 — export from Revolut
- In the app open the Invest tab.
- More → Documents → Stocks → Account statement.
- Choose Excel as the format (it opens as a clean table you can save as CSV), pick the period, and Get statement.
Robo-advisor, crypto and commodities each have their own statements — repeat per product if you use them.
Step 2 — what's in the file
The current trading statement has eight columns:
| Revolut column | What it holds |
|---|---|
| Date | A full timestamp (recent statements use ISO format; older ones just a date) |
| Ticker | The symbol — there is no ISIN column, so ambiguous tickers may need a manual check |
| Type | BUY - MARKET, SELL - LIMIT, DIVIDEND, CASH TOP-UP, CASH WITHDRAWAL, CUSTODY FEE, STOCK SPLIT… |
| Quantity | Shares, fractional supported, positive |
| Price per share | In the trade currency (usually USD) |
| Total Amount | The cash amount — magnitude only; direction comes from Type |
| Currency | The currency of those amounts |
| FX Rate | The rate between your base currency and the trade currency at that moment |
Revolut has changed this format more than once over the years — if your statement's columns differ from the table above, the mapping logic still holds, just match by meaning.
Step 3 — map it onto the Pulse template
Download Pulse's import template:
| Pulse column | From Revolut |
|---|---|
date | The date part of Date |
deal_type | From Type: BUY - … → BUY · SELL - … → SELL · DIVIDEND → DIVIDEND · CASH TOP-UP/CASH WITHDRAWAL → CASH |
ticker_symbol | Ticker (empty on dividend and cash rows — put the stock in the comment) |
amount | Quantity (empty on cash rows) |
price | Total Amount converted to your base currency via FX Rate, sign fixed: buys and withdrawals negative; sells, dividends and top-ups positive |
transaction_fee | Usually 0 — Revolut folds trade fees into Total Amount. Skip CUSTODY FEE rows on import (a negative cash row would count against your invested capital, which a fee is not) |
asset_type | STOCK (or ETF) for trades, CASH for the rest |
comment | Anything that helps you review — the Type value is a good default |
Since most Revolut trades settle in USD while you probably track in EUR, the currency step matters: multiply Total Amount by the row's FX Rate (or divide — check one row against what actually left your account, the direction of Revolut's rate has varied between statement versions) so price lands in your base currency.
Example:
2026-03-14,BUY,AAPL,2,"-322.40",0,STOCK,BUY - MARKET · 350.10 USD @ 0.9209
STOCK SPLIT rows have no clean template equivalent — skip them on import and adjust the position by hand if a split ever leaves your share count wrong.
Step 4 — upload
Transactions → Import in Pulse, drop the file, and read the preview — with the FX conversion done by hand, compare one or two converted rows against your actual account history before confirming.