BorderFolio/Broker statement import/From a spreadsheet
Moving an investment spreadsheet into a portfolio tracker
Last reviewed 11 September 2026
The formulas are the part that broke, and the part you do not need to rebuild. Re-import the broker statements your sheet was typed from, upload the sheet itself for the years they no longer cover, and check every extracted row before it counts — because a first balance you cannot verify is worse than the spreadsheet you left.
You are not rebuilding the sheet. You are re-reading its sources.
The formulas are the part that rotted, and they are also the part you do not need. A tracker that separates contributions from market movement has to hold the same raw material your sheet held — dated purchases, quantities, prices, dividends — and that material is still sitting in your broker statements, whatever state the sheet is in.
So the migration is not a translation of your workbook. It is an import of the documents the workbook was typed from, plus whatever the sheet holds that no statement covers.
Two ways in, and you can mix them
- The broker statements. Export the widest period each broker will give you and upload it — PDF, CSV, XLSX, plain text or a screenshot. One multi-year export rebuilds the history behind today’s holdings rather than starting the record from today. Several brokers are several uploads into the same portfolio.
- The sheet itself. A spreadsheet saved as CSV or XLSX is an accepted upload format, and a tab with one row per transaction — date, ticker, quantity, price — is read the same way a statement is. It is the right path for the years your broker will no longer export, and for holdings that never had a statement at all.
Anything neither covers can be typed in by hand. The tracker works identically with no document involved.
Why the first balance is checkable rather than asserted
An import you cannot verify is worse than the sheet you left, because a wrong number that looks authoritative is harder to catch than a wrong number you typed yourself. Four things exist for that reason:
- Nothing is applied unseen. Extracted positions and transactions are shown for review. Transactions stay pending until you confirm them, and anything read incorrectly can be corrected or removed on the review screens first.
- Re-uploading overlapping periods is safe. A transaction already on record — matched on ticker, date, quantity and direction — is skipped rather than added twice, and the duplicate count is shown to you before you confirm. Re-exporting the whole year instead of trimming to what is new is the normal case.
- The share count is replayed against the ledger. Every confirmed buy, sell and split is replayed and compared with the quantity you actually hold. If a holding does not reconcile, the return figures are withheld with the reason named — not estimated around the gap.
- The breakdown has to add up. Contributions, market movement, dividends, fees and withholding must sum to the portfolio value, or the decomposition is not shown at all. A sheet that is $400 out simply carries the error in a cell nobody re-checks.
What you get that the formulas did not
- Past transactions converted at past rates. A foreign-currency purchase is held at the
rate of its own trade date — the broker’s printed rate where the statement shows one. The common
spreadsheet bug is one
=GOOGLEFINANCErate applied to every row, which quietly rewrites last year’s numbers this year. - Two return figures rather than one. Money-weighted return answers “how did my money do”, time-weighted answers “how did the holdings do”, and when a regular contribution schedule makes them disagree, both are shown instead of one number standing in for both.
- Withholding per instrument. Resolved from each fund’s domicile against the tax residence you configure, rather than one flat percentage applied to every dividend.
- Prices you do not maintain. Quotes for held positions refresh on a schedule from official closing prices. No cell to drag down.
What the spreadsheet still does better
It is worth being straight about this, because the honest answer decides whether the move is right for you. A sheet is infinitely malleable: any column you want, any scenario, any private asset, no subscription and no dependency on anyone else’s roadmap. A tracker gives you a fixed model in exchange for keeping itself up to date. If the sheet is a model you enjoy maintaining rather than a chore you abandoned, stay in it — the longer comparison sets out both sides, including when the sheet wins.
Known gaps on this side: individual bonds, notes and treasuries are not imported, because they price per 100 of face value and pay coupons rather than dividends — bond funds with a ticker import normally. There are no custom formulas or custom columns. Data comes back out as a contributions CSV rather than a full workbook.
Common questions
Can I import my spreadsheet directly?
A spreadsheet saved as CSV or XLSX is an accepted upload format, and a sheet with one row per transaction — date, ticker, quantity, price — is read the same way a broker statement is. Everything extracted is shown for review before it is applied, so a misread row is corrected rather than inherited.
Do I have to re-enter years of history by hand?
No. The fastest path is the widest export each broker will give you: one multi-year statement rebuilds the transaction history behind your current holdings. Use the sheet for the periods your broker no longer exports, and manual entry for anything neither covers.
What happens if I upload the same period twice?
Transactions already on record are matched on ticker, date, quantity and direction and skipped as duplicates, with the count shown before you confirm. Re-exporting a whole year rather than trimming to what is new is the expected way to use it.
How do I know the imported numbers are right?
You check them on the review screens before anything is confirmed, and the app refuses to paper over gaps afterwards: share counts are replayed against the ledger, and if a holding does not reconcile the return figures are withheld with the reason named instead of estimated.
Can I get my data back out?
Contributions export as a CSV with date, ticker, exchange, quantity, amount, currency, price per share and type. On the free plan the export covers the same three-month window the contributions view shows.