How to Import a Bitcoin Wallet for Taxes: Addresses, xpub and Missing History
Published on April 14, 2026 - 9 min read

Table of Contents
Overview
Someone copies their Bitcoin address out of their wallet, pastes it into a tax tool, and gets back four transactions and a balance of zero. They have been using that wallet for three years and it currently holds coins. Nothing is broken.
This is the single most confusing thing about Bitcoin tax imports, and it is not a bug in anyone's software. It is how Bitcoin wallets are designed to work. A modern Bitcoin wallet is not one address — it is a tree of thousands of them, and the address shown in the interface is only the most recent leaf.
If you import Bitcoin, Litecoin or Dogecoin by address, you are almost certainly importing a fraction of your history. This article explains why, and what to import instead.
Bitcoin Does Not Have Accounts
Ethereum has accounts with balances. You have one address, it holds a number, and that number goes up and down. It is intuitive, which is why most people assume Bitcoin works the same way.
Bitcoin does not track balances at all. It tracks unspent outputs — discrete chunks of coin, each locked to an address. Your "balance" is software adding up every chunk your wallet can unlock.
Crucially, a Bitcoin transaction consumes whole chunks. If you hold one output worth 0.5 BTC and want to send 0.1 BTC, the protocol spends the entire 0.5 and creates two new outputs: 0.1 to the recipient, and roughly 0.4 back to you. That 0.4 is called change.
Change Addresses Are Where Your History Goes
Your change does not return to the address you sent from. It goes to a brand new address, generated by your wallet, that you have never seen and will never be shown.
Wallets do this for privacy. If change returned to the sending address, anyone could follow your entire financial life by watching one string. Instead, each wallet derives an effectively unlimited supply of addresses from your seed phrase, splitting them into two branches: one for receiving, one for change.
The consequence for tax reporting is direct. After your first outgoing payment, your coins are sitting on an address that is not the one you copied. Import that one address and you will see:
- the deposits that happened to land on it;
- the transaction where you spent from it;
- and then nothing, forever, because everything afterwards happened on addresses derived later.
The balance reads zero. The wallet says otherwise. Both are telling the truth about different things.
The Extended Public Key
The fix is to import the branch rather than the leaf.
An extended public key — the string beginning xpub, ypub or zpub — is the parent from which all your addresses are derived. Give a tax tool the extended public key and it can generate every receive address and every change address in the account, then read the history of all of them, in order.
That is what an extended public key is for. It is a read-only credential, and this distinction matters:
- an extended public key can derive addresses and read history;
- it cannot sign transactions or move funds;
- it does reveal your full balance and transaction history to whoever holds it, which is a privacy consideration, not a security one.
Your seed phrase and private keys are a different thing entirely. No tax tool ever needs them, and any service that asks for them should be closed immediately.
Which Prefix Do You Have?
The prefix tells you which address format the account uses. You may have several accounts in one wallet using different formats, especially if you have been holding since before 2018.
| Prefix | Address format | Addresses look like |
|---|---|---|
xpub | Legacy | 1... |
ypub | Wrapped SegWit | 3... |
zpub | Native SegWit | bc1q... |
Litecoin and Dogecoin follow the same design with their own prefixes — Litecoin commonly uses Ltub or Mtub, Dogecoin uses dgub — and the same rule applies: import the extended key, not an address.
If your wallet offers several accounts, each has its own extended public key. Export all of them. An old legacy account you stopped using in 2019 still holds the acquisition history behind coins you later consolidated and sold.
Import a Bitcoin wallet
Where to Find It
The export lives in different places depending on your wallet, and it is usually described as an account-level detail rather than something prominent.
- Ledger Live — open the account, then the account settings, and look for the extended public key or account details.
- Trezor Suite — account details include the public key (XPUB), with an option to show or export it.
- Electrum — Wallet, then Information; the master public key is displayed there.
- Sparrow — the account's settings display the extended public key alongside the derivation path.
If your wallet does not expose one at all, it is likely a single-address wallet or a custodial account, and importing the addresses individually is the correct approach. In that case, list every address the wallet has ever shown you, not just the current one.
Why This Matters for the Numbers
Missing history does not just produce a short list. It produces wrong tax figures, and it does so quietly.
Consider a straightforward case. You bought 0.5 BTC in 2021, moved it around your own wallet twice over the following years, and sold it in 2026. If the import only captures the sale, the report has proceeds and no acquisition. Depending on how the gap is handled, that either produces a gain calculated against a cost of nothing — massively overstating what you owe — or an unexplained hole that has to be resolved before you can file.
The reverse also happens. Consolidating several small outputs into one looks, to an incomplete import, like coins arriving from an unknown source. It is not a disposal and it is not income, but it needs the surrounding history to be recognisable as neither.
This is the same class of problem as a missing exchange account, and it has the same fix: import the complete source. Finding missing transactions in a tax report covers how to spot the gaps.
Check your transaction history
Fees, Consolidation and Self-Transfers
Bitcoin's model creates two events that people do not expect to see in a tax record.
Consolidation. Sweeping many small outputs into one is a transaction on the blockchain, but beneficial ownership never changes. It is not a disposal. It will, however, appear in your imported history and should be recognised as an internal movement.
Fees. Every transaction pays a network fee in BTC, and paying it disposes of that small amount. HMRC lists transaction fees paid for having a transaction included on the distributed ledger among allowable costs. For someone who consolidates often, or who transacted during a period of high fees, this is not a trivial sum.
Neither of these is optional detail. They are part of what makes the arithmetic come out right.
An Import Checklist
Before generating a report that includes Bitcoin activity, confirm:
- you imported extended public keys, not individual addresses;
- every account in the wallet is covered, including old formats you no longer use;
- Litecoin and Dogecoin accounts got the same treatment;
- the exchanges you bought from or sold to are connected;
- your imported balance matches what your wallet shows.
That last one is the useful test. If the numbers agree, your history is probably complete. If they do not, a balance mismatch usually has a short list of causes.
Conclusion
Bitcoin's privacy design and its tax reporting requirements pull in opposite directions. The wallet works hard to make sure no single string reveals your activity, and then reporting asks you to produce exactly that.
The extended public key is the answer to both. It stays read-only, it cannot spend, and it captures the complete history that an individual address structurally cannot. Import that, check your balance agrees, and the Bitcoin side of your report stops being guesswork.
Import by extended public key
Official Resources
- HMRC: allowable expenses for cryptoassets (CRYPTO22150)
- HMRC: what is a disposal (CRYPTO22100)
- BIP 32: hierarchical deterministic wallets
- BIP 84: derivation scheme for native SegWit accounts
This article provides general information and is not tax advice. Never share a seed phrase or private key with any service, including a tax tool.
Keep reading
How to Do Your Ledger Crypto Taxes: Import Every Chain From One DeviceA Ledger device holds coins on many separate blockchains at once. Here is how to import all of them for crypto tax reporting without losing history.
How to Do Your Solana and Phantom Crypto Taxes: Staking, Airdrops and SPL TokensSolana wallets generate hundreds of small reward receipts and a pile of airdropped tokens. Here is how each is treated and how to import them for tax.
How to Do Your MetaMask Crypto Taxes: One Address, 14 NetworksYour MetaMask address is identical on every EVM network, but each network keeps its own history. Here is how to import all of them for tax reporting.
Are Crypto Gas Fees Tax Deductible? Failed Transactions, Approvals and On-Chain CostsHMRC allows some crypto transaction fees as costs and refuses others. Here is what the guidance actually says about gas, swaps, approvals and failed transactions.
Does Your Crypto Exchange Report You to the Tax Office? CARF and DAC8 ExplainedFrom 1 January 2026 crypto platforms collect and report user and transaction data automatically. Here is what CARF and DAC8 cover, and the dates that matter.
API Import or CSV Upload: Which Crypto Tax Workflow Fits You?Compare API imports and CSV uploads for crypto tax records, including completeness, security, sync workflow, and current CryptoTaxBridge support.