{"id":13585869,"url":"https://github.com/esneider/indy","last_synced_at":"2026-03-11T21:46:56.849Z","repository":{"id":65696989,"uuid":"266217245","full_name":"esneider/indy","owner":"esneider","description":"🕵️‍♂️ Find and sweep all the funds spendable by your bitcoin private key.","archived":false,"fork":false,"pushed_at":"2024-08-17T01:03:46.000Z","size":4851,"stargazers_count":66,"open_issues_count":2,"forks_count":25,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-09T01:58:05.235Z","etag":null,"topics":["bitcoin","electrum","electrum-server","hd-wallet","mnemonic-phrase","mnemonics","segwit"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esneider.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-22T22:11:48.000Z","updated_at":"2025-10-03T07:36:06.000Z","dependencies_parsed_at":"2024-08-01T16:31:49.929Z","dependency_job_id":"4ec225fe-47f8-4de7-8eb4-238a8991b5d2","html_url":"https://github.com/esneider/indy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/esneider/indy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esneider%2Findy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esneider%2Findy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esneider%2Findy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esneider%2Findy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esneider","download_url":"https://codeload.github.com/esneider/indy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esneider%2Findy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30402349,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T21:02:20.017Z","status":"ssl_error","status_checked_at":"2026-03-11T20:59:32.667Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","electrum","electrum-server","hd-wallet","mnemonic-phrase","mnemonics","segwit"],"created_at":"2024-08-01T15:05:11.603Z","updated_at":"2026-03-11T21:46:56.832Z","avatar_url":"https://github.com/esneider.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"![Indy: the ultimate recovery tool](readme/header.png)\n\n## About\n\nRecovering funds from a wallet using just the mnemonic phrase has historically been a difficult problem. The main reason being that different wallets use different derivation paths and script types. Sadly, the mnemonic format doesn't document this and other important metadata needed during the recovery process.\n\nIndy intends to cover the gap left by the standard by making the recovery of funds from a mnemonic trivial. Just input your mnemonic and let the tool guess the derivation path used by the wallet.\n\nYou can use Indy to sweep all the funds to a destination address of your choice.\n\n## Features\n\n* Supports sweeping funds from mnemonics, xprivs, and xpubs (for xpubs it will just find the UTXOs)\n* Supports mnemonics in English, Chinese, Spanish, French, Italian, Japanese and Korean\n* Supports all the derivation paths and address types from the wallets listed in [walletsrecovery.org](https://walletsrecovery.org/)\n* Supports customizing the address gap limit and the account gap limit\n* Supports using a custom electrum server\n\n## Demo\n\n![](readme/demo.gif)\n\n## How it works\n\nIndy uses electrum servers to try [every possible combination](https://github.com/esneider/indy/blob/master/descriptors.py#L10) of known derivation paths and script types. Once the relevant path and script type combinations are detected, the tool will proceed to find all the UTXOs for those combinations. After all funds are found, if you desire so, Indy can create a transaction that will sweep them to an address of your choosing.\n\nSome wallets use a custom address gap limit (or none at all), or really high account numbers, so you can choose to override these parameters.\n\nFinally, notice that this tool is only useful for single key wallets. If you are using a multisig or lightning wallet, then you cannot recover the funds with just the mnemonic.\n\n## Installation\n```\ngit clone https://github.com/esneider/indy \u0026\u0026 cd indy\npip3 install -r requirements.txt\npython3 indy.py --help\n```\n\n## Usage\n\n```\nusage: indy.py [-h] [--passphrase \u003cpass\u003e] [--address \u003caddress\u003e] [--broadcast]\n               [--fee-rate \u003crate\u003e] [--address-gap \u003cnum\u003e] [--account-gap \u003cnum\u003e]\n               [--host \u003chost\u003e] [--port \u003cport\u003e] [--protocol {t,s}] [--no-batching]\n               key\n\nFind and sweep all the funds from a mnemonic or bitcoin key, regardless of the\nderivation path or address format used.\n\npositional arguments:\n  key                  master key to sweep, formats: mnemonic, xpriv or xpub\n\noptional arguments:\n  -h, --help           show this help message and exit\n  --passphrase \u003cpass\u003e  optional secret phrase necessary to decode the mnemonic\n\nsweep transaction:\n  --address \u003caddress\u003e  craft a transaction sending all funds to this address\n  --broadcast          if present broadcast the transaction to the network\n  --fee-rate \u003crate\u003e    fee rate to use in sat/vbyte (default: next block fee)\n\nscanning parameters:\n  --address-gap \u003cnum\u003e  max empty addresses gap to explore (default: 20)\n  --account-gap \u003cnum\u003e  max empty account levels gap to explore (default: 0)\n\nelectrum server:\n  --host \u003chost\u003e        hostname of the electrum server to use\n  --port \u003cport\u003e        port number of the electrum server to use\n  --protocol {t,s}     electrum connection protocol: t=TCP, s=SSL (default: s)\n  --no-batching        disable request batching\n```\n\n## Credits\n\nThis tool was created after reading [this twitter thread](https://twitter.com/aantonop/status/1259478489427775491) by [@aantonop](https://twitter.com/aantonop). Many thanks for the idea and the relentless contributions to the Bitcoin community!\n\nAlso, Indy stands on the tremendous effort done by [@NVK](https://twitter.com/NVK) and [@J9Roem](https://twitter.com/J9Roem) documenting the derivation paths for many wallets at [walletsrecovery.org](https://walletsrecovery.org/). It belongs in a museum!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesneider%2Findy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesneider%2Findy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesneider%2Findy/lists"}