The short answer: three steps, fixed order
When you dispose of a cryptoasset, HMRC requires you to match the disposal against acquisitions in a fixed order. Step one: acquisitions made on the same day as the disposal. Step two: acquisitions made in the 30 days immediately following the disposal (the bed-and-breakfasting rule), matched chronologically. Step three: the s104 pool at average cost. You work through the steps in sequence; only unmatched amounts fall through to the next step.
This ordering is set by statute and applies to all UK individuals holding cryptoassets as investments. It is also the single biggest source of DIY-calculation error for active traders, because most crypto-tax software defaults to FIFO or specific-identification matching, which are US methods and are wrong for UK tax purposes. The rules are confirmed at HMRC CRYPTO22250.
Step 1: the same-day rule
If you acquire and dispose of the same token on the same date, the disposal is matched against that day's acquisition first, at the actual acquisition cost paid that day. The same-day acquisition is consumed by the match and does not enter the s104 pool at all. If you sell more than you buy on the same day, the surplus falls through to step two.
This rule exists to prevent a simple tax play: buying in the morning, selling at a gain in the afternoon, and claiming the pool average cost (which might be much lower) as the deductible cost. The same-day rule closes that by using the actual same-day cost instead.
Step 2: the 30-day (bed-and-breakfasting) rule
Any disposal not matched under the same-day rule is then matched against acquisitions of the same token in the 30 days immediately after the disposal date, in chronological order (earliest acquisition first). This is the bed-and-breakfasting rule, named after the historic share practice of selling before tax year end and rebuying the next morning to crystallise a gain or loss.
The 30-day rule matters most in two scenarios. First, where you sell at a loss and rebuy within 30 days: without the rule, you could crystallise the loss while still holding the position. The rule neutralises this by matching the disposal against the rebuy cost rather than the pool, reducing or eliminating the loss. Second, where you sell at a gain and rebuy at a higher price: the rule prevents you from artificially inflating your pool's average cost by using the cheaper pool cost against the disposal proceeds.
Acquisitions matched under the 30-day rule also do not enter the s104 pool; only unmatched acquisitions go into the pool.
Step 3: the s104 pool
Once same-day and 30-day matching are exhausted, any remaining disposal amount is matched against the s104 pool. The pool holds all previous unmatched acquisitions of the token, and the allowable cost is the pool's average cost at the time of disposal. Each token type has one pool; ETH is one pool, BTC is another, and so on.
The average cost updates every time an unmatched acquisition enters the pool: new cost divided by new total quantity. When a disposal draws from the pool, the corresponding cost leaves the pool proportionally, and the average remains unchanged for the remaining balance.
FIFO, LIFO and specific-identification are not permitted for UK individuals. Presenting HMRC with a FIFO calculation is not a minor formatting preference; it is a different calculation that will usually produce a different gain or loss, and HMRC expects the correct UK method.
Worked example: all three steps in one scenario
The following example uses a single token (call it ETH for readability) with four transactions across six weeks. The prices are illustrative; the matching logic and arithmetic reflect the actual UK rules. Work through it in date order, applying the matching steps after all transactions are visible.
Transaction ledger
| Date | Event | Quantity | Price per ETH | Total £ |
|---|---|---|---|---|
| 15 Jan | Buy | 10 ETH | £1,200 | £12,000 |
| 20 Feb | Buy | 2 ETH | £1,500 | £3,000 |
| 20 Feb | Sell | 8 ETH | £2,000 | £16,000 proceeds |
| 5 Mar | Buy | 3 ETH | £1,800 | £5,400 |
The disposal is the 8 ETH sold on 20 February for £16,000. Apply the three steps.
Applying the matching rules
Step 1, Same-day (20 Feb buy of 2 ETH): The 20 Feb disposal is matched first against the 20 Feb acquisition. 2 ETH are matched at the actual cost of £1,500 each = £3,000. This 2 ETH buy does not enter the pool. That leaves 6 ETH of the disposal unmatched.
Step 2, 30-day (5 Mar buy of 3 ETH): The 5 Mar buy falls within 30 days after 20 Feb, so 3 ETH are matched against the disposal at the 5 Mar acquisition cost: 3 ETH × £1,800 = £5,400. This 3 ETH buy does not enter the pool. That leaves 3 ETH of the disposal unmatched.
Step 3, s104 pool (remaining 3 ETH): The pool at the point of disposal holds only the 15 Jan buy (the same-day and 30-day buys were matched out, not pooled). Pool: 10 ETH, total cost £12,000, average cost £1,200. The disposal draws 3 ETH from the pool at £1,200 each = £3,600. Pool balance after: 7 ETH, remaining cost £8,400, average still £1,200.
Gain on each matched tranche
| Matched by | ETH matched | Proceeds (@ £2,000) | Allowable cost | Gain |
|---|---|---|---|---|
| Same-day rule | 2 ETH | £4,000 | £3,000 (@ £1,500) | £1,000 |
| 30-day rule | 3 ETH | £6,000 | £5,400 (@ £1,800) | £600 |
| s104 pool | 3 ETH | £6,000 | £3,600 (@ £1,200 avg) | £2,400 |
| Total | 8 ETH | £16,000 | £12,000 | £4,000 |
Cross-check: total proceeds £16,000 minus total allowable cost (£3,000 + £5,400 + £3,600 = £12,000) = £4,000 gain. Confirmed.
Pool state summary
| After event | Pool ETH | Pool cost | Avg cost/ETH |
|---|---|---|---|
| 15 Jan buy (enters pool) | 10 ETH | £12,000 | £1,200 |
| 20 Feb buy (matched same-day, does NOT enter pool) | 10 ETH | £12,000 | £1,200 |
| 20 Feb disposal (3 ETH drawn from pool) | 7 ETH | £8,400 | £1,200 |
| 5 Mar buy (matched 30-day, does NOT enter pool) | 7 ETH | £8,400 | £1,200 |
Why crypto-tax software often gets this wrong
Most crypto-tax software is built primarily for the US market, where the IRS allows taxpayers to choose FIFO, LIFO or specific-identification as their cost basis method. That choice is unavailable to UK individuals. HMRC requires the s104 average-cost pool, overridden by the same-day and 30-day rules per CRYPTO22250.
A FIFO calculation on the example above would match the 15 Jan buy (cost £1,200/ETH) against the disposal first, producing a larger gain on those units. A specific-identification approach might let you pick the most expensive lots to minimise the gain. Both produce numbers that HMRC does not accept. The difference between the correct UK figure and a FIFO figure can easily run to thousands of pounds on a moderately active year.
Even software that advertises UK support may implement the 30-day rule with known gaps: applying it only to loss-making disposals, not checking whether a purchase in the 30 days after a profitable disposal triggers the rule, or failing to handle the case where multiple same-day acquisitions and disposals occur in different proportions. These are not obscure edge cases for active traders; they are normal weeks of activity.
The deeper issue is that the same-day and 30-day steps require the software to look forward in time from each disposal, not just backward. A stateless calculation that processes your CSV in date order cannot do this correctly without a full two-pass over the ledger. This is why no web-based calculator, including ours, can implement the matching rules for you: it requires your full transaction history and a calculation that is specific to your ledger.
Where this leaves your CGT figure
Once you have the total gain from all disposals in the tax year, the CGT calculation follows a fixed sequence.
First, offset any allowable capital losses from the same year or carried forward from earlier years. Losses must be claimed to be usable; unclaimed loss years are a common source of overpaid tax.
Second, deduct the annual exempt amount of £3,000 (frozen, 2026/27). If your net gains after losses are £3,000 or below, there is no CGT to pay, though the disposals may still need to be reported if your total proceeds exceed the reporting threshold.
Third, apply the rate to what remains. Cryptoassets are non-residential assets. A basic-rate taxpayer pays 18% only on the portion of the taxable gain that fits inside their remaining basic-rate band (the basic-rate band ceiling is £37,700 of taxable income for 2026/27; the remaining room is £37,700 minus your taxable income other than the gain). Any gain above that boundary is taxed at 24%. Higher-rate and additional-rate taxpayers pay 24% on the whole taxable gain.
Continuing the example: total gain is £4,000. Assume no losses and no other disposals in the year. After the £3,000 annual exempt amount, taxable gain is £1,000. If the taxpayer has £30,000 of other taxable income, their remaining basic-rate band is £37,700 minus £30,000 = £7,700. The £1,000 gain fits entirely within that room: CGT at 18% = £180. If the taxpayer is a higher-rate taxpayer with no remaining basic-rate band, CGT at 24% = £240.
Note that this example involves a single disposal. Active traders and anyone who swaps tokens frequently may have dozens or hundreds of CGT events in a year, since crypto-to-crypto swaps are themselves disposals at the sterling market value at the moment of the swap. The £3,000 annual exempt amount is exhausted quickly under those conditions.
Getting your numbers reconciled
If you have used Koinly, Recap, CoinTracker or a similar tool to generate a tax report, the figures it produces may differ from a correct UK calculation for the reasons described above. The most common gaps are: FIFO used instead of average cost, the 30-day rule applied only to loss-making disposals, same-day matching omitted or incomplete, and DeFi deposit events not treated as disposals.
Our crypto-tax software report review and reconciliation service works through your full transaction export against the UK rules and identifies where the software output diverges from what you would owe. The outcome is a corrected CGT figure and, where needed, a corrected Self Assessment return.
For a rough scenario estimate on a straightforward position (pool-only, no same-day or 30-day matching), use our crypto CGT estimator. The tool applies the s104 pool at average cost and states clearly that it does not model the same-day or 30-day rules. Use it for ballpark planning, not as a filing figure.
If you are unsure whether your situation is straightforward or not, the short answer is: if you traded more than once a month, swapped between tokens, used a DeFi protocol, or received staking or mining rewards, it is almost certainly not straightforward. A crypto Self Assessment review is the right starting point.