DEGIRO, XTB, Interactive Brokers, Revolut and Trade Republic all export a transaction history. None of them agree on what to call the columns, and several export in whatever language your account is set to — which is why an importer that only recognises one broker’s wording fails on all of them.
The fix is not more guessing. It is asking you two questions about your own file, once.
What every broker export has in common
Underneath the naming, the files are the same shape. One row per event, and each row carries:
- a date, in one of about four formats
- an action — what happened, in the broker’s own words
- a ticker or ISIN
- a quantity and a price
- a total, usually in your account currency
Only two things differ in ways no amount of alias-matching can cover: the column headings, and the vocabulary in the action column. eToro writes “Open Position”. XTB writes “Stocks purchase”. A DEGIRO export in Dutch writes “Koop”. All three mean buy.
Which report to export
Brokers offer several downloads and they are not interchangeable. Broadly:
| Report type | Contains | Usable? |
|---|---|---|
| Transaction history / account statement | Every buy, sell, dividend, deposit, with dates | Yes — this is the one |
| Portfolio / positions | What you hold right now | No — no history, so no cost basis |
| Tax report | Realised gains for one tax year | Partial — one year, already aggregated |
| Trade confirmations | Individual contract notes | Usually one file per trade |
The one you want is the full transaction history, in CSV rather than PDF, covering the entire life of the account. A PDF statement contains the same facts and no reliable way to read them back out.
Where it lives, by broker
These interfaces change, and any article listing exact menu paths goes stale within months. What does not change is the name of the thing you are looking for, so this describes that instead.
DEGIRO
Under the account or inbox area, alongside your statements. DEGIRO distinguishes an Account statement (all cash movement, including dividends and fees) from a Transactions report (trades only). Take both if offered — the trades give you positions, the account statement gives you dividends and deposits. Exports arrive in the account’s language.
XTB
In the account history or reports section of the web platform. XTB writes actions in phrases such as “Stocks purchase” and “Stocks sale”, and separates cash operations from trades in some report types.
Interactive Brokers
Under Reports or Statements — IBKR calls its exports Activity Statements and is the most configurable of the group. Choose a custom date range covering the whole account and CSV as the format. Its flex queries can produce exactly the columns you want, which is a real advantage once you have set one up.
Revolut
In the investing section of the app rather than with your bank statements — the trading account exports separately from the current account. Revolut generally offers a full account statement for the investment account as both CSV and PDF; take the CSV.
Trade Republic
Historically the weakest of the group for exports, with statements delivered largely as PDF documents rather than a machine-readable history. Check whether a CSV transaction export has been added to your account before assuming one exists — this is the broker most likely to require manual entry.
The two questions
Once you upload a file that is not recognised automatically, the mapping screen asks:
- Which column is which? Your headers are shown with a best guess against each field. You correct the ones it got wrong, which is usually one or two rather than all of them.
- What does each action value mean? Every distinct value in your action column is listed with a row count, and you say whether each is a buy, a sell, a dividend, a deposit, a withdrawal, interest, or something to ignore.
The second list is shorter than people expect. A ten-year history usually contains six to ten distinct action values, and you classify a list, not a history.
Details that decide whether the numbers come out right
- Decimal commas. European exports write “1.234,56” where US ones write “1,234.56”. Read wrongly, a thousand-euro trade becomes a one-euro trade. Detection is by which separator appears last in the number, which is reliable in both conventions.
- Semicolon delimiters. A CSV from a European locale is frequently semicolon-separated, precisely because the comma is busy being a decimal point.
- Date order. 03/04/2026 is 3 April to a European broker and 4 March to a US one. Where a file contains any day above 12 the order is provable; where it does not, the broker’s locale decides.
- Negative quantities on sells. Some brokers write a sale as −10 shares, others as 10 shares with the action saying sell. Counted without noticing, a sale adds to your position.
- ISIN instead of ticker. Common at European brokers. An ISIN identifies the security unambiguously, which is more precise than a ticker, but it has to be resolved to one before prices can be fetched.
Several brokers, one portfolio
If you hold positions at two brokers, export both and upload both. The histories merge into a single position list, and total return across the pair becomes computable — which is the thing neither broker’s own app can show you, because each one can only see its own half.
One trap: a transfer of shares between brokers looks like a withdrawal in one file and a deposit in the other. Classified literally, it registers as money leaving and separate money arriving, and both accounts’ returns come out wrong. Mark those rows as ignored — see the piece on cash flows for why that matters to the calculation.
HaboFi reads a Trading 212 export automatically and asks these two questions for any other broker. No broker login and no API key — a file you downloaded yourself, and nothing that keeps reading your account afterwards.
Try HaboFi free