How to Track Crypto Cost Basis Across Multiple Exchanges and Wallets
The problem shows up the first time you hold the same coin in two places. Some ETH on Kraken from a year ago, some in a hardware wallet you bought cheaper, and a spreadsheet with one row that says “ETH — 2.0.”
That row is wrong in a specific and expensive way, and fixing it takes one extra column.
One Row Per Venue, Always
Here’s the crypto side of the worked portfolio from the main guide, laid out correctly. Illustrative figures, snapshot 21 August 2026.
| Coin | Where | Quantity | Avg cost | Total cost | Price now | Value | Gain | % of crypto |
|---|---|---|---|---|---|---|---|---|
| BTC | Coinbase | 0.08500 | $61,200 | $5,202.00 | $74,500 | $6,332.50 | +$1,130.50 | 43.5% |
| ETH | Kraken | 1.400 | $2,980 | $4,172.00 | $3,150 | $4,410.00 | +$238.00 | 30.3% |
| ETH | Cold wallet | 0.600 | $2,410 | $1,446.00 | $3,150 | $1,890.00 | +$444.00 | 13.0% |
| SOL | Coinbase | 12.00 | $148.00 | $1,776.00 | $161.00 | $1,932.00 | +$156.00 | 13.3% |
| Total | $12,596.00 | $14,564.50 | +$1,968.50 | 100% |
Four rows for three coins. The two ETH rows are the point.
Merge them into a single 2.0 ETH position and the blended basis is (1.4 × $2,980 + 0.6 × $2,410) / 2.0 = $2,809.00, which is a perfectly accurate average and completely useless the moment you sell part of it.
Sell 0.6 ETH at $3,150:
- From the cold wallet lot (basis $2,410): proceeds $1,890.00 − basis $1,446.00 = $444.00 gain
- From the Kraken lot (basis $2,980): proceeds $1,890.00 − basis $1,788.00 = $102.00 gain
- From the merged 2.0 pool (basis $2,809): proceeds $1,890.00 − basis $1,685.40 = $204.60 gain
Same coin, same day, same price, and a $342 spread between the highest and lowest reported gain. Which one is correct depends on which units you actually disposed of and what you can substantiate — and that’s the part the merged row makes impossible, because it deleted the evidence.
The Transfer That Eats Your Basis
The single most common way people wreck their own crypto records: moving coins from an exchange to a wallet, and logging the arrival as a new purchase.
Say you move that 0.6 ETH from Kraken to the cold wallet on a day ETH is at $3,150. If you log a Kraken outflow and a cold-wallet buy at $3,150, you’ve just:
- invented a $1,890 cost basis where the real one is $1,446, understating your eventual gain by $444;
- reset the acquisition date, restarting a holding-period clock that never actually stopped;
- and created a disposal that didn’t happen.
Moving your own coins between accounts you control isn’t a sale. The coins keep their original basis and their original acquisition date, and the only thing that changes is the venue column.
So: edit the venue, keep the numbers. In the table above, the cold-wallet ETH row carries a $2,410 basis dated from when it was originally bought, not from when it landed in the wallet. If you want an audit trail of the move itself, add a note column — “moved from Kraken, 12 Jun 2026” — rather than a new row. The one nuance worth raising with a preparer is the network fee, especially if it’s paid in the coin being moved.
Fees Belong in the Basis
Exchange fees on a buy get added to what you paid. Buy $1,000 of SOL with a 0.6% taker fee and your basis is $1,006, not $1,000 — and on a sale the fee comes off the proceeds rather than being added to basis.
It sounds like rounding. Across a few years of regular buys on a platform charging 0.5% to 1.5%, it isn’t: on $12,596 of purchases at an average 1%, that’s roughly $126 of basis you’d otherwise leave on the table, which is $126 of gain you’d pay tax on twice over. Since most trackers give you a single Avg Cost Basis cell per position rather than a separate fee column, the practical move is to roll the fee in when you enter it: (total paid including fees) / quantity is the number that goes in the cell.
Reconcile Per Venue, Once a Quarter
The venue column pays for itself a second time at reconciliation.
Once a quarter, open each exchange, take the quantity it says you hold of each coin, and compare it to the rows in your sheet tagged to that venue. Two minutes per exchange. What you’re looking for is a quantity mismatch, and the usual culprits are staking rewards you never logged, a small airdrop, a fee taken in kind, or a trade you made on your phone and forgot.
This matters more than it sounds because quantity errors compound quietly. A tracker that thinks you hold 1.4 ETH when you hold 1.43 reports the wrong value, the wrong gain, the wrong allocation percentage, and — worst of the four — the wrong number when you eventually sell. Catching it quarterly means you’re reconciling against exchange records that are still easy to pull.
Why It Belongs in the Same File as Your Stocks
Keeping crypto in its own app or its own sheet feels natural — different asset, different venue, different mental bucket. It also hides the only crypto number most people genuinely need.
In the worked portfolio, crypto is $14,564.50 against a $51,003.50 total. That’s 28.6% of everything, held by an investor whose stated target is 10%. Nobody decided that. It happened because the coins went up and the tracker that held them didn’t know what else existed.
You cannot see that in a crypto app, no matter how good the app is, because the app only knows about the crypto. One extra tab in the file that already holds your stocks, and it’s a single formula.
Featured on ReadySheetGo
Stock & Crypto Portfolio Tracker — includes a Crypto Positions tab built exactly this way: up to 30 rows, each with coin, symbol, exchange or wallet, quantity, average cost basis, current price, and automatic total cost, current value, gain/loss, return % and share of your crypto holdings — feeding the same Asset Allocation tab as your stocks, so crypto drift against your target shows up in dollars. Alongside a 50-row Stock Trade Log with cost basis and short-term/long-term classification, a Dividend Tracker with yield on cost, a Watchlist with buy-zone alerts, a 36-month performance log, a Tax Summary for Schedule D prep, and a Portfolio Dashboard. 9 tabs, 957 formulas, Excel and Google Sheets. Instant digital download — $17.99.
Illustrative figures only — not investment or tax advice. Digital asset tax rules change; confirm the treatment for your tax year with a qualified preparer.
Frequently Asked Questions
Should I average my crypto cost basis across exchanges?
No — keep one row per coin per venue. Averaging 1.4 ETH bought at $2,980 with 0.6 ETH bought at $2,410 gives a tidy $2,809 blended basis and throws away the information that decides your tax bill. Selling 0.6 ETH from the cheap lot is a $444 gain; the same 0.6 ETH from the expensive lot is $102. You can only make that choice if the lots were never merged.
Is moving crypto between my own wallets a taxable event?
Moving your own coins between wallets or accounts you control is generally not a disposal, so there's no gain or loss to report — but the original cost basis and acquisition date travel with the coins. The tracking error to avoid is logging the arrival as a fresh purchase at the transfer-day price, which overwrites your real basis and resets your holding-period clock. Log it as a move, not a buy. Network fees paid in crypto are a separate question worth raising with a preparer.
How does the IRS treat cryptocurrency for cost basis purposes?
Digital assets are treated as property rather than currency (IRS Notice 2014-21), so each disposal — selling, swapping one coin for another, or spending it — is a capital gain or loss event measured against your basis. Guidance has moved toward tracking basis account by account rather than as one universal pool across all your holdings, which is exactly what one row per venue produces. Rules change; confirm the current position for your tax year with a preparer.
What should a crypto tracking spreadsheet include?
Coin, symbol, the exchange or wallet holding it, quantity to eight decimal places, average cost basis for that specific lot including fees, current price, and formulas for total cost, current value, gain/loss and percentage of your crypto holdings. The venue column is the one people leave out and the one that makes the rest of it work — without it you can't reconcile against a single exchange's records or apply a per-account basis method.