Transfer Matching: automatic recognition of internal transfers

Moving crypto between your own wallets or exchanges is not a taxable event. Our smart matching recognizes these transfers automatically, preserves your original cost basis and prevents you from paying tax on gains that do not exist.

Start a free scan
Capital gains tax 2026: The capital gains tax law was approved by the Chamber on 3 April 2026. Since 1 January 2026 you pay 10% on crypto capital gains above €10,000/year. Cryptotax calculates this automatically. More info →

What is transfer matching?

When you move crypto between your own wallets or exchanges, this is not a sale. But without correct matching it can look like two separate transactions: a "sale" in one place and a "purchase" in another. This can lead to phantom gains in your capital gain calculation.

The problem

Without matching you see 0.5 ETH leave Kraken and 0.5 ETH appear in MetaMask. Software that does not understand this reports it as a sale followed by a purchase, which results in phantom gains and an incorrect cost basis.

Our solution

Cryptotax analyzes timestamps, amounts and blockchain data across all your connected accounts. When we find a match between outgoing and incoming transactions, we automatically link them as a non-taxable internal transfer.

Cost basis preservation

Your original purchase price and holding period stay intact. This means that when you do sell later, your capital gain is calculated correctly based on your real purchase moment.

Cross-account intelligence

Whether you move from exchange to wallet, wallet to wallet, or via a bridge to another chain, our engine recognizes the pattern and prevents double bookkeeping.

Why transfer matching is crucial for your tax return

Without correct transfer matching you may pay tax on gains that never existed. Here you see the difference.

Prevent phantom gains

Suppose you bought 1 ETH for 1,000. You move it to another wallet when ETH is worth 2,000. Without matching this looks like a sale with a 1,000 gain, even though you sold nothing.

Example

Without matching: 1,000 taxable capital gain

With matching: 0 taxable capital gain

Cost basis protection

If the transfer is seen as sale plus purchase, your new cost basis becomes the current market price. Sell later with a real gain? You report too little or too much.

Example

Without matching: new cost basis 2,000

With matching: original cost basis 1,000 preserved

Holding period intact

In some jurisdictions the holding period is relevant for tax rates. A transfer should not reset your holding period.

Bridge transactions

Cross-chain bridges move your crypto from, for example, Ethereum to Arbitrum. This is the same coin on another chain, not a sale. We recognize this pattern.

Exchange withdrawals

When you withdraw crypto from an exchange to your own wallet, this is not a sale. Our matching links the exchange withdrawal to the wallet receipt.

Multi-wallet consolidation

Use multiple wallets? Transfers between your own addresses are automatically recognized and correctly reported as internal movements.

How does our transfer matching work?

Our engine combines several data points to determine with confidence whether two transactions belong together.

1

Timestamp analysis

We look for outgoing and incoming transactions within a logical time window. Exchange withdrawals can sometimes take hours, while blockchain transfers are faster.

2

Amount matching

The sent and received amount must match, taking transaction costs into account (gas fees, network fees).

3

Asset verification

We check that the same asset is being moved. ETH to ETH, USDC to USDC. Including wrapped variants and cross-chain equivalents.

4

Blockchain data

On-chain data such as transaction hashes and contract interactions is analyzed to recognize bridge patterns and direct transfers.

Supported scenarios

Transfer matching works automatically for these common situations.

Exchange to wallet

  • Kraken withdrawal to MetaMask
  • Coinbase to hardware wallet
  • Any exchange to any address

Wallet to wallet

  • MetaMask to Ledger
  • Between your own addresses
  • Hot wallet to cold storage

Cross-chain bridges

  • Ethereum to Arbitrum
  • Ethereum to Base
  • Via Hop, Across, Stargate, etc.

Wallet to exchange

  • Deposit for trading
  • Staking via an exchange
  • Any wallet to an exchange

Frequently asked questions

Do I have to connect all my wallets?

For optimal matching we recommend connecting all your wallets and exchanges. That way we can correctly recognize and link transfers between all your accounts.

What if a transfer is not matched?

Sometimes a transfer cannot be recognized automatically, for example if the receiving wallet is not connected. In that case we flag the transaction and you can confirm the match manually.

How does this handle gas fees?

Gas fees are booked separately as a transaction cost. The net received amount (after deducting fees) is matched with the outgoing transaction.

Does this also work for NFT transfers?

Yes, NFT transfers between your own wallets are also recognized as internal movements and not as a sale or purchase.

What if I also swap via a bridge?

Some bridges offer swap functionality. If you send ETH and receive USDC, this is a taxable event. Our engine recognizes this difference.

How reliable is the matching?

We use strict criteria to prevent false positives. Only when we have enough data points that match is a transfer marked as internal.

Ready to report your transfers correctly?

Start today with a free scan. Connect all your wallets and exchanges and see right away how transfer matching simplifies your tax return.

Get started for free with Cryptotax