---
title: "29 broker CSV exports, and what they agree on"
description: "Nine date formats, two decimal separators, and an ISIN column in fewer than half of them. What 29 real broker export layouts actually look like, in one table."
url: "https://stonqs.app/blog/what-broker-csv-exports-contain/"
lang: "en"
updated: "2026-10-25"
---

[ How the figures work, and what the app does with them](https://stonqs.app/blog/)

Inside the app

# What broker CSV exports actually contain

[By Vladimir Varvorkin](https://stonqs.app/about/) Updated October 9, 2026 6 min read

We read 29 export layouts from 26 brokers without being told which column is which. They agree on almost nothing: nine ways of writing a date, two decimal separators, and an identifier for the instrument in only 13 of them. This is the whole table, and what each disagreement costs.

## On this page

1. [The table](https://stonqs.app/blog/what-broker-csv-exports-contain/#the-table)
2. [The date is the easy problem](https://stonqs.app/blog/what-broker-csv-exports-contain/#the-date-is-the-easy-problem)
3. [Only 13 of 29 name the instrument](https://stonqs.app/blog/what-broker-csv-exports-contain/#only-13-of-29-name-the-instrument)
4. [20 of 29 state a currency, 8 state an exchange rate](https://stonqs.app/blog/what-broker-csv-exports-contain/#20-of-29-state-a-currency-8-state-an-exchange-rate)
5. [The rows that are not transactions](https://stonqs.app/blog/what-broker-csv-exports-contain/#the-rows-that-are-not-transactions)
6. [What a transfer between two brokers looks like](https://stonqs.app/blog/what-broker-csv-exports-contain/#what-a-transfer-between-two-brokers-looks-like)
7. [Importing the same file twice](https://stonqs.app/blog/what-broker-csv-exports-contain/#importing-the-same-file-twice)
8. [The four warnings worth reading](https://stonqs.app/blog/what-broker-csv-exports-contain/#the-four-warnings-worth-reading)

A broker export is not a format. It is 29 of them.

That is the number of layouts Stonqs recognises on sight, covering 26 brokers and trackers, and the table below is generated from [the preset file](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/core/presets/brokers.json) the app ships. Read down any column and the problem of importing a portfolio becomes concrete: 22 layouts separate fields with a comma and 7 with a semicolon, 24 write decimals with a dot and 5 with a comma, and the date appears in nine different shapes.

## The table

| Layout                          | Separator | Decimal | Date as written          | ISIN | Wordings mapped |
| ------------------------------- | --------- | ------- | ------------------------ | ---- | --------------- |
| Avanza                          | semicolon | comma   | 2026-10-09               | yes  | 8               |
| Bitvavo                         | comma     | dot     | 2026-10-09               | no   | 1               |
| BUX                             | comma     | dot     | 2026-10-09               | no   | 10              |
| Charles Schwab                  | comma     | dot     | 10/09/2026               | no   | 24              |
| Coinbase                        | comma     | dot     | 2026-10-09               | no   | 4               |
| CoinTracking                    | comma     | dot     | 2026-10-09               | no   | 1               |
| Crypto.com                      | comma     | dot     | 2026-10-09               | no   | 13              |
| DEGIRO                          | comma     | dot     | 09-10-2026               | yes  | 0               |
| Delta                           | comma     | dot     | 2026-10-09               | no   | 1               |
| Directa                         | comma     | dot     | 09-10-2026               | yes  | 9               |
| Disnat                          | comma     | comma   | 2026-10-09               | no   | 14              |
| eToro                           | comma     | dot     | 09/10/2026               | no   | 8               |
| Finpension                      | semicolon | dot     | 2026-10-09               | yes  | 6               |
| Freetrade                       | comma     | dot     | ISO 8601 with a time     | yes  | 2               |
| Interactive Brokers · dividends | comma     | dot     | 20261009                 | yes  | 3               |
| Interactive Brokers · trades    | comma     | dot     | 20261009                 | yes  | 0               |
| InvestEngine                    | comma     | dot     | 09/10/2026               | no   | 0               |
| Investimental                   | comma     | dot     | 2026-10-09               | no   | 0               |
| Parqet                          | semicolon | comma   | 09.10.2026               | yes  | 0               |
| Rabobank                        | semicolon | comma   | 09-10-2026               | yes  | 6               |
| Relai                           | comma     | dot     | ISO 8601 with a time     | no   | 0               |
| Revolut Crypto                  | comma     | dot     | Oct 09, 2026, 1:15:00 PM | no   | 4               |
| Revolut Invest                  | comma     | dot     | ISO 8601 with a time     | no   | 8               |
| Saxo Bank                       | comma     | dot     | 09-Oct-2026              | yes  | 1               |
| Swissquote                      | semicolon | dot     | 09-10-2026               | yes  | 5               |
| Trade Republic                  | comma     | dot     | 2026-10-09               | no   | 33              |
| Trade Republic · statement      | semicolon | comma   | 2026-10-09               | yes  | 4               |
| Trading 212                     | comma     | dot     | 2026-10-09               | yes  | 7               |
| XTB                             | semicolon | dot     | 09.10.2026               | no   | 11              |

“Wordings mapped” is how many of the broker’s own words for an operation we translate into one of our 15 internal kinds. Trade Republic needs 33 of them, Charles Schwab 24\. Six layouts need none at all, because their files are already typed: an [Interactive Brokers Flex statement](https://www.ibkrguides.com/clientportal/performanceandstatements/flex.htm) in XML says what each value is, so it lays itself out and the only question left is which account it belongs to.

## The date is the easy problem

Nine formats sounds worse than it is. A date is detectable: a column of values that all parse under one pattern and none under another settles itself, and the one case that cannot be settled by looking, 10/09 against 09/10, is exactly what the import screen asks you to confirm before anything is written.

Two columns are harder, and they are the ones that decide whether your returns will be right.

## Only 13 of 29 name the instrument

An ISIN identifies an instrument. A ticker identifies a listing, and only on one venue. Of the 29 layouts, 13 carry an ISIN column, 17 carry a symbol, and the overlap is where most of the work goes.

A ticker that already belongs to a different ISIN in your portfolio names a different instrument, because one ticker cannot name two. That row is the single case Stonqs refuses to write until you give it a ticker of its own. Everything else it will write with a warning on top.

## 20 of 29 state a currency, 8 state an exchange rate

If a row does not say which currency it is in, the account’s currency is the only thing left to assume, and an assumption like that is how a dollar trade on a euro account becomes a total nobody can trace. If a row states neither the rate nor the currency, the position is converted once, at today’s rate, by a tracker that never told you it did that.

The 8 layouts carrying their own FX rate are the ones where a figure can be reconstructed exactly as your broker saw it.

## The rows that are not transactions

Brokers print lines that are not operations: statement headers, summaries, corporate actions, option and future trades, cancelled trades. Refusing the whole file because of them is not an answer. They are counted as skipped and named, rather than guessed at and imported as something else.

Three wordings arrive on the skip list for an Interactive Brokers statement already: corporate actions, options and futures, and cancellations. The portfolio has no faithful way to record them yet, and saying so is more honest than inventing a shape for them.

## What a transfer between two brokers looks like

Like nothing at all. Each export knows only its own half, so one file shows money leaving and another shows money arriving, and both are read as money crossing the portfolio boundary, which is the very thing a time-weighted return is measured against.

After an import, Stonqs lists payments that match in currency and size within a few days and offers to join them into one move. It never joins them by itself. Two payments of 5,000 EUR three days apart are not proof that one is the other, and joining the wrong pair erases a real deposit and a real withdrawal at the same time.

## Importing the same file twice

Every row carries a fingerprint, so a file imported twice adds nothing and a file re-exported with more rows adds only what is new. Editing a stored row changes its fingerprint, which would make the next import see it as missing, so the check also compares what an edit cannot change: the day, the account, the instrument and the quantity.

## The four warnings worth reading

- Shares that arrived without a price, from a transfer out of another broker. Imported as they stand, the position enters at a cost of zero and reads as pure profit.
- A row in a currency the account does not hold.
- A ticker that already belongs to a different instrument. This is the one that holds its row back.
- A sale larger than what was ever received, which usually means the matching purchase sits in a wording nobody mapped, or in an older file.

Warning

Nothing is written until the last step of the import. Everything the app detects, the encoding, the dates, the decimal separator, the column meanings, is a proposal you can change on the preview screen first.

Text that arrives inside an imported file, instrument names, operation wordings, account names, is the broker’s text and can contain anything. It is data. Nothing in it is read as an instruction, which matters more now that a chat assistant may read the same rows.

Any other CSV is mapped once by hand and saved as a layout, so next month’s export from the same broker sets itself up too. PDF statements are not supported, and an export that will not import cleanly is worth an issue with five anonymised rows and the header.

## Sources

- [Stonqs: the broker layouts we read](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/core/presets/brokers.json)  · The preset file the table is generated from.
- [Stonqs: importing broker data](https://github.com/vvvlladimir/stonqs/blob/v0.5.0/docs/ai-reference/importing-data.md)
- [Flex Queries, Interactive Brokers](https://www.ibkrguides.com/clientportal/performanceandstatements/flex.htm)  · The XML statement that needs no column mapping at all.

## Read next

- [Why your two returns disagree ](https://stonqs.app/blog/time-weighted-vs-money-weighted-return/)
- [Your share rose 10 % and you still lost money ](https://stonqs.app/blog/currency-effect-in-a-portfolio/)
- [All posts ](https://stonqs.app/blog/)

---

[ Stonqs](https://stonqs.app/)

A portfolio tracker that runs on your own computer. Free, open source, no account.

## Product

[Download](https://stonqs.app/download/) [Privacy](https://stonqs.app/privacy/)

## Learn

[Guides](https://stonqs.app/guides/) [Blog](https://stonqs.app/blog/) [FAQ](https://stonqs.app/faq/)

## Project

[About](https://stonqs.app/about/) [Source code](https://github.com/vvvlladimir/stonqs) [Changelog](https://github.com/vvvlladimir/stonqs/blob/main/CHANGELOG.md) [Discussions](https://github.com/vvvlladimir/stonqs/discussions) [Report a bug](https://github.com/vvvlladimir/stonqs/issues)

Stonqs is a tool for recording and analysing your own investments. It is not financial, tax or legal advice, and neither are the answers of its assistant. Market data comes from free third-party sources with no guarantee of accuracy. This site sets no cookies and loads nothing from other servers; the only thing it keeps in your browser is the language you pick.

[Legal notice](https://stonqs.app/legal-notice/) [Privacy policy](https://stonqs.app/privacy-policy/)
