Reconstructing missing crypto records is forensic work, not an import. You rebuild the history from the outside in. Start with the ground truth that can't be lost (the blockchain remembers everything). Layer on whatever custodial records survived. Use bank statements to bound the fiat that ever entered the system. Match your transfers so internal movements don't get taxed as sales. Then, for the gaps that are left, establish a cost basis by a documented method you can defend.
What you end up with isn't a number. It's a number plus the trail showing how you got there, and the trail is what makes it hold up.
Tax authorities don't demand perfect records. They demand a reasonable effort and an explanation of your figures. A documented estimate you can defend beats a precise-looking number you can't.
General methodology, not tax advice. If you're facing an enquiry or a disclosure, get a qualified adviser involved.
Step 1: inventory everything, before you touch any data
Write down every place your crypto has ever been. Not the places you remember fondly. All of them.
- Every exchange account you ever opened. Including the ones that closed, the ones you used twice, and the ones in countries you don't live in anymore.
- Every wallet address, on every chain. Check old devices, old browsers, old phones, the hardware wallet in the drawer.
- Every protocol, bridge and DEX you touched.
- Every tax year you need to cover.
People chronically under-report their own history at this stage, and every source you forget turns into a "missing cost basis" error you'll spend hours chasing later. Half an hour of honest inventory saves days.
Step 2: harvest the blockchain, because it's the only complete record
The chain doesn't forget. Any address you can name gives you a full, timestamped, permanent record of everything that address ever did, whether or not you kept notes and whether or not the exchange still exists.
Pull the complete transaction history for every address, on every chain it touched. Block explorers export CSV. Some chains need more than one export type (normal transactions, internal transactions, token transfers, NFT transfers), and if you only grab the first you'll miss most of your activity.
This is the backbone. Everything else hangs off it.
Step 3: recover what survived on the custodial side
The chain shows what happened on-chain. It has nothing to say about what happened inside an exchange. Trades executed on a centralised exchange never touched a blockchain, so with no record from the exchange, you have no record at all.
For exchanges that still exist: pull every export type they offer, not just the obvious one. Trades, deposits and withdrawals, converts, staking rewards, distributions, fees. Check the earliest row against the date you opened the account, and if there's a gap, ask support for a full history export. Many will produce one even when the self-serve UI won't.
For exchanges that are gone, you're scavenging:
| Source | What it gives you |
|---|---|
| Old CSV exports in a downloads folder | The jackpot. Search your disk for the exchange name. |
| Trade confirmation emails | Asset, amount, price, timestamp. Search your mail archive. |
| Deposit and withdrawal emails | Ties an on-chain movement to a specific account. |
| Bankruptcy or claims documents | Often include a statement of holdings at a date. |
| Screenshots | Ugly, but a dated screenshot of a balance is evidence. |
| The Internet Archive | Occasionally has fee schedules and historic prices. |
None of that feels rigorous. All of it is admissible as part of a documented reconstruction, and it beats a blank.
Step 4: bank records, to bound the fiat
Your bank and card statements tell you exactly how much money went into crypto, when, and through which platform. That's a hard constraint, and it does two jobs.
It catches sources you forgot. A £400 card payment to an exchange you have no memory of opening belongs in your inventory.
And it caps the possible. If £3,000 total ever left your bank towards crypto, then your total acquisition cost across all fiat purchases is £3,000, however confused the rest of the picture looks. Later, when you're estimating a basis for a gap, that ceiling keeps the estimate honest.
Pull statements for every year in scope, from every account and card you might have used.
Step 5: match the transfers
Biggest single effect on your tax bill. Most commonly skipped.
Move your own crypto between your own accounts and nothing has been sold. But the exchange logs a withdrawal, the wallet logs a deposit, and no shared reference connects them. Leave those two events unmatched and the withdrawal becomes a disposal, the deposit becomes a fresh acquisition, and you pay tax on a gain that never existed. Every later trade in that asset then inherits a wrong basis.
Matching runs on timestamp windows plus amount, with tolerance for network fees, since what arrives is usually a little less than what left. Bridges are harder: two events, two chains, and the asset may not even have the same name on each side. Do the matching across your whole history at once. Exchange by exchange, you can't see both halves.
Where one half is missing (the other end was a dead exchange, or an address you've lost), you have to make a call and record it. An outbound transfer to an address you can prove is yours is a transfer. An outbound transfer to an address you can't identify might be a disposal, a payment or a gift, and each is treated differently. Write down what you chose and why.
Step 6: rebuild the cost basis for what's left
By now most of the gaps have closed. What remains is the real problem: disposals whose acquisition genuinely can't be retrieved, because the exchange is gone or the record never existed.
You can't invent a number. You can establish one by method. Strongest first:
Direct evidence. An email, a screenshot, a fragment of an old export naming the price you paid. Use it, cite it.
Bank-anchored derivation. You sent £2,000 to the exchange on a known date, and the on-chain record shows what you withdrew shortly after. That brackets the acquisition tightly.
Historic market price at a known acquisition date. The on-chain trail or a deposit email tells you exactly when an asset arrived and how much. If the price you paid is unknown, the market price at that timestamp is a reasonable, documentable proxy. Pick one price source, use it every time, record which one.
The conservative floor. Where a basis can't be established at all, the safe treatment is often to assume zero or near-zero, which maximises the gain and therefore the tax. It costs you money. It's also the option no tax authority will argue with, and on a small residue it's usually cheaper than the hours you'd spend chasing certainty.
Two rules run across all of it. Be consistent: same method for every similar gap, no cherry-picking whichever one produces the lowest tax on the day. And write the method down, in the file, next to the number, at the moment you decide it. A reconstruction where every estimate is labelled with its basis is defensible. The same numbers with no explanation aren't, and you will not remember your reasoning in eighteen months.
Step 7: apply the tax rules last
Only now do you calculate, and by this point it's mechanical.
In the UK that's Section 104 pooling, with the same-day rule first, the 30-day bed and breakfast rule second, and pooled average cost after that. All holdings of an asset pool together across every exchange and wallet you own. In the US it's Form 8949 and Schedule D with a consistently applied cost basis method.
The computation is only as good as the history underneath it. Run the rules over an incomplete reconstruction and you'll get a confident, precise, wrong answer, which is worse than no answer, because you'll believe it.
Step 8: the audit trail
What you're actually delivering:
- The complete categorised transaction log, every source identified.
- Every transfer explicitly marked as a transfer, not a disposal.
- Every cost basis either sourced or labelled with the method used to estimate it.
- The tax computation, showing which acquisitions matched which disposals.
- A note of what couldn't be recovered and what was assumed instead.
Someone asks where a number came from, you answer in under a minute. That's the difference between a file that closes and a file that escalates.
Where to start
Step zero is finding out how big the problem is, because most people have no idea. They know it's bad. They don't know whether it's 200 transactions and two gaps or 14,000 transactions and 212 gaps, and the right response looks nothing alike in those two cases.
That's what the free diagnostic scan is for. Show us the mess: exchanges connected read-only, wallet addresses, whatever CSVs survived. Redacted files are fine, we need transactions and not identities. Within about two business days you get a report built from your own data: transactions found, sources found, missing cost bases, unmatched transfers, duplicates, tax years affected. Yours to keep whether you take it further or not. If you'd rather we did the reconstruction than do it yourself, we quote off those numbers, fixed, from £499, and analysts run exactly the process above.
Everything in this post is doable on your own. It just takes a long time, and the failure mode is silent: you finish, you file, and you never learn which of your assumptions was wrong. If you'd rather not roll that dice, start with the scan.