A portfolio tracker's numbers are only as good as the transaction history feeding them. Most people find out the gap exists at the worst possible time: when they are filing taxes, closing a wallet, or trying to prove cost basis on an asset they bought four years ago on an exchange that no longer answers support tickets.
Seven ways your history breaks without you noticing
None of these show up as an error message. The tracker just quietly computes a wrong number and presents it with full confidence.
- Retention windows. Most exchanges keep full trade history for two to seven years, then start purging it. The exact window changes without much notice. If you have not exported before the cutoff, the CSV is gone, not archived somewhere you can request it back.
- Exchanges that no longer exist. Mt. Gox and FTX are the famous cases, see Mt. Gox history and the FTX collapse, but smaller regional exchanges close every year with far less warning. Once the company is gone, there is no support email to ask for your 2019 trade log. If you never exported it, that data does not exist anywhere anymore.
- Self-transfers counted as disposals. You move 2 ETH from an exchange withdrawal to a hardware wallet. A tracker that cannot match the sending and receiving address as belonging to you records this as an outgoing transfer, sometimes even a taxable disposal, instead of what it actually is: moving your own money. Multiply this by every wallet you have used over several years and the error compounds.
- Missing cost basis on transferred-in assets. If a token arrived in a wallet by transfer rather than by a purchase the tracker witnessed, it usually has no basis attached to it. Sell it later and the tracker either assumes a basis of zero, overstating the gain, or drops the lot from P&L entirely, understating it. Either way the number is wrong, and it only shows up when you sell.
- Chains and protocols the indexer does not cover. Every tracker has a list of chains it indexes and a longer list it does not. A newer L2, a small Cosmos appchain, or a protocol with a non-standard contract interface can sit invisibly outside that coverage. The balance is real on-chain; it is simply absent from the tool showing you your net worth.
- LP positions that show up as an unrecognized token. Deposit into a concentrated liquidity position and what you hold is technically an LP token or an NFT representing a range. Trackers that do not specifically model that pool type show it as an unknown token priced at whatever the raw underlying happens to trade at, which is not what the position is actually worth. See impermanent loss for why the underlying value moves independently of the wrapper.
- Airdropped tokens with a value you cannot realize. An airdrop lands with a market price the moment a price feed picks it up, often before there is real liquidity. Your tracker shows a value that assumes you could sell at that price into size, when the actual order book might absorb a few hundred dollars before slippage takes over the trade. The paper number and the number you would actually clear are two different things. Background on how these land at all is in how airdrops actually work.
Why waiting makes it worse, not neutral
Every one of these problems is easy to fix at the moment it happens and expensive to fix later. Exporting a CSV the week an exchange announces it is shutting down takes five minutes. Reconstructing two years of trades from block explorer data and memory, after the exchange is gone, can take a weekend and still leave you guessing at cost basis. That asymmetry is the whole argument for doing this now instead of when a tax deadline or an audit forces it. See crypto taxes basics for what a wrong cost basis actually costs you at filing time.
A routine that actually holds up
The fix is not a smarter tool. No tracker can recover data that was never exported, and no address labeling can guess your intent after the fact. The fix is a habit, kept outside any single platform.
- Export CSVs at least once a year, and immediately on any account closure or migration announcement. Keep the raw files, not just a summary. Store them somewhere that survives you losing access to the exchange, not in an inbox tied to that same account.
- Keep a plain text ledger of transfers between your own wallets. Date, amount, asset, sending address, receiving address, one line per transfer. This is the only record that later proves a transfer was internal and not a disposal. It takes thirty seconds per transfer and is the single highest-leverage record-keeping habit available to a self-custody user.
- Label your wallets. "Hardware wallet, cold storage" and "hot wallet, daily use" and "LP wallet, concentrated positions" cost nothing to write down and save hours of reconstruction later, when you are trying to remember which address is which.
- Reconcile the tracker against the chain, not against itself. Periodically pull the actual on-chain balance for each address from a block explorer and compare it to what the tracker shows. A tracker can be wrong in the same direction for years without anyone noticing, if the only thing checked is whether the number moved sensibly day to day.
Practical steps
Set a recurring reminder, twice a year is enough, to export CSVs from every exchange and centralized platform you use. The moment you read news that a platform is shutting down, restricting withdrawals, or changing ownership, export immediately rather than waiting for the deadline they publish. Start the plain text transfer ledger today, even if it only covers transfers going forward; a partial record beats none. Koinlytics tracks wallets across multiple chains and shows realized P&L and LP positions in one place, which helps with the reconciliation step, but it is not a tax tool, does not file anything, and cannot recover history that was never exported in the first place.
Koinlytics