# How to import your broker's CSV into a portfolio tracker

Export transactions, not holdings, and pick a tracker that knows your broker's file. What breaks is quiet — splits counted twice, fees dropped, dates misread.

*https://stockmarketstack.com/how-to/import-a-broker-csv-into-a-portfolio-tracker · next to Stock Portfolio Trackers*

**Answer:** Export transactions, not holdings, for the account's whole life, and pick a tracker that names your broker's file format. Portfolio Performance maps any CSV for free; Sharesight wants its own template; Digrin, Portseido and Snowball Analytics read named broker layouts. What breaks is quiet: pre-split trades restated in post-split shares, fees folded into the price or dropped, dates read month-first, and shares transferred in arriving with no cost at all.

## The tools that do this

*In the order this page recommends trying them. Paid placement does not affect this order.*

1. [Portfolio Performance](https://stockmarketstack.com/tools/portfolio-performance.md) — Free. You map any CSV's columns yourself; it also reads PDF statements from 90-plus banks and has a Delivery (Inbound) type for transfers.
2. [Sharesight](https://stockmarketstack.com/tools/sharesight.md) — One fixed template — yyyy-mm-dd dates, 1,000 trades a file, brokerage in its own column — then it generates dividends and corporate actions itself.
3. [Digrin](https://stockmarketstack.com/tools/digrin.md) — Named formats for about twenty brokers, plus an AI import for any other layout. Dividend-first, and a split can take weeks to be applied.
4. [Portseido](https://stockmarketstack.com/tools/portseido.md) — Export instructions for about fifty brokers, or a Google Sheet as the source. The free plan's 100 transactions are lifetime, so history can use them up.
5. [Stock Events](https://stockmarketstack.com/tools/stock-events.md) — Matches rows already imported, so the same file can go in again without duplicates. Free stops at 15 stocks and drops rows past the cap.
6. [Snowball Analytics](https://stockmarketstack.com/tools/snowball-analytics.md) — Parses about fifteen brokers' own reports on every plan. Paid broker links reach only 90–200 days back, so history still comes from a file.

## The short way

Go to your broker's history or activity page and download **transactions**, not positions, for
the whole life of the account. A positions file says what you hold today; a transactions file says
what you bought, sold and received and when, which is what every return figure, every dividend and
every cost figure is calculated from. If the broker caps the date range per download, take it in
pieces and keep the files: brokers age out old history, and a closed account often loses the
export altogether.

Then choose the tracker by whether it already knows your broker's file. That one fact decides
whether import takes five minutes or an evening:

1. **Check the tracker's broker list for your broker by name.** A named format means somebody
   maintains a parser for that broker's columns. No named format means you map columns by hand, or
   reshape the file into the tracker's template.
2. **Import one holding first.** Pick a holding that has had a split or a dividend reinvestment,
   import only its rows, and compare the share count and total cost against the broker's own
   position page. If those two numbers agree, import the rest.
3. **Keep the original file.** It is the record. The tracker's copy is a reading of it.

[Portfolio Performance](https://stockmarketstack.com/tools/portfolio-performance) is the free option that reads anything,
because you tell it which column is which. [Sharesight](https://stockmarketstack.com/tools/sharesight) is the paid option that
does the most after import — dividends and corporate actions are generated for you — and that is
also why it is the one where a pre-adjusted file goes wrong fastest.

## What the options are

**Map the columns yourself.** Portfolio Performance's CSV importer asks only for a date, a value
and a number of shares, plus something that identifies the security, and lets the headings be
anything. It also reads PDF statements from more than 90 banks and brokers, mostly German, Austrian
and Swiss, and an Interactive Brokers Flex Query file. It costs nothing and keeps the data on your
own machine; the price is that the mapping is your job every time a broker changes its layout.

**Fit a template.** Sharesight's bulk import has five compulsory columns — trade date, instrument
code, quantity, price and BUY or SELL — and optional ones for brokerage, brokerage currency and
exchange rate. Up to 1,000 trades a file. It also parses trade-confirmation emails from more than
200 brokers and has an AI importer for files in any layout, which together cover most people's
ongoing trades; the template is for history.

**Pick a tracker with your broker's format built in.** [Digrin](https://stockmarketstack.com/tools/digrin) names about twenty
— Fidelity, Degiro, Revolut, Robinhood, Freetrade, XTB, eToro, Saxo and Tastytrade among them —
and reads other layouts through an AI import, three a day on the free plan.
[Portseido](https://stockmarketstack.com/tools/portseido) publishes export instructions for roughly fifty brokers.
[Snowball Analytics](https://stockmarketstack.com/tools/snowball-analytics) parses about fifteen brokers' reports directly,
including on the free plan. [Stock Events](https://stockmarketstack.com/tools/stock-events) takes CSV or XLSX and matches it
against rows it already has.

**Sync instead.** Every tracker above that offers broker linking also says how far back it reaches,
and the answer is usually not far: Snowball's links show 90–200 days of history, and Digrin's
Interactive Brokers link uses Flex queries that reach back 365 days. A link keeps new trades coming
in; the history before it is still a file.

## Where this breaks

**Split-adjusted against as-traded.** This is the one that produces the wildest numbers. A broker
export may show a trade from before a four-for-one split either as it happened — 10 shares at $400
— or restated as 40 shares at $100. Both describe the same purchase. A tracker that applies
corporate actions itself expects the first form: Sharesight's import help says it will
automatically create dividends and corporate actions for the holdings you import, so a restated
file gets the split a second time, and the position shows 160 shares. A tracker that is slow to
apply splits has the opposite problem — Digrin warns that recognising one can take a few weeks and
the numbers may be wrong until it does. The test is the one above: share count either side of the
split date against the broker.

**Fees end up somewhere different in every file.** Some brokers give a separate commission column,
some fold the fee into the net amount, some put it on its own row. Portfolio Performance's value
field is the total including taxes and fees, not price times shares; Sharesight wants brokerage in
its own column, to two decimal places, with its own currency. Map a fee into the wrong place and
the cost of the holding is off by that fee on every trade, which matters little for value and a
great deal for realised gains later.

**Dates are read in the wrong order.** Sharesight's template wants year-month-day with a four-digit
year, and nothing else. A US export usually writes month-day-year, a European one day-month-year,
and a spreadsheet that opened the file on the way through may have rewritten them. 03/04 is March or
April depending on who wrote it, and an importer that guesses wrong for the first twelve days of
every month produces trades that look plausible. Many exports also carry both a trade date and a
settlement date; map the trade date, which is the day the price was set.

**Decimal commas and fractional shares.** A European-locale file writes 1.234,56 where a US one
writes 1,234.56, and Portfolio Performance asks you to check the locale before importing for that
reason. Separately, Sharesight's bulk template documents quantity as a whole number, so a broker
that sells fractional shares produces rows the template does not describe; those need another
route in.

**A transfer in is not a purchase.** Shares moved from another broker usually appear as a receive,
journal or transfer row with a quantity and no price. An importer that reads it as a buy records it
at zero cost — or at the market price on the day of transfer, which is just as wrong for anything
the cost is used for — and one that does not recognise it skips it, so the holding is short.
Portfolio Performance has a dedicated Delivery (Inbound) type: shares arriving with no cash leaving
the account. Carrying the original cost across is its own task, covered in
[carrying cost basis across an account transfer](https://stockmarketstack.com/how-to/carry-cost-basis-across-an-account-transfer).

**Free plans run out during the first import.** Portseido's free plan stops at 100 transactions in
total, not per month, so a few years of history can exhaust it on day one. Stock Events' free plan
holds 15 stocks, and its import documentation says rows beyond the remaining spots are not imported
rather than queued. Sharesight's free plan counts sold holdings against its ten. Count your rows
before choosing on the free tier.

**The file is not a standard, and it changes.** Broker exports have no common format and no
version number. A column renamed or reordered by the broker breaks every parser built for the old
one, usually without an error — the import succeeds and the numbers are wrong. Re-run the
one-holding check after any import that follows a broker redesign.

## If you outgrow this

**When dividends matter as much as trades**, import the trades first and reconcile income
separately; most templates, Sharesight's included, take buys and sells only and generate
dividends themselves. That job is
[tracking dividends across several brokers](https://stockmarketstack.com/how-to/track-dividends-across-brokers).

**When you trade rather than invest**, a trade journal reads the same exports with options spreads
and partial fills in mind; [exporting your broker trade history](https://stockmarketstack.com/how-to/export-broker-trade-history)
covers that side.

**When the import is for a tax return**, the tracker's realised gain is a starting point. Which
lots were sold, and what adjustments the broker already applied, are explained under
[cost basis](https://stockmarketstack.com/glossary/cost-basis).

The rest of the category is [portfolio trackers](https://stockmarketstack.com/categories/portfolio-trackers).

## FAQ

### Why does my tracker show twice as many shares as my broker after a split?

Because the split was applied twice. Some broker exports restate trades made before a split in post-split shares and prices, and a tracker that also applies the split from its own corporate-action data multiplies the restated rows again. Check one holding across its split date against the broker's position page; if the tracker is double, either re-export the trades as they were originally traded or remove the tracker's own split event where it lets you.

### Should I import my holdings or my transactions?

Transactions, whenever the tracker accepts them. A holdings file — ticker, quantity, average cost — gives today's value and nothing else, because returns, dividend dates and realised gains are all calculated from when each purchase happened. Some trackers accept only holdings; that is fine for an income calendar and useless for a return figure.

### How do I add new trades without importing everything twice?

Either export only the dates since your last import, or use a tracker that recognises rows it already has. Stock Events matches imported rows against existing ones so the same file can be imported again; most others will import the overlap a second time, and every duplicate buy inflates the share count and the cost.

## Sources

1. [CSV import — Portfolio Performance Manual](https://help.portfolio-performance.info/en/reference/file/import/csv-import/) — Portfolio Performance, 2026-04-09
2. [Delivery — Portfolio Performance Manual](https://help.portfolio-performance.info/en/reference/transaction/delivery/) — Portfolio Performance, 2026-03-02
3. [Bulk import trades from a spreadsheet — Sharesight Help](https://help.sharesight.com/import_bulk_trades) — Sharesight, 2026-07-13

*Last updated 2026-10-07. A reference page, corrected in place — not a dated post.*
