You open your CoinTracker tax report and the capital gains number is much larger than the profit you remember making. You start clicking through transactions and you find them: a deposit showing a cost basis of $0, a transfer to your own hardware wallet booked as a sale, an orange flag on a sell you barely thought about.
None of that is CoinTracker inventing income. It's the software doing the conservative thing with an incomplete record. But the output is a tax report that overstates what you owe, and the fix is almost never the button that makes the flag disappear.
This is not tax advice. It's an explanation of what CoinTracker's flags mean, what the software assumes when it doesn't know something, and how to repair the underlying record. For decisions about your own return, talk to a tax professional.
What CoinTracker does when it doesn't know what you paid
CoinTracker groups incomplete-data problems under a "Review suggested" status, and its documentation names three flags: missing price history, insufficient quantity, and missing balance. They look similar in the interface and mean very different things.
Missing price history means the value of an asset is unknown and needs your confirmation — commonly for DeFi or NFT tokens whose price CoinTracker couldn't pull. In that case, per CoinTracker's own guidance, it "conservatively assumes the cost basis of your assets based on nearby transaction values, either the previous price or later transaction value," and where the flag affects proceeds instead, it assumes a value of 0 because it can't determine the price on the disposal date.
Insufficient quantity means your history says you sold or sent more of an asset than your records show you ever received. The troubleshooting article spells out the consequence in one sentence: the system "assumes a cost basis of 0 for either the missing amount or the entire disposal quantity due to incorrect transactions." That is the flag most likely to be sitting under a gain you don't recognize.
Missing balance means you withdrew more than you deposited from a staking, lending, or liquidity protocol — usually rewards that were never recorded as income when they accrued.
Three flags, one underlying condition: a gap in the record, filled with a defensive guess. A guessed basis is almost always lower than the real one, and a lower basis is a bigger taxable gain.
The failure that doesn't always raise a flag
The most expensive case isn't flagged as loudly, because from the software's point of view nothing is missing at all.
When CoinTracker sees an outgoing Send with no matching incoming Receive, it treats the outflow as a disposal. Its documentation says so directly: "When CoinTracker finds an outgoing Send without a matching incoming Receive, it classifies the outflow as a disposal," and, in a companion article on the tax impact, that this "results in the calculation of a taxable gain or loss, as all disposals are considered taxable events."
Move 2 BTC from Coinbase to a Ledger you never connected, and the software has no way to know the coins are still yours. It sees them leave and never come back. That is a sale, priced at the market rate on the day you moved them, on coins you still hold.
Even when both wallets are connected, the pairing can fail. CoinTracker notes that for automatic matching to work, "the send and receive amounts must match and the timestamps must align closely" — and network fees mean the amounts frequently don't match exactly, while bridges and slow withdrawals push timestamps apart. Its linking guide exists precisely because automatic detection misses cases: you can manually link two transactions as a Transfer, a Bridge, or a Linked trade when the amounts differ or the token type changes.
This is the same mechanism behind phantom gains in every tool in the category, not a CoinTracker defect. It's worth understanding rather than resenting, because the repair is on your side of the connection.
Where the gaps actually come from
Five patterns produce nearly all of it.
A wallet or exchange you never connected
The single biggest cause. Cold storage counts. CoinTracker's completeness checklist asks for all exchanges for all years, public wallet addresses, and hardware wallets "even without active trading" — plus xPub, yPub, zPub, or a stake key for UTXO chains, because a single address won't cover a wallet that rotates addresses behind the scenes.
Exchange APIs and CSVs that return less than you think
An exchange API that only serves recent history, a CSV missing a column, a defunct platform you can no longer log into. CoinTracker lists incomplete API history and missing or incorrect CSV rows among the standard causes of insufficient quantity errors. The acquisition happened; the record of it never arrived.
Bridges and cross-chain moves
On-chain, a bridge looks like an asset disappearing on one chain and a different asset appearing on another, with nothing tying the legs together. CoinTracker's link types include an explicit Bridge option for exactly this reason. Unlinked, the outbound leg is a disposal and the inbound leg is a coin with no history.
Staking, lending, and liquidity positions
Deposit 300 SOL over three months, unstake 310, and the extra 10 has no origin the importer can see — CoinTracker's missing balance article uses almost exactly that example. Rebasing tokens create the same shape: the balance grows with no transaction to attribute it to.
The universal-to-per-wallet migration
US taxpayers no longer have a choice here. CoinTracker's cost basis tracking article states that "starting January 1, 2025, the Per-Wallet tracking option is the only acceptable solution for cost basis tracking for US taxpayers," and universal tracking is no longer available to them. That switch turns previously invisible gaps into errors: under universal tracking, a send from a wallet that never held the coins was quietly covered by another wallet's balance, and CoinTracker documents that it "won't flag this transaction as Review suggested." Per-wallet accounting takes the cover away. The regulatory background is in our guide to Rev. Proc. 2024-28 and the per-wallet switch.
How to fix it, in the order that actually works
The order matters more than the individual steps, because fixing symptoms first creates records you'll have to undo later.
1. Find every flagged transaction
On the Transactions page, use the Status filter to select Review suggested, or filter by a specific flag type. The Taxes page also shows a transaction summary of review-suggested items for the selected tax year. Do this on a desktop browser — CoinTracker notes that mobile lacks some reconciliation functionality. Work the list, not your memory.
2. Connect the missing source before touching any numbers
For a transfer misread as a sale, the fix is usually one connection away. CoinTracker's own instruction is to confirm the receiving address is yours and sync it by API, public address, or CSV; once both sides are synced, it "automatically pairs matching outflows and inflows as transfers." One wallet connection can clear dozens of phantom disposals at once, and it does it with real data instead of an assertion.
3. Link the transfers that automatic matching missed
Where fees or bridges broke the pairing, link the two legs manually and choose the right type — Transfer for a move between your own wallets, Bridge for a cross-chain move, Linked trade for a trade that spanned wallets. Linked transfers aren't taxable events and the cost basis carries across, which is the entire point.
4. Edit the acquisition, not the disposal
This trips up a lot of people. A Trade's cost basis can't be edited on the trade itself, because it's inherited from whenever those tokens first entered your account. CoinTracker's explanation is that editing the trade "would break the link to that history," so you find the original purchase, deposit, or airdrop and correct the cost basis there. Everything downstream recalculates.
If you'd rather see the answer before doing the reconnect-and-relink pass, Run my free scan — it reads your Ethereum wallets on-chain, read-only and without a sign-up, and returns each transfer between your own addresses with its tx-hash, which is the list you'd otherwise be assembling by hand.
5. Manual entries last, and documented
When the source genuinely no longer exists — a dead exchange, a wallet you can't recover — a manual transaction is the honest last resort. Enter the real acquisition date and the real price, and keep whatever supports it: a bank statement, an old confirmation email, a block explorer link. What you should not do is click "Confirm 0.00 cost basis" to clear a flag. That option is there for assets that genuinely cost nothing, and using it to tidy the interface converts a data gap into a written assertion that you paid zero.
What the software can't fix, and what happens next
Some of this doesn't have an in-app answer.
If the acquisition record is genuinely gone, no setting recovers it. The reconstruction happens outside the tool: exchange statements, bank records, and the on-chain trail from the wallet the coins came from. The same reasoning applies to a mismatch between CoinTracker's numbers and an exchange's own report. CoinTracker's explanation of those differences is worth reading in full, and the key line is that an exchange only sees what happened inside its own platform, "so any tokens that arrived from elsewhere may show up with a missing or zero cost basis on that exchange's report."
That is not an abstract problem anymore. Those same exchange-side figures are what get printed on Form 1099-DA and sent to the IRS. CoinTracker has already shipped a 1099-DA comparison flow and a support article on what to do when the form shows a mismatch, which traces most mismatches to a missing transaction, a misclassified one, or a cost basis method difference. When the broker's number and yours disagree, the correction happens on your return — see our walkthrough of Form 8949's digital asset boxes and code B for the mechanics, and the guide to Box 1g for why the box is blank or wrong so often.
If you use more than one tool, expect them to disagree. When a college professor ran identical transaction data through five crypto tax platforms, the results ranged from a $1,516 loss to a $2,696 gain against a true answer of a $1,266 loss. Disagreement doesn't tell you which one is right. It tells you where to dig — and the arbiter is the chain, not the interface. Koinly users hit the same wall under a different name, which we cover in the missing purchase history guide.
FAQ
Why does CoinTracker show a $0 cost basis on a deposit?
Because the deposit arrived without a matching acquisition record. If the sending wallet isn't connected, or the send and receive couldn't be paired, CoinTracker has no purchase to attach to those coins. For insufficient quantity errors specifically, its documentation says the system assumes a cost basis of 0 for the missing amount or the entire disposal quantity. Connecting the source wallet, or linking the two legs as a transfer, is what restores the real figure.
Should I click "Confirm 0.00 cost basis" to clear the flag?
Only if the asset genuinely had a zero cost — an airdrop you received for free, for example. Used to tidy up a flag on an asset you actually paid for, it replaces an unknown with a claim that you paid nothing, and the entire sale proceeds become taxable gain. A missing record and a zero cost are not the same thing.
Do I have to use per-wallet tracking in CoinTracker?
For US taxpayers, CoinTracker's documentation states that per-wallet has been the only acceptable cost basis tracking option since January 1, 2025, and universal tracking is no longer available to them. If your account carried gaps under universal tracking, the switch is likely to surface insufficient quantity errors that were previously masked. How that interacts with your own filing history is a question for a tax professional.
This is not tax advice, and none of the above substitutes for a qualified tax professional who can look at your actual records.
If you want a second opinion that reads the chain instead of the interface, Verilot Check reads your Ethereum wallets directly on-chain and shows every transfer between your own addresses that would otherwise be booked as a disposal, 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.