Guide · All countries

Moving crypto between your own wallets: why it isn’t a sale, and how to fix mismatches

10 min read Updated By the CryptoTaxOwl team Checked against official sources

Moving crypto from an exchange to your own wallet, or from one exchange to another, isn’t a sale. Tax authorities agree on that. Yet transfers are the single most common reason a crypto tax report shows gains that never happened. The tax rule is simple. The record-keeping is not: each exchange sees only its own half of the move. This guide explains what the authorities say, where network fees fit, how a missing match turns into a phantom gain, and how to fix it without inventing numbers.

Why a transfer to yourself isn’t a sale

A disposal for tax purposes needs you to part with something: you sell it, swap it, spend it or give it away. When you move coins between two wallets that are both yours, you still own them. Nothing has been exchanged and nobody else has received anything. Each authority we cover says this in its own words.

CountryWhat the authority saysSource
United StatesTransferring virtual currency between wallets, accounts or addresses you own is not a taxable event, whether or not you receive an information return.IRS virtual currency FAQs, Q38
United KingdomThere is no disposal if you keep beneficial ownership throughout, for example moving tokens between public addresses you control.HMRC CRYPTO22100
CanadaSome transactions are not a taxable disposition, such as a transfer of crypto-assets between wallets you own.CRA: reporting income from crypto-asset transactions
AustraliaMoving crypto from one wallet to another is not a disposal as long as you keep ownership (check ato.gov.au: we confirmed this through search results because the ATO site blocks automated reading).ATO: crypto asset transactions
GermanyThe BMF letter describes a disposal as a transfer, for consideration, of the asset to a third party (margin number 54). A move between your own wallets involves neither. The letter also asks you to document movements between wallets when you apply a per-wallet method (margin number 103).BMF letter of 6 March 2025

For Germany, the letter doesn’t contain a sentence that says “transfers between your own wallets are not a disposal” in so many words. The row above is our reading of its definition of a disposal, so treat it as that.

One distinction matters in every country: “your own” means you keep ownership. Sending crypto to a spouse, a friend or a business you run is a different event with its own rules, and it isn’t covered here.

Network fees on transfers: where it gets unclear

The transfer itself isn’t taxable, but you usually pay a network fee to make it. If the fee is paid in crypto, a small amount of the asset leaves your hands for good. Whether that counts as a disposal is less settled.

  • United States. The IRS digital assets page lists a transfer between your own wallets as something that doesn’t need a “Yes” on the digital asset question, unless you paid a transaction fee with digital assets, in which case it says this would be a digital asset transaction (IRS: Digital assets). It doesn’t go on to set out how to compute the result.
  • United Kingdom. HMRC says tokens given as a fee on an exchange transaction are themselves disposed of at market value (CRYPTO22280). That page is about fees on trades. We didn’t find HMRC guidance that deals specifically with network fees on a transfer between your own wallets.
  • Australia. ATO guidance, as reported in search results, says that if your holding reduces during a transfer to cover a network fee, the fee is a disposal with capital gains consequences (check ato.gov.au).
  • Canada and Germany. We didn’t find a specific statement on network fees for self-transfers in the CRA crypto-asset pages or the BMF letter. The BMF letter treats transaction fees connected with a sale as deductible costs (margin number 59).

Because the guidance is patchy, CryptoTaxOwl doesn’t pick silently. You choose between two modes, and the mode you chose is printed in the report:

  1. Treat the fee units as a disposal at market value. This is the cautious option. It creates a tiny gain or loss on the fee units.
  2. Treat the fee as non-taxable. The fee units leave your holding and their cost is added to the units that arrived.

For most people the difference is a few cents or pence per transfer. It adds up only if you make hundreds of transfers or pay fees on an expensive network.

How mismatches create phantom gains and missing cost

Every exchange export describes only what happened on that exchange. When you move 1 ETH from Exchange A to Exchange C, Exchange A records a withdrawal and Exchange C records a deposit. Neither knows about the other. A tax report built from those files has to decide what each row means.

Two things go wrong when the rows aren’t paired:

  • The deposit arrives with no cost. Exchange C has no idea what you originally paid. If you then sell, the report has proceeds but no cost to set against them. Treat the cost as zero and the whole sale price becomes “gain”. That’s the phantom gain.
  • The withdrawal looks like it vanished. On Exchange A, the coins left and never came back. Some tools treat that as a disposal with no proceeds, which can create a phantom loss. Others ignore it, so the original cost is stranded in an account that no longer holds anything.

Either way the totals are wrong, and usually they’re wrong in a direction that costs you money. The fix is to tell the report that the two rows are one movement between your own accounts. The cost and acquisition date then travel with the coins.

Worked example: one unmatched transfer

Worked example: a $1,996 phantom gain

You buy 1 ETH on Exchange A for $2,000. Later you withdraw it to Exchange C. The network takes 0.002 ETH as a fee, so 0.998 ETH arrives twenty minutes later. At the time of the transfer ETH is worth $2,500. A few weeks later you sell the 0.998 ETH on Exchange C for $3,000. Fees on the purchase and sale are ignored to keep the arithmetic clear.

Unmatched. Exchange C sees a deposit of 0.998 ETH with no cost. If the cost is taken as zero, the sale shows a gain of $3,000 − $0 = $3,000.

Matched, fee treated as non-taxable. The full $2,000 cost moves with the coins, because the cost of the fee units is added to the units that arrived. Gain: $3,000 − $2,000 = $1,000.

Matched, fee treated as a disposal. The 0.998 ETH that arrived carries 0.998 × $2,000 = $1,996 of cost, so the sale gain is $3,000 − $1,996 = $1,004. The 0.002 ETH fee is disposed of at market value: proceeds 0.002 × $2,500 = $5, cost 0.002 × $2,000 = $4, gain $1. Total gain: $1,005.

Result. The unmatched report overstates the gain by about $2,000. The two fee modes differ by $5.

The same logic applies in pounds, Canadian or Australian dollars or euros. With only one purchase involved, the UK pool and the Canadian average cost give the same $2,000 cost here. With several purchases the cost per unit would come from the pool or average instead (see our guide to cost basis methods).

How CryptoTaxOwl suggests matches

When you load files into the crypto tax calculator, it looks for withdrawals from one account that line up with deposits into another. A pair is suggested only when all of these hold:

  • Same asset, after normalising symbols (so “XBT” and “BTC” are recognised as the same coin).
  • Timing: the deposit lands between one hour before the withdrawal (to allow for clocks on different exchanges disagreeing) and 72 hours after it.
  • Amount: the deposit is no more than the withdrawal and no more than 2% less, which allows for a network fee. If the export states the fee, the withdrawal minus that fee also counts.
  • Hash: if both rows carry a transaction hash and the hashes are equal, the match is certain.

Each suggestion is graded certain (same hash), high (a single candidate, less than 0.5% difference, under six hours apart) or medium (everything else). It comes with a plain reason, such as “Same asset, 0.15% less arrived, 22 minutes later, likely a network fee.”

Nothing is merged behind your back. You accept or reject each suggestion, or bulk-accept the certain and high ones. Certain matches are pre-accepted because identical hashes prove they are the same transfer, but they stay visible and you can undo them. Everything you accept is listed in the report.

If you sent coins to a wallet you haven’t imported, such as a hardware wallet, mark the withdrawal as Transfer to a wallet I own (not imported). It is treated as non-taxable and its cost is held in a virtual account. A later deposit of the same asset can draw on that cost.

Four ways to fix a deposit with unknown cost

Any deposit that isn’t matched goes into the review queue as missing cost basis. It is never filled in silently. You have four options:

OptionUse it whenEffect
Match to a withdrawalThe coins came from another account of yoursCost and acquisition date carry over; no tax on the move
Mark as incomeIt was a reward, payment or airdropValued at market value on receipt, where your country treats it as income; that value usually becomes the cost (see our staking and airdrops guide)
Enter the purchase costYou bought it somewhere you haven’t importedYour figure is used as the cost; keep the evidence
Assume zero costYou genuinely can’t find the costCautious: it can only overstate a gain. Every case is counted and listed in the report

If you leave items unresolved, the report doesn’t block you. Before you download, it asks you to confirm the zero-cost assumption for the number of items left. We chose that over blocking because a hard stop pushes people to invent figures, and an invented cost is worse than a stated, cautious assumption.

United States: per-wallet basis from 2025

From 1 January 2025, US final regulations apply the specific identification and first-in, first-out rules to units held within a single wallet or account, rather than across all your holdings. Rev. Proc. 2024-28 explains this and gives a safe harbour for allocating your remaining basis to each wallet as of that date.

That makes transfers matter more. When you move coins from wallet A to wallet B, the specific lots that leave A arrive in B with their original acquisition dates and basis. The US crypto tax calculator moves lots in first-in, first-out order within the source wallet unless you’ve chosen specific identification. The holding period is preserved. A coin bought in 2023 and sold from a different wallet in 2025 can still be long-term, since the IRS treats a holding of more than one year as long-term (IRS Topic 409). If the transfer isn’t matched, the receiving wallet has no lot to draw on, and the sale may be reported with the wrong basis and the wrong holding period.

In the UK, transferred tokens stay in the same Section 104 pool, because the pool is per token type, not per wallet (CRYPTO22200). The UK crypto tax calculator works this way, so a matched transfer changes nothing in your pool.

Honest limits

  • We can’t see wallets you don’t import. The matcher works only with the rows you give it. A transfer through a wallet you haven’t imported will look one-sided until you mark it.
  • Bridges and cross-chain moves are excluded by default. HMRC says whether a swap-like transfer between different blockchains is a disposal “will depend on the facts” (CRYPTO22110). Rows that look like bridges are flagged as unsupported activity and left out unless you choose to include them.
  • Suggestions can be wrong. Two deposits of a similar size in the same window can produce a medium-confidence guess. Check those against your wallet history before you accept.
  • Fee treatment is your choice. We print the mode you used, but we can’t tell you which one your tax authority would accept in an unclear case.

If your history includes large unexplained deposits, or transfers to people other than yourself, speak to a qualified adviser before you file.

Sources

  1. Frequently asked questions on virtual currency transactions (Internal Revenue Service), retrieved 7 October 2026
  2. Digital assets (Internal Revenue Service), retrieved 7 October 2026
  3. Rev. Proc. 2024-28: Guidance for taxpayers to allocate basis in digital assets to wallets or accounts as of January 1, 2025 (Internal Revenue Service), retrieved 7 October 2026
  4. Topic no. 409, Capital gains and losses (Internal Revenue Service), retrieved 7 October 2026
  5. CRYPTO22100 – Cryptoassets for individuals: Capital Gains Tax: what is a disposal (HMRC), retrieved 7 October 2026
  6. CRYPTO22110 – Cryptoassets for individuals: Capital Gains: Transferring tokens between distributed ledgers (HMRC), retrieved 7 October 2026
  7. CRYPTO22200 – Cryptoassets for individuals: Capital Gains Tax: pooling (HMRC), retrieved 7 October 2026
  8. CRYPTO22280 – Cryptoassets for individuals: Capital Gains Tax: Fees satisfied in tokens (HMRC), retrieved 7 October 2026
  9. Reporting income from crypto-asset transactions (Canada Revenue Agency), retrieved 7 October 2026
  10. Crypto asset transactions (Australian Taxation Office), retrieved 7 October 2026
  11. Einzelfragen zur ertragsteuerrechtlichen Behandlung bestimmter Kryptowerte (Bundesministerium der Finanzen, letter of 6 March 2025), retrieved 7 October 2026

Frequently asked questions

Is moving crypto from an exchange to my own wallet taxable?

Not in itself, in any of the five countries covered here, as long as you own both ends. The IRS, HMRC, the CRA and the ATO all say so in their published guidance, and the German BMF letter describes a disposal as a transfer for consideration to a third party. A network fee paid in crypto on the way is a separate question; see the section on network fees above.

Why does my report show a big gain I never made?

The most common cause is a deposit with no cost attached. If an exchange only sees crypto arriving, a later sale looks as if it had zero cost, so the whole sale price shows up as gain. Matching that deposit to the withdrawal it came from restores the original cost. The crypto tax calculator lists every such deposit in its review queue.

Does CryptoTaxOwl merge transfers automatically?

No. It suggests pairs and explains why, and nothing changes until you accept. The only exception is a pair whose transaction hashes are identical: those are pre-accepted because the hash proves they are the same transfer, but they stay visible and you can undo them.

What if I moved crypto to a wallet I haven’t imported?

Mark the withdrawal as Transfer to a wallet I own (not imported). It is treated as non-taxable and the cost stays with you under a virtual account, so a later deposit of the same asset can draw on it.

Is “assume zero cost” safe?

It is the cautious choice when you genuinely can’t find the cost, because it can only overstate a gain, never understate it. It can still mean you report more gain than you made. The report counts and lists every zero-cost assumption so you, or an adviser, can revisit them.

Do I need to import every wallet I own?

It helps. Each wallet you import lets the matcher see both sides of a transfer. If a wallet only ever sent and received your own crypto, you can instead mark its transfers as going to a wallet you own. Use the CSV converter if a wallet’s export isn’t in a format the calculator reads.

This guide explains the rules in general terms. It isn’t tax advice. Spotted something out of date? Email errors@cryptotaxowl.com and we’ll check it against the source.