
๐ฎ Rescue every Steam key you’ve already paid for. No more hunting.
humble-bundle-keys walks your entire Humble Bundle library, reveals unrevealed keys, claims Humble Choice games, and writes everything to a single CSV โ so you finally know what you own.
๐ What is humble-bundle-keys?
If you’ve bought Humble Bundles for any length of time, you know the problem: hundreds of keys scattered across dozens of orders, some revealed, some not, Humble Choice months you may or may not have claimed. Opening each order page manually to check is a slog โ and it’s easy to forget you own something.
humble-bundle-keys fixes that. It logs you into humblebundle.com once in a real Chromium window (so 2FA works normally, and your password never touches the tool), then walks every order in your library via Humble’s private JSON API. It reveals already-allocated but unrevealed keys, drives Humble Choice membership pages to claim subscription games, and collects everything into a single CSV you can sort, search, and bulk-paste into Steam.
It stays entirely inside humblebundle.com. It does not touch Steam, GOG, or any other store. It never makes purchases or gifts games. The security model is deliberately simple.
โจ Key Capabilities
Three extraction modes for every situation
Not all Humble keys are created equal. Bundle keys are straightforward; Humble Choice months can require either an API call or a full browser-driven flow depending on the vintage. humble-bundle-keys covers all three cases:
- Default reveal โ fast API walk, catches bundle keys and already-allocated Choice keys
- Choice API claim (
--claim-choice) โ fast, handles modern Choice months where the key hasn’t been allocated yet - Browser claim (
--browser-claim) โ slower, but catches everything including legacy “pick N of M” months that require real browser interaction
Safe by default โ dry-run first
The --dry-run flag walks your entire library read-only: nothing is revealed, nothing is claimed, nothing is written. It’s the recommended first run. You get a preview of everything the tool would do before anything mutates.
Incremental runs with merge
The --merge flag combines new results with your existing CSV instead of overwriting it. Useful for running weekly to pick up new Choice months without blowing away previous output.
Resilient to Cloudflare and selector changes
Transient Cloudflare 403s are auto-retried with backoff. If a selector breaks after a Humble UI update, humble-bundle-keys diagnose -v generates a safe-to-share zip you can attach to an issue โ no manual digging through logs required.
๐ฏ Who It’s For
The casual bundle buyer โ You’ve grabbed a few bundles over the years and have no idea what’s in your library. A single humble-bundle-keys --dry-run -v run tells you exactly what’s there before you do anything.
The Humble Choice subscriber โ You’ve got months of subscription games sitting unclaimed because navigating the membership pages one by one is tedious. --browser-claim --max-claims 200 handles the backlog in one session.
The obsessive spreadsheet keeper โ You already track your game library manually. The CSV output gives you a clean, mergeable data source to pull into whatever system you use.
โก Quick Start
Requires Python 3.10+ and Chromium (installed automatically via Playwright).
# Install with uv (recommended):
uv tool install humble-bundle-keys
playwright install chromium
# Or with pip:
pip install humble-bundle-keys
playwright install chromium
First run โ opens a browser window so you can log in, then walks your library:
# Recommended: preview everything before anything mutates
humble-bundle-keys --dry-run -v
# Full run: reveal keys + claim Choice games
humble-bundle-keys --browser-claim --max-claims 200 -v
# Merge new results with an existing CSV
humble-bundle-keys --browser-claim --max-claims 200 --merge -v
After the run, your CSV is at ./humble-bundle-keys.csv and a full DEBUG-level log lands at ~/.humble-bundle-keys/runs/run-<timestamp>.log.
๐ Real-World Usage
The tool is early โ usage numbers aren’t available yet. If you run it against a large library, I’d love to hear how it went. The wiki has notes on what’s claimable vs. what isn’t, which is worth reading before a big run: What’s Claimable.
๐ Links
- GitHub: https://github.com/gfargo/humble-bundle-keys
- PyPI: https://pypi.org/project/humble-bundle-keys/
- Wiki / full docs: https://github.com/gfargo/humble-bundle-keys/wiki
- CLI Reference: https://github.com/gfargo/humble-bundle-keys/wiki/CLI-Reference
- Changelog: https://github.com/gfargo/humble-bundle-keys/blob/main/CHANGELOG.md
- Contributing: https://github.com/gfargo/humble-bundle-keys/blob/main/CONTRIBUTING.md
If you’ve got a Humble library you’ve never fully inventoried, give it a try โ start with --dry-run and see what’s actually sitting there waiting.
Like what you saw?
There's more where that came from.
