If Koinly or CoinTracker is missing your transactions, it's almost always one of six things: a chain or protocol the tool doesn't index, an exchange that shut down or killed its API, a CSV export that only reaches back so far, internal transfers that never got linked, DeFi positions the tool can't read, or deposits that arrived with no cost basis attached. Work through them in that order and most people find their answer.
To be clear up front, Koinly is a good tool. So is CoinTracker. They choke because some of your data doesn't exist in any form they can automatically fetch, and that's a different problem from bad software. It also decides whether your fix is a button or a human.
First, work out what "missing" means
Three different problems get reported the same way, and they need different fixes.
Transactions absent entirely. Nothing shows for a period you know you were active. That's an import or connection problem.
Transactions present but wrong. Everything imported, but a transfer between your own accounts shows as a sale, or a swap shows as two unrelated events. That's a classification problem, and it invents gains you never made.
Transactions present but incomplete. They're there, flagged "missing cost basis" or "missing purchase history". The tool knows you disposed of something and has no idea what you paid for it. That's a data gap, and no software fixes it alone.
Look at your error and warning counts before touching anything. On a dashboard these three look identical. Underneath, they're nothing alike.
Cause 1: the chain or protocol isn't supported
Every tax tool keeps its own list of indexed chains and its own set of protocol decoders. The big chains are covered well. The long tail isn't. Early on a small L2, an app-chain, a protocol nobody's written a decoder for, and your transactions simply aren't retrievable through the normal import.
Fix: check the tool's supported-integrations list against every chain you actually touched. For anything unsupported, pull the history from that chain's block explorer, export CSV, import it manually. Most tools accept a generic CSV. Tedious, and it works.
Cause 2: the exchange is dead, or its API is
No software fixes this one. If an exchange shut down, got hacked, delisted your country or just retired its API, there's no endpoint left to call. FTX, Celsius and a long list of smaller platforms took chunks of people's trading history down with them.
Fix: hunt for whatever survived. Old CSV exports rotting in a downloads folder. Trade confirmation emails (search your mail for the exchange name plus "order" or "filled"). Screenshots. Bank or card statements showing the fiat that went in, which at minimum bounds what you could have bought and when. Bankruptcy claim documents. None of it feels rigorous. All of it is evidence, and evidence is what a reconstruction gets built from.
Cause 3: the CSV export doesn't go back far enough
Plenty of exchanges cap how far a self-serve export reaches, or split your history across several report types where the one you downloaded isn't the one holding your trades. People export "transaction history", get a partial file, and assume that's everything they ever did.
Fix: on each exchange, list every export type on offer. Trades, deposits and withdrawals, converts, rewards, staking, distributions, fees. Pull all of them, not just the obvious one. Then compare the earliest row against the date you opened the account. Gap? Contact support and ask for a full history export. A lot of them will produce one on request even when the UI won't.
Cause 4: internal transfers never got matched
This is the one that produces the terrifying numbers.
You moved 0.5 BTC from Coinbase to your Ledger. Coinbase logs a withdrawal. The wallet logs a deposit. Nothing links them. If the tool doesn't match them as one movement, the withdrawal becomes a sale and the deposit becomes a fresh purchase at a fresh cost basis. Now you owe capital gains on Bitcoin you never sold, and your basis is wrong for everything downstream of it.
Tools do try to auto-match, using timestamp windows and amounts, and they get it right a lot of the time. They fail when network fees make the amounts differ, when the timestamps are far apart, when the transfer went via an intermediary, or when one half was never imported at all. Which is exactly why this list is in this order.
Fix: filter for withdrawals and deposits, sort by date, look for pairs. Most tools let you manually mark two transactions as a single transfer. Do it. Each unmatched transfer is potentially thousands in phantom gains, which makes this the highest-value hour of cleanup available to you. Close your import gaps first, though. A transfer whose other half was never imported can't be matched to anything.
Cause 5: DeFi the tool can't read
Providing liquidity creates an entry event, ongoing fee accrual, and an exit event, usually with an LP token in between carrying its own basis. Liquid staking hands you a derivative token. Bridging creates two on-chain events on two chains with nothing tying them together. Wrapping gives you a token that's economically the same asset and technically a different one.
Tax tools handle the common cases and guess at the rest. The guesses surface as "unknown" transactions, or worse, as confident misclassifications: a bridge counted as two disposals, an LP withdrawal counted as income.
Fix: find everything labelled unknown, unclassified, or flagged for review. Look each one up on the block explorer, work out what actually happened, classify it by hand. This is slow, genuinely slow, so budget real time for it. And take it seriously: a wrong classification here isn't a rounding error, it can move your tax bill by a lot. More on where DeFi falls through the reporting gap.
Cause 6: deposits with no cost basis
The classic missing-basis error. Crypto arrived, and the tool has no idea where from or what you paid. Usually it's downstream of one of the causes above, because the acquisition happened on a dead exchange or on a chain that never got imported.
Fix: trace the deposit backwards. The block explorer tells you which address it came from. If that address is also yours, import it and the chain closes. If it came from an exchange you haven't connected, connect it. If it came from an exchange that no longer exists, you're into reconstruction, and the basis has to be established from surviving evidence rather than retrieved.
The order that actually works
- Connect every source, including the ones you forgot. Old wallets. Small chains. The exchange you used twice in 2021.
- Pull full history from each, checking the earliest row against your account open date.
- Now match transfers, so both halves exist to be matched.
- Then classify the DeFi and the unknowns.
- Only now look at what's still flagged as missing cost basis. That residue is your real problem, and it's smaller than it looked an hour ago.
Most people do this backwards. They start on the cost basis errors, which are the symptom, and never close the import gaps, which are the cause.
When the data is just gone
At the end of all that there's usually a residue. Trades from an exchange that no longer exists. Deposits from a wallet whose seed phrase went with an old laptop. A chunk of 2021 that isn't recorded anywhere you can reach.
Software retrieves data. If the data isn't there, there's nothing to retrieve, and a better importer won't save you. What's needed instead is reconstruction: rebuilding a defensible history out of block explorers, bank records, fragments of old exports and the on-chain trail, then documenting how each number was arrived at so it survives contact with a tax authority. That's human work. It's also where most people give up.
Our crypto tax rescue service does exactly that job. Show us whatever you have, gaps included, and a free diagnostic scan comes back with the numbers: transactions found, missing cost bases, unmatched transfers, tax years affected. About two business days, and the report is yours to keep either way.
If you want us to fix it, we quote off those numbers, fixed, from £499. Analysts match every transfer, resolve every cost basis, classify the DeFi, and recover dead-exchange history where it can be recovered. What comes back is filing-ready with a line-by-line audit trail behind every figure. If your Koinly file is 90% right and 10% broken, that 10% is the job.
Before you burn another weekend on it, find out how big the residue actually is. It's often smaller than you fear.