How to export your DeGiro transactions and account statement
Two files, both from DeGiro's own export buttons — and the one setting that matters most is the start date, which is the one most people leave at its default.
Two files, and why it takes both
DeGiro keeps two separate records of every account, and the tracker needs both of them. Transactions.csv is the trade list: one row per executed buy or sell, with its date and time, the product and its ISIN, the quantity, the price, the value in the instrument's own currency and in your account's, the exchange rate, the fees and the total. Account.csv — DeGiro calls it the account statement — is the cash ledger: every amount that moved in or out of the account's cash, whether a deposit, the cash leg of a trade, a dividend, a tax deduction, a fee or interest, each with the running balance straight after it.
Neither file is enough on its own. Transactions.csv knows exactly how many shares you hold and what you paid for them, but not when money arrived from your bank. Account.csv knows every cash movement, but describes a trade only as a line of text. So the tracker reads holdings and cost basis from the first, and cash balances, deposits, withdrawals, dividends, interest and fees from the second — the statement is treated as the source of truth for anything that is money rather than shares.
Exporting Transactions.csv
Log in to DeGiro in a web browser; the export buttons are easiest to reach there. Open the Transactions overview. Where it sits in the menu has moved between versions of DeGiro's site, and its name follows your display language (“Transacties” on a Dutch account), so look for the word rather than for a fixed path.
Set the start date to a day before you opened the account and the end date to today, then use the Export button and pick CSV rather than a spreadsheet or PDF format. Save the file as it downloads. Opening it in a spreadsheet program and saving it again is the single most common way a good export becomes one that won't read — more on that below.
If you want to check it before uploading, open it in a plain text editor. The first line should be a header row beginning with Date,Time (or Datum,Tijd on a Dutch account), followed by one line per fill. An order that was filled in two parts can appear as two lines with the same order ID; that's expected, and both count.
Exporting Account.csv
The account statement (“Rekeningoverzicht” in Dutch) is exported the same way: open it, set the same date range — from before the account was opened until today — and export as CSV.
Don't confuse it with the portfolio export, which is a snapshot of what you hold right now and has no history in it at all. Put one of those in the Account.csv slot and the tracker recognises it and says so: “this looks like a Portfolio holdings export, not an Account statement”, followed by a pointer to the right export.
Why the start date matters more than anything else
Everything the tracker computes is replayed from the first row forward, so a file that starts in the middle of your history produces figures for the middle of your history. Holdings are rebuilt from zero by adding every buy and subtracting every sell; a position bought before the export's start date simply never appears as held.
Cost basis suffers the same way. Each sale is matched against earlier buys of the same ISIN, oldest first (see the guide on realized and unrealized gains). When a sale has no recorded buy to match — because the buy happened before the start date — the unmatched shares are treated as if they cost nothing, so the realized gain on that sale comes out too high rather than the analysis stopping.
Returns depend on the deposits most of all. Time-weighted return, XIRR and the index comparison are all built from your real deposits and withdrawals on their real dates; leave out the first few years and those calculations start from wherever the file starts, as if the earlier money had never been put in. So export from the very beginning, for both files, every time — a long history is not a problem, and a short one quietly is.
What the tracker does with the files
Both files are read while your browser session is open, to produce the figures on screen. Columns are found by their header names, and both English and Dutch header names are recognised. DeGiro leaves the header of each currency column blank, so those are found by content instead — a column whose every value is a three-letter code like EUR or USD — and paired with the amount column beside it. Dates written year-first and dates written day-first are told apart by the shape of the first date in the file, and amounts with a decimal comma read the same as amounts with a decimal point.
Once both files are in, the tracker lists every instrument it found in Transactions.csv with a suggested Yahoo Finance ticker for each. That's the step to slow down on: an instrument with no ticker can't be priced and is valued at zero, so either confirm or correct each suggestion, or untick an instrument to leave it out of the valuation altogether. Then press Import & Analyse.
When an upload fails: what the messages mean
“expected columns […] not found. Columns present: […]” means the file doesn't have a header the tracker needs. Transactions.csv needs Date, Time, Product, ISIN, Quantity, Price, Local value, Value and Total; Account.csv needs Date, Time, Description, Change and Balance — or their Dutch equivalents. The usual causes are the two files uploaded into each other's slots, an export made in a display language other than English or Dutch, or a file re-saved by a spreadsheet program, which can switch the separator to semicolons so that a whole row is read as a single column. The “Columns present” list in the message is there to tell you which of these it is.
“this looks like a Portfolio holdings export, not an Account statement” means exactly that: export the account statement instead, with the full date range.
“No transactions found in the uploaded file” means the transactions file was read correctly but has no rows in it — almost always a date range that didn't include any trades.
An honest caveat about layouts
The tracker is built against DeGiro's documented export layout and the variations of it known so far, not against every export DeGiro has ever produced. Column names change with the display language, and DeGiro has changed its exports before and may again. When a genuine, unmodified export doesn't match, the tracker stops with the expected-versus-found message above on purpose, rather than guessing which column means what and producing confident numbers from the wrong one. If that happens with a file you haven't touched, the problem is on this side, not yours.