- Export full transaction history from every platform and wallet used in the tax year. This often takes between 5 and 30 minutes per exchange.
- Secure bank statements or payment processor records that show GBP receipts. This usually takes 10–20 minutes.
- Normalise timestamps to UTC and capture txids for on‑chain transfers. Missing txids cause delays at audit.
- Freeze further trading if close to filing. This avoids adding complexity in the same tax year.
- If total gains exceed the Annual Exempt Amount or tax is due, prepare to file a Self Assessment by 31 January. Missing this deadline risks interest and penalties.
Immediate action: export CSVs now. Exchanges sometimes prune logs. This single action prevents most time pressure later.
One clear task now prevents a lot of stress later.
Essential definitions and how HMRC matching works in practice
Here are short definitions that must be clear before any calculation. Each term is actionable and will be used later in the template.
- Disposal: any event that ends ownership for tax purposes. Selling for GBP, swapping for another crypto, gifting, or spending counts.
- Acquisition cost / cost basis: the GBP cost when the asset was acquired. This includes allowable fees tied to that acquisition.
- Capital gain / capital loss: proceeds in GBP minus acquisition cost and allowable costs.
- Allowable costs: exchange fees, network/gas fees linked to the disposal, and acquisition costs.
- Same‑day matching: acquisitions on the same calendar day match disposals first. The day runs midnight to midnight UK time.
- 30‑day rule (bed and breakfast): acquisitions in the 30 days after a disposal match that disposal next.
- Section 104 pooling: units left after other matches join the pool. The pool uses an average cost per unit.
Practical timing notes:
- Same‑day uses the UK calendar day. Exchange timestamps in UTC must be converted when needed. A timezone error here often changes the matched acquisition.
- The 30‑day window is inclusive of the 30th day after disposal. Many miscalculations happen here.
- Pooling applies only after same‑day and 30‑day matches fail to allocate units.
Warning: treating a crypto‑to‑crypto swap as non‑taxable is a common error. If consideration is received, this is a disposal and must be valued in GBP at that timestamp.
→
Same‑day matches(acquisitions same UK calendar day)
→
30‑day matches(acquisitions within 30 days)
→
Section 104 pool(average cost per unit)
The checklist below is chronological. Each item is actionable. If a step has sub‑steps, they are listed.
-
Stop trading briefly and snapshot balances.
-
Take screenshots of wallet balances and exchange positions with timestamps. This takes 2–5 minutes.
-
Export current open orders and cancel or note them.
-
Export full transaction histories from every exchange or wallet.
-
For exchanges: export Trades, Deposits, Withdrawals and Fees. This takes 5–30 minutes per platform.
- For wallets: record txids, block timestamps and on‑chain amounts.
-
Common providers: Coinbase, Binance, Kraken, Bitstamp, Gemini. Each provider uses different CSV layouts.
-
Collect bank and fiat receipts.
-
Export bank statements showing GBP incoming transfers from exchanges. Keep payment processor records. This usually takes 10–20 minutes.
-
Prepare a single CSV with the following columns. This exact mapping allows import into the spreadsheet and reduces errors.
| Column name |
Description |
Sample value |
| timestamp_utc |
ISO 8601 UTC timestamp of disposal |
2024-03-15T14:23:05Z |
| txid |
Blockchain txid or exchange trade id |
abc123tradeid |
| asset_sold |
Symbol of asset sold |
BTC |
| amount_sold |
Units sold |
0.125 |
| asset_received |
Counter asset (GBP, USDT, ETH) |
GBP |
| proceeds_gbp |
GBP value of proceeds at disposal timestamp |
2500.00 |
| acquisition_date |
Date/time of the matched acquisition |
2023-09-01T10:00:00Z |
| acquisition_cost_gbp |
GBP cost used for this disposal |
1500.00 |
| fees_gbp |
All fees converted to GBP at fee timestamp |
10.00 |
| net_gain_loss_gbp |
proceeds_gbp - (acquisition_cost_gbp + fees_gbp) |
990.00 |
| matching_rule |
same-day / 30-day / pooling |
pooling |
| exchange_name |
Source exchange or wallet |
Binance |
Sample CSV rows (copy into the spreadsheet):
2024-03-15T14:23:05Z,abc123tradeid,BTC,0.125,GBP,2500.00,2023-09-01T10:00:00Z,1500.00,10.00,990.00,pooling,Binance,"bank transfer 15/03"
2024-02-10T09:12:00Z,tx_ethswap01,BTC,0.200,ETH,1800.00,2022-11-05T12:00:00Z,1200.00,5.00,595.00,same-day,Coinbase,"BTC→ETH swap"
2024-03-01T08:00:00Z,tx30day01,BTC,0.050,GBP,1100.00,2024-02-16T07:00:00Z,900.00,2.00,198.00,30-day,Kraken,"30-day match"
-
Apply HMRC matching rules in the spreadsheet and mark the matching_rule for audit. This takes 30–90 minutes for a modest trade history.
-
Convert all fees paid in crypto to GBP at the fee timestamp and deduct them against the relevant disposal. Missing fee conversion commonly causes underreported gains.
-
Sum gains and losses. Apply the Annual Exempt Amount and record taxable gain. Keep the per‑disposal calculations for each tax year.
-
Keep originals and backups for at least 5 years from 31 January after the tax year. HMRC can open enquiries in that period.
Save all files in two different locations.
Calculating taxable gains, worked examples, pooling and apportionment
This section shows exact arithmetic and the spreadsheet logic to follow. Each worked example is brief. Each example stays audit friendly.
Worked example a, simple sale to GBP
- Scenario: 0.5 BTC bought in 2021 for £10,000. 0.125 BTC sold on 15 March 2024 for £2,500. Exchange fee £10.
- Pool cost per BTC = £10,000 / 0.5 = £20,000. Cost for 0.125 BTC = £2,500.
- Net gain = £2,500 - (£2,500 + £10) = -£10. This shows pooling can produce zero or negative gains.
Note: many taxpayers assume partial-sales always create gains. This numeric example shows that pooling can lead to no taxable gain.
Worked example b, crypto-to-crypto trade
- Scenario: 0.2 BTC swapped for 3 ETH on 10 Feb 2024. GBP value of 3 ETH at that timestamp = £1,800. Pool cost for 0.2 BTC = £1,200.
- Fees paid in BTC equal to 0.0005 BTC. Convert 0.0005 BTC to GBP at fee timestamp, say £5.
- Net gain = £1,800 - (£1,200 + £5) = £595.
Important: the proceeds must be converted to GBP at the disposal timestamp. Using a price from several hours later is a frequent error.
Worked example c, same‑day and 30‑day matching
- Timeline: Acquire 0.1 BTC on 2024‑03‑01 at £3,000. Acquire 0.1 BTC on 2024‑03‑02 at £3,200. Dispose 0.1 BTC on 2024‑03‑02.
- Correct matching: same‑day acquisition on 2024‑03‑02 matches the disposal first. Cost = £3,200.
- If the 2024‑03‑02 acquisition had been ignored, pooling would give a cost of £3,000 and understate the gain.
That mistake can change tax by hundreds of pounds.
Worked example d — 30‑day
- Sell 0.05 BTC on day 1. Buy 0.05 BTC on day 15. The buy on day 15 matches the sale under the 30‑day rule.
- Costs will be taken from that later acquisition.
- Spreadsheet must search acquisitions between day 1 and day 30 to allocate the 30‑day match.
Calculator logic
- Pool update on acquisition:
- NewPoolCostPerUnit = (OldPoolUnits * OldPoolCostPerUnit + AcquisitionUnits * AcquisitionCostPerUnit) / (OldPoolUnits + AcquisitionUnits)
- On disposal (pool match):
- DeductedCost = UnitsDisposed * PoolCostPerUnit
- Net gain per disposal:
- =proceeds_gbp - (DeductedCost + fees_gbp)
Use SUMIFS to calculate totals for the pool and to pull acquisition rows by timestamp. Keep a column with the chosen matching_rule for every disposal.
Records to keep, allowable costs and common errors to avoid
Records to keep for at least 5 years from 31 January after the tax year:
- Exchange CSV exports (trades, deposits, withdrawals).
- Blockchain txids and block timestamps for wallet transfers.
- Bank statements showing GBP receipts and transfers.
- Screenshots showing wallet balances at disposal timestamps.
- Emails or support tickets with exchanges for disputed entries.
Allowable costs that can reduce gains:
- Acquisition price paid in GBP for the units disposed.
- Exchange fees charged on the disposal and acquisition, apportioned if needed.
- Network/gas fees directly attributable to the disposal.
Apportioning a single network fee across multiple disposals:
- If a wallet withdrawal paid a network fee covering three disposals, split the fee pro rata by GBP proceeds or by units.
- Example formula:
- Fee share = (disposal_proceeds / sum_proceeds_for_batch) * total_network_fee_gbp
Common errors and where people block:
- Treating internal transfers as non‑taxable without confirming beneficial ownership is frequent when coins move between personal wallets and custodial exchanges.
- Ignoring same‑day and 30‑day matching is common; the typical blocker is timezone mishandling, so convert all timestamps to UTC first.
- Using inconsistent GBP rates is a common trap — mixing prices from different exchanges or different hours causes errors. Pick a single source per timestamp and document it.
- Forgetting to convert fees paid in crypto usually underestimates gains.
For incomplete records, prepare a documented, reasonable estimate and keep all calculations. HMRC accepts reasonable reconciliation when full records are impossible, but the burden of proof rests with the taxpayer.
Reporting, deadlines, penalties and deciding income versus capital
Reporting routes and when to use them:
- Capital Gains Tax via Self Assessment: typical for occasional sales by an investor. File online by 31 January after the tax year. Pay any tax due on the same date.
- Income Tax: applies when activity amounts to trading as a business, or when receipts are mining, staking rewards, or remuneration. Evidence of frequency and commerciality points to Income treatment.
Comparative table: likely treatment, evidence and notes
| Situation |
Likely tax treatment |
Evidence needed |
| Occasional sale of BTC to GBP |
Capital Gains Tax (CGT) |
Trade CSVs, bank receipts |
| Frequent, systematic trading |
Income Tax (trading) |
Trading records, business plan, frequency evidence |
| Mining/staking/airdrop receipts |
Income Tax on receipt; possible later CGT on disposal |
Logs, wallet receipts, valuation at receipt |
Deadlines and payments to note:
- Online Self Assessment filing deadline: 31 January after the tax year. This applies for 2026 filings covering 2024–25 activity.
- Paper filing deadline: 31 October before the online deadline.
- Payment due: 31 January for balancing payment and first Payment on Account if applicable. A second payment on account may be due 31 July.
Penalties and reducing risk:
- Late filing attracts fixed penalties and daily penalties. Interest applies to late payments.
- Careless or deliberate inaccuracies invite higher penalties. A voluntary disclosure reduces penalties in many cases.
- If an earlier return is incorrect, amend online within time limits. Keep records of the amendment and the basis for it.
Contact HM Revenue & Customs for guidance on thresholds and specific cases: HM Revenue & Customs.
Frequently asked questions
This FAQ answers common urgent queries. Each answer gives a direct first sentence, then brief detail.
Do I have to pay tax on bitcoin gains in the UK?
Yes, gains are taxable if they exceed allowances and are not income. Capital Gains Tax applies to disposals by investors after using the Annual Exempt Amount. If transactions are trading, mining or staking, Income Tax may apply. The HMRC Cryptoassets Manual clarifies edge cases and the test for trading.
How much tax do I have to pay if I sell my bitcoin?
Tax depends on taxable gain and personal tax band. For CGT, the basic and higher rate bands determine the rate applied. The effective CGT rate varies by year and income. A quick estimate: taxable gain multiplied by the taxpayer's CGT rate gives the tax due; check current rates for the year in question and add any Payments on Account.
Will HMRC know if I sell crypto?
HMRC receives some data from exchanges and can trace on‑chain activity. There is a high chance large or systematic trades will be discoverable. Accurate reporting avoids enquiries and potential penalties.
Is it illegal to sell bitcoin for cash in the UK?
Selling for cash is not illegal per se, but proper records and AML checks may be required. Large cash transactions attract scrutiny under Money Laundering Regulations and the Proceeds of Crime Act 2002. Documentary proof is advisable.
How long must crypto tax records be kept?
Records should be kept for at least five years from 31 January after the relevant tax year. HMRC can open enquiries within that period. Missing records increase the risk of penalties.
Can crypto losses be offset against other gains?
Yes, allowable losses can offset gains in the same tax year or be carried forward. Losses must be reported on the Self Assessment or notified to HMRC to be used against future gains.
What if exchanges have incomplete exports?
If exports are incomplete, reconstruct trades using bank statements and blockchain txids, and document the reconstruction method. HMRC accepts reasonable, documented methods when full exports are unavailable.
Professional help should be sought when records are incomplete, when there are many disposals, when trading activity looks commercial, when cross‑border residence issues exist, or when income classification is uncertain.