Skip to main content
seedrecover.py takes a seed phrase with one or more mistakes and searches for the correct seed. It is designed for situations where you have an intact physical seed backup but it produces an empty wallet or throws an “invalid seed” error — indicating a transcription mistake.

What you need

Before starting, gather:
  1. Your best guess at the seed phrase — even with mistakes, you need most of the words.
  2. One of the following to verify candidate seeds against:
    • An Electrum wallet file, or
    • Your master public key (xpub), or
    • A receiving address generated by the wallet (earlier addresses are better), or
    • An Address Database if you have none of the above.

Automatic search phases

When you run seedrecover.py with default settings, it automatically runs four search phases in order:
  1. Single typo — one word has a typo (wrong letters within the same word)
  2. Two typos, one wrong word — two typos, one of which could be a completely wrong BIP-39 word
  3. Three typos, one wrong word — three typos, one could be a completely wrong BIP-39 word
  4. Two wrong words — two of your words could be completely different BIP-39 words
The full four-phase search typically completes within a few hours for a 12-word seed.
1

Run seedrecover.py

Option 1 — GUI (easiest): Double-click seedrecover.py. On macOS, first rename it to seedrecover.command. A series of dialog boxes will guide you through selecting your wallet type, entering your xpub or address, and entering your seed guess.Option 2 — Command line: Open a terminal in the BTCRecover directory and run:
python seedrecover.py --wallet-type bip39 --addrs YOUR_ADDRESS --mnemonic "word1 word2 word3 ..." --addr-limit 10
Replace YOUR_ADDRESS with a receiving address from your wallet, and fill in your seed words — including your best guess at any words you are unsure about.
The --addr-limit argument controls how many addresses per account BTCRecover generates to check. If your receiving address was the 7th address you ever created, use at least --addr-limit 10 to be safe. A higher limit is slower but less likely to miss the seed.
2

Wait for results

BTCRecover displays a progress bar with an ETA. The four automatic phases run back to back. If the correct seed is found, it is printed to the terminal:
Seed found: 'element entire sniff tired miracle solve shadow scatter hello never tank side sight isolate sister uniform advice pen praise soap lizard festival connect'
If no seed is found after all phases, the search ends without a result. You may need to reconsider which words are wrong, or use additional options to expand the search.

Example commands

The commands below use test addresses that ship with BTCRecover. They find a result immediately and are safe to run as-is.

Bitcoin (BIP-39)

One missing word, Native Segwit address, address generation limit of 5:
python seedrecover.py --wallet-type bip39 --addrs bc1qv87qf7prhjf2ld8vgm7l0mj59jggm6ae5jdkx2 --mnemonic "element entire sniff tired miracle solve shadow scatter hello never tank side sight isolate sister uniform advice pen praise soap lizard festival connect" --addr-limit 5
One missing word, P2SH Segwit address:
python seedrecover.py --wallet-type bip39 --addrs 3NiRFNztVLMZF21gx6eE1nL3Q57GMGuunG --mnemonic "element entire sniff tired miracle solve shadow scatter hello never tank side sight isolate sister uniform advice pen praise soap lizard festival connect" --addr-limit 5

Cardano (Shelley)

Seed from a Ledger Nano, one missing word, using a base address:
python seedrecover.py --wallet-type cardano --addrs addr1qyr2c43g33hgwzyufdd6fztpvn5uq5lwc74j0kuqr7gdrq5dgrztddqtl8qhw93ay8r3g8kw67xs097u6gdspyfcrx5qfv739l --mnemonic "wood blame garbage one federal jaguar slogan movie thunder seed apology trigger spoon basket fine culture boil render special enforce dish middle antique"
Seed from Yoroi, Adalite, or Daedalus (software wallet), using a stake address:
python seedrecover.py --wallet-type cardano --addrs stake1uxztdzzm4ljw9a0qmgregc8efgg56p2h3kj75kc6vmhfj2cyg0jmy --mnemonic "cave table seven there limit fat decorate middle gold ten battle trigger luggage demand"

Ethereum Validator seeds

Use the validator’s public key (signing key) in place of an address:
python seedrecover.py --mnemonic "spatial evolve range inform burst screen session kind clap goat force x" --addrs 869241e2743379b6aa5e01138d410851fb2e2f3923ccc19ca78e8b14b01d861f67f95e2e6b3be71a11b251680b42dd81 --wallet-type ethereumvalidator --addr-limit 1

Electrum (Legacy seeds)

One wrong word, Electrum V1 seed, address generation limit of 2:
python seedrecover.py --wallet-type electrum1 --addrs 1Pw1yjF5smzg6eWbE2LbFm7fr1zq7WUYc7 --mnemonic "milk hungry group sound Lift Connect throw rabbit gift leg new lady pie government swear flat dove imagination sometime prepare lot trembl alone bus" --addr-limit 2

LND aezeed wallets

One missing word, address generation limit of 5. Add --passphrase-arg "YOUR PASSPHRASE" if your seed uses a custom passphrase:
python seedrecover.py --wallet-type aezeed --addrs 1Hp6UXuJjzt9eSBa9LhtW97KPb44bq4CAQ --mnemonic "absorb original enlist once climb erode kid thrive kitchen giant define tube orange leader harbor comfort olive fatal success suggest drink penalty chimney" --addr-limit 5

Polkadot (Substrate)

One missing word, blank derivation path:
python seedrecover.py --wallet-type polkadotsubstrate --addrs 13SsWBQSN6Se72PCaMa6huPXEosRNUXN3316yAycS6rpy3tK --mnemonic "toilet assume drama keen dust warrior stick quote palace imitate music disease"
One missing word, with a hard/soft derivation path and passphrase:
python seedrecover.py --wallet-type polkadotsubstrate --addrs 12uMBgecqfkHTYZE4GFRx847CwR7sfs2bTdPbPLpzeMDGFwC --mnemonic "toilet assume drama keen dust warrior stick quote palace imitate music disease" --passphrase-arg btcr-test-password --substrate-path //hard/soft

Helium

One missing word:
python seedrecover.py --wallet-type helium --addrs 13hP2Vb1XVcMYrVNdwUW4pF3ZDj8CnET92zzUHqYp7DxxzVASbB --mnemonic "arm hundred female steel describe tip physical weapon peace write advice"

Stellar (XLM)

One wrong word, address generation limit of 2:
python seedrecover.py --mnemonic "doctor giant eternal huge improve suit service poem logic dynamic crane summer exhibit describe later suit dignity ahead unknown fall syrup mirror nurse" --addrs GAV7E2PHIPDS3PM3BWN6DIHC623ONTZUDGXPJ7TT3EREYJRLTMENCK6Z --addr-limit 2 --no-eta --wallet-type xlm

Tron

One missing word:
python seedrecover.py --wallet-type tron --addrs TLxkYzNpMCEz5KThVuZzoyjde1UfsJKof6 --mnemonic "have hint welcome skate cinnamon rabbit cable payment gift uncover column duck scissors wedding decorate under marine hurry scrub rapid change roast print arch" --addr-limit 1

Stacks

One missing word, checks the first 10 accounts:
python seedrecover.py --wallet-type stacks --addrs SP11KHP08F4KQ06MWESBY48VMXRBK5NB0FSCRP779 --mnemonic "hidden kidney famous rich season gloom husband spring convince attitude boy" --addr-limit 10

SLIP-39 share recovery

Fix a damaged SLIP-39 share (up to 2 typos):
python seedrecover.py --slip39 --mnemonic "hearing echo academic acid deny bracelet playoff exact fancy various evidence standard adjust muscle parcel sled crucial amazing mansion losing" --typos 2
Recover a share with one missing word:
python seedrecover.py --slip39 --mnemonic "hearing echo academic acid deny bracelet playoff exact fancy various evidence standard adjust muscle parcel sled crucial amazing mansion" --big-typos 2

Useful options

OptionDescription
--wallet-type TYPESpecify wallet type: bip39, electrum2, cardano, tron, xlm, polkadotsubstrate, etc.
--addrs ADDRESSA receiving address from the wallet (space-separated for multiple)
--addr-limit NNumber of addresses to generate per account for checking (default: 1)
--mnemonic "WORDS"Your best guess at the seed phrase
--passphrase-arg PASSBIP-39 passphrase (25th word), if applicable
--big-typos NAllow up to N completely wrong BIP-39 words (slow — use sparingly)
--typos NAllow up to N character-level typos per word
--substrate-path PATHDerivation path for Polkadot/Substrate wallets
--no-etaSuppress ETA display (useful for some wallet types)
If you do not have any address or xpub from your wallet, you can create an Address Database from the blockchain. There is no significant performance penalty — it just requires some setup time.
For a full explanation of search strategies, supported derivation paths, and advanced options, see seed recovery overview.

Build docs developers (and LLMs) love