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.