Good crypto tax records are not a folder of exports. They are a running ledger you keep during the year, with a raw archive behind it, so the two can be reconciled in an afternoon rather than a fortnight.
Crypto tax records usually fail because of timing, not carelessness. Exchanges let you download history for a limited window, chains keep everything forever, and the person reconstructing the year is doing it months later, from memory, under a deadline.
- Every trade, transfer, reward and fee is a potential line item, including the ones that cost almost nothing.
- An exchange export is the starting point and always misses on-chain activity.
- Cost basis methods differ by jurisdiction, and switching between them is not free.
- Keep the raw files, the running sheet and a timestamped note of why each movement happened.
Every Movement Is a Potential Line Item
The unit of record-keeping is the movement, not the trade. Anything that changes what you hold, where you hold it, or what you paid to hold it belongs in the ledger, whether or not it produced a gain you noticed.
That includes rewards that arrived without a purchase, fees paid to move assets between your own accounts, and conversions between two assets that both look like cash. In many jurisdictions a swap between two stablecoins is a disposal of one and an acquisition of the other, which makes it a reportable event even though the value barely moved.
The reason to capture small items is not that each one matters. It is that the sum of them is invisible later, and reconstructing a hundred small items from memory is the part that turns a weekend into a month.
Why Exchange Exports Are Not Crypto Tax Records
An export describes what happened on one venue. It cannot describe what happened anywhere else, and it cannot see the transfers between your own wallets that connect one venue’s history to another’s.
This is the gap that breaks most reconstructions. The export shows a withdrawal of a token and the next export shows a deposit of the same token, but nothing in either file establishes that the two are the same asset moving between accounts you control.
What the export leaves out
On-chain transactions, gas and network fees, rewards received directly to a wallet, airdrops, and anything executed through a wallet rather than through the venue. It also typically omits the internal transfer that funded the wallet in the first place.
Fees deserve particular attention because they are easy to ignore and they accumulate. Thirty-eight transactions at 6.40 each is 243.20 of cost that never appears as a line in a venue export, and in many jurisdictions those costs affect the number you eventually report.
Transfers between your own wallets
Moving an asset between two wallets you control is not a disposal in most frameworks, but it is not nothing either. It changes custody, it usually costs a fee, and it breaks the continuity of a balance history that a reviewer will want to follow.
Record it as an internal transfer with both sides identified, the fee separated, and the reason noted. Without that link, a later reconstruction has to guess whether a withdrawal and a deposit are the same event or two different ones.
Cost Basis Methods Are Not Interchangeable
Different jurisdictions allow different methods for deciding which acquisition a disposal came from, and the method changes the number. First in, first out, average cost and specific identification can produce materially different results from an identical set of trades.
A worked comparison
Buy 2.0 units at 1,800 each, then 2.0 units at 2,400 each, then sell 1.5 units at 2,600. Under first in, first out, the sold units come from the earliest lot: proceeds of 3,900 against a cost of 2,700, leaving 1,200.
Under average cost, the pool sits at 2,100 per unit, so the same sale carries a cost of 3,150 and leaves 750. The trades did not change; the method moved the figure by 450, which is the entire reason the choice has to be made deliberately and recorded.
Switching between methods is not free
Changing method mid-history usually requires recomputing every prior disposal under the new rule, and some jurisdictions restrict when a change is allowed at all. A switch made casually in year three can mean restating years one and two.
Pick a method with local advice, write down the choice and the date, and apply it consistently. Consistency is the part that survives scrutiny; the specific choice matters less than being able to explain it.
The Running Sheet: Columns and the Why
A running sheet is one table, updated monthly, that holds every movement in the order it happened. It is not a tax return and it is not a substitute for advice. It is the working document that makes the return possible without archaeology.
Columns that earn their place
Date and time in UTC, platform or wallet, asset, amount, direction, the other side of the movement, the fee in its own currency, the reference to a transaction hash or trade ID, and the source file the row came from. Ten columns is enough for most retail histories.
Two columns are usually missing and matter most: the fee as a separate number rather than folded into the amount, and the reference that lets you trace a row back to a raw file. Without the second, the sheet becomes an assertion rather than a record.
The timestamped why
Add one short line explaining each movement at the time it happens. Why the funds moved, which wallet it went to, what the transfer was for. Six months later the numbers are readable and the intent is not.
This is the cheapest part of the system and the part people skip. A note written in ten seconds in March replaces an hour of uncertainty in December, and it is the only part of the record that cannot be reconstructed from any export.
| Record type | Where it comes from | What it misses | Keep it for |
|---|---|---|---|
| Venue trade export | The exchange’s own reporting | On-chain activity and internal transfers | Reconciling trades against balances |
| On-chain history | A block explorer or wallet | Anything done on a venue’s ledger | Fees, rewards and wallet-to-wallet moves |
| Internal transfer note | You, at the time of the move | Nothing, if written properly | Linking a withdrawal to its deposit |
| Reward statement | Staking or reward source | The date the value was fixed | Establishing acquisition dates |
| Fee log | Wallets and explorers | Fees bundled into a venue spread | Supporting costs that reduce a figure |
The export tells you what a venue saw. The sheet tells you what you did. Only the second one can be handed to somebody else and understood.
A Month of Ordinary Housekeeping
Here is what the maintenance version looks like when it is done monthly rather than annually, on a history of moderate size.
- Download the month’s export from each venue and store it unedited, with the download date in the filename.
- Pull the on-chain movements for the same month, then delete duplicates caused by a transaction being both sent and received.
- Add each row to the sheet: 214 export rows plus 41 on-chain events plus 9 internal transfers gives 264 line items for the year.
- Separate fees: 38 transactions at 6.40 each is 243.20, which otherwise sits inside the amounts and disappears.
- Link each internal transfer to its counterpart, so the withdrawal and the deposit appear as one movement with two sides.
- Reconcile closing balances per account against the sum of the rows. A gap of 12 units is a missing line item, not a rounding error.
- Write the why for anything unusual while the reason is still fresh, and stop. The month took under an hour.
0 comments
No comments yet — ask a question and we will answer it here.