If you've ever run a tax report in Koinly and seen a warning that says "missing purchase history," you already know the feeling. You did buy that Bitcoin. You have the receipts somewhere. But the software is telling you it has no idea where those coins came from, and your capital gains number suddenly looks way too high.
The short version: Koinly can't find where the flagged coins were acquired, so it assigns them a $0 cost basis — which means the entire sale amount gets counted as gain, not just your profit. This guide explains what the warning actually means under the hood, the five most common ways it happens, the legitimate ways to fix it inside Koinly, and the cases where the problem isn't really fixable in any single tool.
One thing up front: this is not a complaint about Koinly. The warning exists because Koinly is being honest about a data gap instead of papering over it. The problem it surfaces is real, and it affects every crypto tax tool on the market.
This is not tax advice. It's an explanation of how the software behaves, with links to primary sources. For decisions about your own return, talk to a tax professional.
What "missing purchase history" actually means
When Koinly imports your transactions, it tries to match every coin you sold, swapped, or spent to an earlier acquisition — a buy, a reward, an airdrop, anything that establishes what you paid for it. That acquisition price is your cost basis, and your taxable gain is sale price minus cost basis.
"Missing purchase history" means Koinly could not find the acquisition. Per Koinly's own help article, the warning appears when you're selling more than you owned at the time of the disposal, based on the transactions imported — you're disposing of coins the software never saw you acquire.
Here's the part that costs people money. When there's no purchase record, Koinly assumes a cost basis of zero. That's arguably the most conservative, compliant way to handle a data gap. But it means the entire sale proceeds get treated as gain.
Say you bought 1 ETH for $2,400 on an exchange, moved it to a hardware wallet, and later sold it for $3,000. If Koinly only sees the wallet side of that story, it reports a $3,000 gain instead of a $600 gain. You didn't make $3,000. The software just can't prove otherwise. Crypto tax circles call this a phantom gain: profit that exists only in the report, not in your life.
And it can get worse than the dollar amount. In one Koinly forum thread from April 2026, a user moved BTC from an exchange to a Trezor and later sold through Kraken. The missing link didn't just zero out the cost basis — it reset the holding period, so a long-term disposal was at risk of being taxed at short-term rates.
This isn't a niche edge case. An analysis by the crypto tax firm Summ, covering 30,000 US users, found that 57% of transactions happened on platforms that don't issue 1099-DA forms, and estimated that broken cost basis chains left affected investors with overstated capital gains averaging $14,500. Different methodology, same conclusion from Coinbase and CoinTracker's 2026 Crypto Tax Readiness Report: in their survey of 3,000 US crypto users, 76% knew their cost basis might need adjusting — but only 35% had ever actually adjusted it.
That gap between knowing and fixing is exactly where this warning lives.
If you're hoping your broker's Form 1099-DA will just fill in these gaps for you, it often won't — self-custody transfers and transferred-in coins routinely show up blank or wrong in Box 1g, for the same reasons described below.
The five most common causes
Almost every "missing purchase history" warning traces back to one of five patterns. Figuring out which one you're looking at is most of the battle.
1. A wallet or exchange you never connected
The simplest cause and the most common. If you bought on an exchange you've since stopped using, or hold coins that passed through an old MetaMask address you forgot about, Koinly literally never saw the purchase. It sees coins arriving from an unknown address and, later, coins leaving. The acquisition happened off-camera.
The tell: the flagged coins arrived in a wallet as a plain deposit, with no matching withdrawal anywhere in your Koinly account.
2. Exchange API gaps
Connecting an exchange via API feels complete, but many exchange APIs only return part of your history. Some omit certain transaction types (fiat purchases, OTC trades, earn interest); some have hard time windows. In a May 2026 forum thread, a MEXC user found 34 of 206 transactions flagged with missing purchase history — the API only returned the last 7 days of trades, and Koinly's suggested fix was to delete the API-connected wallet and rebuild it from full CSV exports.
The tell: the warning clusters around one exchange, and the exchange's own history page shows trades that never appear in Koinly.
3. Bridges and cross-chain moves
When you bridge an asset — ETH to Arbitrum, USDC to Solana — the on-chain record often looks like the asset vanished on one chain and a different asset appeared from nowhere on another. Unless the tool recognizes and links both legs, the destination chain's coins have no purchase history by definition.
The tell: the flagged asset first appears in your history right after a bridge, often from a contract address.
4. Rebase and reflection tokens
Tokens that change your balance without a transaction — rebasing tokens like AMPL or aTokens, reflection tokens like SAFEMOON — break the assumption that every coin you hold was explicitly received. Koinly documents this behavior, and its forum has long-running threads on rebase positions where part of the balance has no acquisition record because the protocol simply minted it into your wallet.
The tell: your Koinly balance for one token drifts away from your actual wallet balance over time, without any missing transactions you can point to.
5. Transfers that weren't matched as transfers
This is the one that stings, because all the data is actually there. You withdrew from Coinbase and deposited to your Ledger, but if the amounts differ slightly (network fees), the timestamps are far apart, or one side was imported by CSV and the other by API, Koinly may fail to pair them. Instead of one transfer, you get an unexplained withdrawal on one side and a from-nowhere deposit on the other — and that deposit has no purchase history.
The tell: for every flagged deposit, there's a withdrawal of a similar amount from another of your own accounts within minutes or hours.
Since January 2025, this cause bites harder than it used to. Under per-wallet cost basis accounting, an unmatched transfer doesn't just complicate one shared pool — it strands the coin's real basis in the wallet it left, while the wallet doing the selling shows up empty-handed at $0.
How to fix it in Koinly, the right way
Koinly's documentation and support forum are genuinely good on this topic, and the staff answer threads in detail. The correct order of operations, drawn from their official guidance and cost basis troubleshooting guide, looks like this.
Step 1: Find every flagged transaction
In the Transactions page, filter by warnings. Work through the list and, for each one, ask the diagnostic questions above: where did these coins actually come from? Write it down. You're building a map of your gaps, and the map matters more than any individual fix.
Step 2: Import the missing source, don't patch the symptom
If the cause is an unconnected wallet or a lossy API, the durable fix is importing the missing data — add the old wallet address, replace the API sync with full CSV exports, request account statements from the exchange if their export tool is limited. Koinly recalculates the whole chain once the acquisition exists. Resist the urge to hand-edit first; every manual edit is something you'll have to remember next year.
Step 3: Merge unmatched transfers
If both sides of a transfer exist but aren't paired, Koinly can merge them — select the withdrawal and deposit and mark them as a transfer. This single fix often restores both the cost basis and the original acquisition date, which protects long-term treatment.
Step 4: Manual entries as the documented last resort
When the true source data is genuinely unrecoverable and you accept the $0 basis, Koinly's documented procedure is to add a manual deposit for the missing amount, timed one minute before the flagged transaction, with the worth set to $0 — that clears the warning and keeps your ledger from going negative without inventing a cost. Note that Koinly explicitly says you can't set a cost basis by hand on a disposal; basis comes from acquisition records. So if you can document what you actually paid (bank records, old emails, block explorer archaeology), the path is to recreate that acquisition in your history at its real date and value, and keep the evidence with your tax records. If you can't document it, the $0 basis stays, and that's a conversation for your tax professional rather than a software setting.
What you should not do: soft-delete warnings to make the report look clean, or invent a cost basis you can't support. The warning going away is not the same thing as the number being right.
When the fix isn't in the software
Here's the honest part that most guides skip. Some missing purchase history cases aren't really Koinly problems, and no amount of clicking inside any single tool resolves them.
The structural version of the problem looks like this: your full transaction graph spans exchanges that have shut down, APIs that no longer return old data, bridges that destroyed provenance, and years of transfers that no one platform ever saw end to end. Each tool reconstructs the story from the fragments it was given, and different tools reconstruct it differently. When a college professor ran the same transaction data through five crypto tax platforms, the calculated results ranged from a $1,516 loss to a $2,696 gain — against a true answer of a $1,266 loss. Same data, five stories.
When two tools disagree, the chain is the tiebreaker. Run my free scan to see what your Ethereum wallets actually did — read-only, no sign-up, with a tx-hash on every flagged transfer so you can compare it line by line against what Koinly imported.
Even a discrepancy that looks like a bug sometimes isn't. In one long forum thread, a user found Koinly reporting roughly $1,900 more in gains than Coinbase's own tax center, after trying every recommended cleanup. Koinly staff's explanation was scope, not error: Coinbase only sees Coinbase, while Koinly calculates across every connected wallet. Each tool was answering a different question. Only one answer can be right for a tax return, and knowing which requires understanding where the underlying basis chain is actually broken.
That's the real lesson of the missing purchase history warning. It isn't a nag to dismiss — it's the software telling you exactly where your records stop being provable. The fix is sometimes a click, sometimes a CSV, and sometimes a proper reconstruction of your history that no importer can do for you. Knowing which situation you're in before filing season is worth more than any amount of report-polishing in April.
FAQ
Does "missing purchase history" mean I'll pay more tax?
If you leave it unresolved, usually yes. Koinly assigns a $0 cost basis to coins without an acquisition record, which means the full sale amount is treated as gain rather than just your actual profit. It can also cause long-term holdings to be taxed as short-term if the original acquisition date is lost. Fixing the warning with real data typically brings the reported gain back down to what you actually made.
Can I just ignore the warning if the amounts are small?
You can file with a $0 basis — it's conservative in the IRS's favor, which is why Koinly defaults to it. But "small warning" doesn't always mean small effect: a single unmatched transfer of a coin you've held for years can flip a large long-term gain into a short-term one. It's worth at least identifying the cause of every warning before deciding it's immaterial, ideally with a tax professional.
Why does Koinly show different gains than my exchange's tax report?
Usually because they're answering different questions. Your exchange only calculates gains from activity on that exchange, while Koinly calculates across all wallets and exchanges you've connected — including transfers between them. If coins left the exchange and came back, or arrived from an external wallet, the two reports are working from different acquisition records and will disagree. The one built on your complete, correctly linked history is the one that reflects reality.
This is not tax advice, and none of the above is a substitute for a qualified tax professional who can look at your actual records.
If you'd rather find out where your cost basis chain is broken before it turns into phantom gains, Verilot Check reads your Ethereum wallets directly on-chain and shows every transfer between your own addresses that a tax tool would book as a sale, with a tx-hash on every line. Free and read-only — no wallet connection, no sign-up, up to 5 wallets and 500 events per scan, Ethereum mainnet today. Run my free scan.