You bought 2 SOL for $200 on one exchange, moved it to another, and sold it for $600. Your real gain is $400. But if your tax software only sees the second exchange's CSV, it reads $600 of proceeds and zero basis — and you've just reported $600 of gain on a $400 profit.
That four-figure phantom income is the standard failure mode of cross-exchange recordkeeping. Cost basis is what you paid for an asset, adjusted for fees, and the rule is simple: one continuous record per asset, no matter which platform holds it. The hard part is the bookkeeping, not the math.
What cost basis measures — and what it ignores
Your basis in a coin is the total you spent to acquire it, trading fees included. Sell, and your gain is proceeds minus basis. That's the entire mechanic.
Where people trip: basis follows the asset, not the exchange. Buy 0.5 ETH on one platform and 0.5 ETH on another, and you own 1 ETH with a blended basis. Moving coins between venues creates no new basis event and, in most jurisdictions, doesn't reset your holding period. A transfer is a bookkeeping entry, not a sale.
Fees belong in the number
A $30 fee on a $3,000 buy makes your basis $3,030. Trivial once. Across dozens of trades it's real money — and most exchanges export fees in a separate column that people forget to import.
Why multiple exchanges break your records
Every exchange ships its own CSV with its own column names, timestamps, and time zones. One platform calls a field "Total," another calls it "Net Amount," a third splits fees into a separate file. Merge them carelessly and you'll double-count deposits or drop a fee.
The withdrawal is the real trap. Buy on Exchange A, withdraw to Exchange B, sell there, and B's export shows a sale with no matching buy. Without a linked transfer record, the software treats the whole proceeds figure as gain.
A system that holds up
You don't need expensive software to start. You need one ledger where every acquisition and disposal lands, with transfers linked on both sides.
- Export monthly, not annually. Exchange exports sometimes expire or change format; pull data while it's fresh.
- Tag every transfer. Record source, destination, asset, amount, and date, then link the withdrawal to the matching deposit.
- Record fees at the source. Add buy fees to basis; subtract sell fees from proceeds.
- Keep one running row per asset. Units held, total cost, average basis.
Tools like CoinStats pull balances and history from connected exchanges into a single view and cut the CSV wrangling; PortfolioPilot Tracker handles the portfolio-level side. Neither replaces your own review, but both beat a spreadsheet you last opened in March.
Pick a method and stay with it
Rules vary by jurisdiction, but most allow FIFO or specific identification, and some permit average cost for certain assets. The one requirement that matters everywhere: apply your chosen method consistently. Switching mid-year to shrink the bill invites questions.
| Method | How it works | Best for |
|---|---|---|
| FIFO | Oldest units sold first | Simple records; the default in many places |
| Specific ID | You choose which lots to sell | Active traders with detailed logs |
| Average cost | Blended basis per asset | Where rules permit it |
Specific identification only works if your records can prove which lot you sold. Sloppy logs forfeit the option by default.
Common questions
Do I need basis records if I only buy?
Not for a bill today — but you'll need them the moment you sell, swap, or spend. Reconstructing years of purchases from expired exports is painful and error-prone. Track as you go and the eventual sale takes five minutes.
What happens to basis when I move coins between exchanges?
Nothing. A transfer preserves your original basis and holding period in most regimes; only the location changes. Record it on both sides so your software doesn't read the deposit as a new purchase.
Can't my exchange just report everything?
An exchange reports what happened on its own platform, which is rarely your full picture. Two or three venues plus a wallet means no single exchange sees the whole history. The consolidated record is yours to keep.
Log into your oldest exchange account today and export the full transaction history before the data ages out. One file, one afternoon, and every other record you keep finally has something to reconcile against.