Wallet-to-Wallet Crypto Transfers and UK Tax (2026 Guide)
Moving crypto from Coinbase to a Ledger is not a taxable event, but exchange CSVs make it look like one. What HMRC counts as a disposal, records to keep, and how to fix it.
Someone moves bitcoin from Coinbase to a Ledger, imports the Coinbase CSV into a tax tool, and sees a five-figure gain they never realised. Then a forum post says HMRC treats every withdrawal as a sale, and the panic sets in. The law is settled and the answer is short: moving your own crypto between wallets you control is not a taxable event. The problem is that exchange exports do not know who owns the receiving address, so the row for a self-transfer looks exactly like the row for a sale. This guide covers what HMRC treats as a disposal, why CSVs mislead, the evidence HMRC expects you to hold, and how the main tools handle the reconciliation.
What counts as a disposal
HMRC's Cryptoassets Manual at CRYPTO22050 lists the events that are disposals for Capital Gains Tax:
- selling tokens for money,
- exchanging tokens for a different type of token,
- using tokens to pay for goods or services,
- giving tokens away to another person.
Moving tokens between two wallets you own is not on the list, and the manual says so directly: a transfer between your own wallets is not a disposal, because beneficial ownership has not changed. That holds in both directions and however large the amount. Your Section 104 pool is unaffected; the units simply sit at a different address with the same pooled cost.
The exception that catches people is the fourth item. If the receiving wallet belongs to someone else, the transfer is a gift and a disposal at market value under TCGA 1992 s.17, even if no money changed hands. Transfers to a spouse or civil partner are no-gain/no-loss under s.58 and still need recording; the spouse transfer guide covers that. A transfer into a platform that takes beneficial ownership of the tokens, such as some lending products, may be a disposal under the CRYPTO61000 analysis even though you expect equivalent tokens back. A deposit to a custodial exchange, where the exchange holds the coins for you, is not.
The one taxable piece: the network fee
The transfer itself is nothing. The fee is not quite nothing. If you pay 0.0004 ETH in gas to move ETH to your Ledger, that 0.0004 ETH has been spent, which is a disposal of it at its sterling value on the day; the gain or loss is usually pennies. What you cannot do is add that fee to the cost of the ETH you moved: CRYPTO22150 says fees for moving tokens between your own wallets are not allowable costs, because there is no acquisition or disposal for them to be incidental to. Exchange withdrawal fees deducted from the sent amount are the same. The fees guide has the full breakdown.
Why the Coinbase CSV looks like you sold
Open a Coinbase transaction history export and find a withdrawal. The Transaction Type column says "Send". The Price at Transaction, Subtotal, Total (inclusive of fees and/or spread) and Fees and/or Spread columns are all populated, in GBP, exactly as they are for a row that says "Sell". The only things that distinguish them are the type label and the Notes field, which reads something like "Sent 0.5 BTC to bc1q...". Coinbase fills in the sterling value because it is useful as a statement; it is not asserting that a sale happened.
Kraken's ledger does the same with a "withdrawal" row carrying a negative amount and a fee; Binance calls it "Withdraw". The export is describing a debit with a valuation attached, and a naive importer that maps "GBP total plus negative quantity" to "disposal" will book a sale.
The receiving side compounds it. Ledger Live or Etherscan shows an inbound 0.5 BTC with no cost information, and an importer that does not link it to the Coinbase row records an acquisition at market value or at nil cost. Either way there are two errors, not one:
- A phantom disposal on the exchange side, producing a gain (or loss) that never happened.
- A corrupted pool. The 0.5 BTC now sits in your Section 104 pool at the transfer-day price instead of what you paid, which silently changes the gain on every future sale of bitcoin.
Worked example
Emma buys 0.5 BTC on Coinbase in 2023 for £15,000. In August 2025 she sends it to a Ledger when bitcoin is £60,000; the Coinbase row shows a Total of £30,000. In March 2026 she sells the 0.5 BTC for £35,000.
Mis-classified: a disposal in August 2025 with proceeds £30,000, cost £15,000, gain £15,000; then a sale in March 2026 with proceeds £35,000, cost £30,000, gain £5,000. The aggregate happens to be right at £20,000, but £15,000 of it is booked to an event that never occurred, and if the Ledger side had been imported at nil cost the March gain would have been £35,000 and the total £50,000.
Correct: no event in August 2025. One disposal in March 2026, proceeds £35,000, pool cost £15,000, gain £20,000, less the £3,000 annual exempt amount, taxed at 18% or 24% depending on her income.
The audit trail HMRC expects
HMRC will not take "it went to my own wallet" on assertion. From 2027, under the Crypto-Asset Reporting Framework, UK exchanges report transfers to wallet addresses not at another reporting provider, so HMRC's dataset will contain your withdrawals with destination addresses and sterling values. The question about each one is whether it was a disposal, and showing it was not is on you. The CARF guide covers what is reported; the nudge letter guide covers what happens when HMRC's data and your return do not match.
The record-keeping requirements are at CRYPTO10400: for each transaction, the type of token, the date, whether it was a purchase, sale, swap, gift, income or transfer, the number of units, the sterling value, the running total held, and bank statements and wallet addresses. For a self-transfer specifically, hold the following, captured at the time rather than reconstructed later:
- The withdrawal confirmation from the exchange, showing the destination address, amount, fee and timestamp. Save the email and screenshot the withdrawal history page.
- The transaction hash and a block explorer page for it, showing the same amount arriving at the same address.
- Evidence the destination is yours. A dated screenshot of the receiving wallet's account page showing that address: the Ledger Live or Trezor Suite accounts view, or the deposit address page on the receiving exchange. A signed message from the address is stronger still and takes a minute.
- A one-line note in your own records: "22 Sep 2026, 0.5 BTC Coinbase to Ledger, self-transfer, txid ...". Written the same day, it is worth more than anything reconstructed in an enquiry.
Keep these for as long as you hold any of the pool, which in practice means permanently; the records guide explains why.
How the tools handle it
- BittyTax (open-source, UK-specific) uses explicit Deposit and Withdrawal record types and reconciles balances per wallet. A withdrawal with no matching deposit shows up as a balance discrepancy in its audit output rather than being silently treated as a sale. It is the most transparent and the most manual.
- Koinly matches a withdrawal to a deposit when both the exchange and the wallet are connected, by asset, amount and time. Unmatched withdrawals are left for you to label, and their treatment depends on your settings, so a Coinbase-only import with no wallet added is where phantom gains appear.
- CryptoLens matches exchange withdrawal rows against inbound on-chain transfers to any wallet you have added, by asset, quantity net of fee and a timestamp window, and carries the pool cost across unchanged. An unmatched withdrawal is shown as a transfer to review, never booked as a disposal, and the CARF checker lists destination addresses you have not yet claimed as yours.
Whatever the tool, the fix is the same: import both ends. Upload the exchange CSV at cryptolens.uk/import and add the receiving wallet's address, then check the transfers section at /tax shows the self-transfers matched and the pool cost undisturbed. If you only have the exchange side, label the withdrawals rather than deleting them.
Transfers that are not simple self-transfers
- Bridging the same asset between chains is generally a self-transfer; bridging that returns a different wrapped token may be a disposal. See bridging tax in the UK.
- Depositing into a protocol where beneficial ownership passes can be a disposal (CRYPTO61000); depositing to a custodial exchange is not.
This is general information, not personal tax advice.
Frequently asked questions
Is transferring crypto from Coinbase to my Ledger a taxable event in the UK?
No. HMRC's CRYPTO22050 lists sales, swaps, spending and gifts as disposals. A transfer between wallets you own is none of those; beneficial ownership does not change and your Section 104 pool cost is unaffected. Only the network fee is a tiny disposal of the coins used to pay it.
Why does my tax software show a gain on a wallet transfer?
Because the exchange CSV row for a withdrawal carries a sterling value and looks like a sale, and the receiving wallet was either not imported or not linked. Add the receiving wallet so the two sides match, or label the withdrawal as a transfer to your own wallet.
What evidence does HMRC want that a wallet is mine?
The withdrawal confirmation with the destination address, the transaction hash on a block explorer, a dated screenshot of the receiving wallet showing the address as one of your accounts, and a contemporaneous note. A signed message from the address is the strongest single item.
Can I deduct the gas or withdrawal fee on a transfer between my own wallets?
Not against a gain. HMRC CRYPTO22150 treats fees for moving tokens between your own wallets as non-allowable because there is no acquisition or disposal for them to be incidental to. The tokens spent on the fee are themselves a small disposal.
Check which withdrawal addresses are unlinked
Put this knowledge into action with CryptoLens — free to use, no sign-up required.
Open Tool →