UTXO Recovery: How to Find and Recover Missing Bitcoin
Bitcoin doesn't work like a bank account. Your balance is a collection of UTXOs — individual unspent outputs scattered across your addresses. When some go missing, here's what's actually happening and how to get them back.
What Is a UTXO?
UTXO stands for Unspent Transaction Output. It is the fundamental unit of value in the Bitcoin protocol.
When someone sends you Bitcoin, the network doesn't update an account balance somewhere. Instead, the transaction creates an output — a specific amount of Bitcoin locked to your address with a cryptographic script. That output remains "unspent" until you use it in a future transaction.
Your wallet "balance" is simply the sum of all UTXOs locked to addresses your wallet controls. If your wallet knows about 3 UTXOs:
- 0.05 BTC at address
bc1q...abc(index 3) - 0.12 BTC at address
bc1q...def(index 7) - 0.03 BTC at address
bc1q...ghi(index 45)
Your balance shows as 0.20 BTC. But if the wallet only scans up to index 20 (the gap limit), it finds the first two UTXOs but misses the third. Your displayed balance: 0.17 BTC. The 0.03 BTC UTXO exists on the blockchain — it's just invisible to the wallet.
UTXOs vs. Account Balances
Bitcoin uses a UTXO model, not an account model. Ethereum, traditional banks, and most payment systems use accounts with running balances. Bitcoin tracks individual outputs. This distinction matters for recovery because a "missing" balance usually means the wallet hasn't found all your UTXOs — not that Bitcoin has disappeared.
How UTXOs Are Created
Every Bitcoin transaction has inputs and outputs:
- Inputs reference and spend previous UTXOs (proving you own them with a signature)
- Outputs create new UTXOs locked to destination addresses
When you send 0.1 BTC to someone but your UTXO is worth 0.15 BTC, the transaction creates two outputs:
- 0.1 BTC to the recipient's address (their new UTXO)
- ~0.0499 BTC back to your change address (your new UTXO, minus the transaction fee)
This change mechanism is crucial for understanding UTXO recovery. Change addresses are generated on the internal chain (m/1/*) of your HD wallet, and the gap limit applies there too. If many transactions create change at high address indices, those change UTXOs can fall beyond the gap.
Why UTXOs Go Missing
UTXOs don't actually go missing from the blockchain. They go missing from your wallet's view. The most common causes:
1. Address Gap Limit
The most frequent cause. Your HD wallet stops scanning after 20 consecutive empty addresses (the gap limit). Any UTXOs at higher indices are invisible. This is the primary problem GapFix solves.
2. Change Address Gap
After spending Bitcoin, change is sent to a new change address on the internal chain. If your wallet made many transactions, the change address index can climb high. When restoring the wallet, the gap limit on the internal chain may cut off some change UTXOs.
3. Wallet Migration
Switching from Wallet A to Wallet B using the same seed. Wallet B starts scanning from scratch and may not reach all the addresses that Wallet A had used, especially if Wallet A had a higher gap limit or used non-standard derivation.
4. Different Derivation Standards
Your seed phrase can derive addresses using different BIP standards:
| Standard | Path | Address Type | Prefix |
|---|---|---|---|
| BIP-44 | m/44'/0'/0' |
Legacy P2PKH | 1... |
| BIP-49 | m/49'/0'/0' |
Wrapped SegWit P2SH | 3... |
| BIP-84 | m/84'/0'/0' |
Native SegWit P2WPKH | bc1q... |
| BIP-86 | m/86'/0'/0' |
Taproot P2TR | bc1p... |
If your old wallet used BIP-44 (legacy addresses) but your new wallet defaults to BIP-84 (native SegWit), the new wallet may only scan the BIP-84 path and miss UTXOs on the BIP-44 path entirely. GapFix scans all four types automatically to catch this.
5. Dust UTXOs
Very small UTXOs (below 546 or 294 satoshis depending on address type) are considered "dust" by the Bitcoin network and some wallets hide or refuse to spend them. While not technically missing, they may not appear in your balance.
How to Recover Missing UTXOs
Method 1: Scan Beyond the Gap Limit
The fastest approach for gap-limit-related UTXO recovery:
- Get your extended public key (xpub, ypub, or zpub) from your wallet settings
- Paste it into GapFix — it scans 1,000+ addresses on both external and internal chains, across all four address formats
- GapFix identifies exactly which UTXOs are beyond the gap and which addresses need dust
- Send dust (294–546 sats) to each gap address
- Rescan your wallet — all UTXOs become visible
For the full step-by-step process, see: How to Fix Bitcoin Wallet Showing 0 Balance
Method 2: Increase Wallet Gap Limit
If your wallet supports it, increasing the gap limit directly is another option:
- Electrum: Console command
wallet.change_gap_limit(100) - Sparrow: Preferences → Gap Limit
Downside: this is wallet-specific. If you later switch wallets, you'll need to increase the limit again or use the dust fix.
Method 3: Full Node Rescan
If you run a Bitcoin full node (Bitcoin Core), you can import your xpub with a high gap limit:
bitcoin-cli importdescriptors '[{"desc": "wpkh([fingerprint/84h/0h/0h]xpub.../0/*)#checksum", "range": [0, 1000], "timestamp": "now"}]'
This bypasses the standard gap limit entirely and checks indices 0–1000. It requires running a fully synced Bitcoin Core node.
UTXO Management Best Practices
Good UTXO management prevents recovery headaches:
- Consolidate periodically. If you have many small UTXOs spread across high-index addresses, consolidate them into a single UTXO at a low-index address during low-fee periods. This makes future wallet restores reliable.
- Avoid excessive address generation. Only generate new receive addresses as needed. Pre-generating dozens of addresses is the primary cause of gap limit issues.
- Use consistent wallet software. Switching between wallets frequently increases the chance of gap issues.
- Document your setup. Record which derivation paths your wallet uses (BIP-44, 49, 84, or 86) and whether you've set a custom gap limit. This information is invaluable if you ever need to restore.
- Verify after restoration. After restoring a wallet from seed, scan your xpub with GapFix to confirm no UTXOs are hiding beyond the gap.
UTXO Privacy Considerations
UTXO management also has privacy implications. Each UTXO is linked to a specific address, and when you spend multiple UTXOs in one transaction, blockchain analysis can link those addresses to the same wallet.
Tools like coin control (available in Electrum, Sparrow, and Wasabi) let you choose exactly which UTXOs to spend, giving you more control over your on-chain privacy. This is worth understanding when doing UTXO recovery — after recovering hidden UTXOs, consider how you consolidate them.
Frequently Asked Questions
What is a UTXO in Bitcoin?
A UTXO (Unspent Transaction Output) is the fundamental unit of Bitcoin balance. When someone sends you Bitcoin, they create a UTXO locked to your address. Your wallet balance is the sum of all UTXOs it knows about.
Can lost UTXOs be recovered?
If you still have the private keys (or seed phrase) that control the addresses holding the UTXOs, then yes. UTXOs are never lost from the blockchain — they just become invisible to wallets that don't scan far enough. The dust fix or increasing the gap limit makes them visible again.
How do I find UTXOs hidden beyond the gap limit?
Use GapFix to scan your extended public key beyond the standard 20-address gap limit. It checks up to 1,000+ addresses on each chain across all four address formats, identifying any hidden UTXOs and the gap addresses that need dust.
What's the difference between a UTXO and a Bitcoin address?
An address is where Bitcoin is sent to. A UTXO is the actual Bitcoin value sitting at that address. One address can have multiple UTXOs (if it received Bitcoin multiple times), and an address with a spent UTXO and no new incoming transactions has a zero balance. Your wallet tracks UTXOs, not addresses, when calculating your balance.