Steam automation CLI - find games, check deals, purchase, and manage your Steam library
Project description
gmfind: Game Finder
A Python CLI tool for recommendations and purchasing of PC games. Steam is the store front that is primarily supported.
gmfind will look for high quality games based on your configurable preferences for steam and metacritic ratings, discounts and compatibility ratings.
Features
- Game Discovery: Find discounted games filtered by price, Metacritic score, ProtonDB rating, and Steam Deck compatibility.
- Compatibility Checks: Get ProtonDB and Steam Deck verification status for any game.
- Smart Filtering: Exclude games you already own, match blocklist patterns, and enforce preference criteria.
- Headless Purchasing: Buy games using your Steam Wallet with Playwright browser automation.
- Private Profile Support: Export your game library even with a private Steam profile.
Safety Notice
Purchases use Steam Wallet only. This tool will never use credit cards, PayPal, or any external payment methods. All purchases are made exclusively from your Steam Wallet balance.
- The
gmfind buycommand validates games against your config before purchasing - Use
gmfind buy --autowith caution - it will automatically purchase a recommended game - Set a conservative
max_pricein your config to limit spending - Your Steam Wallet balance acts as a natural spending cap
We recommend adding a small amount to your Steam Wallet and testing with --headful mode first to observe the purchase flow before enabling autonomous buying.
Installation
For Users
Requires Python 3.10+ and uv.
# Install globally as a CLI tool
uv tool install gmfind
# Initialize (installs Playwright browsers and creates config templates)
gmfind init
Alternative with pipx:
pipx install gmfind
gmfind init
For Developers
See Development section below.
Configuration
Set your Steam credentials as environment variables:
export STEAM_USERNAME="your_username"
export STEAM_PASSWORD="your_password"
export STEAM_ID="76561198xxxxxxxxx"
Add these to your shell profile (~/.zshrc or ~/.bashrc) to make them permanent.
Config Files
Config files are stored in platform-specific locations:
- Linux/macOS:
~/.config/gmfind/ - Windows:
%APPDATA%\gmfind\
Files:
config.yaml- Preferences (max price, min ratings, etc.)block_list.yaml- Game title patterns to exclude
Usage
Check Game Details
Get comprehensive info including price, ProtonDB rating, Steam Deck status, and reviews:
gmfind check 1145350
Find Deals
Find discounted games matching your preferences:
gmfind deals # Find 10 deals
gmfind deals 5 # Find 5 deals
gmfind deals --output ./deals.md # Save to file
Purchase a Game
Buy a game by App ID (validates against your config first):
gmfind buy 1145350 # Buy specific game (shows confirmation prompt)
gmfind buy 1145350 --auto # Skip confirmation prompt
gmfind buy 1145350 --headful # Show browser window
Autonomous Buy
Automatically find a recommended game and purchase it:
gmfind rec-buy-auto # Check balance -> recommend -> buy
Check Wallet Balance
gmfind balance
Export Game Library
gmfind inventory --private # Browser-based (works with private profiles)
gmfind inventory --public # API-based (requires public profile)
Check Blocklist
gmfind blocklist "FIFA 24"
Find Steam App ID
Look up a game's Steam App ID by title:
gmfind id "Hades"
Output: {"steam_id": 1145360, "title": "Hades"}
Search by Name
Look up a game by title and get full details in one command:
gmfind id "Hades II" | jq '.steam_id' | xargs gmfind check
Global Options
gmfind --version # Show version
gmfind --verbose # Enable debug logging
gmfind <cmd> --help # Command-specific help
Per-Command Options
Most commands accept config overrides:
gmfind deals 5 --config ./config.yaml --block-list ./blocklist.yaml
gmfind check 1145350 --inventory ./my_games.csv
Development
Setup
# Clone the repository
git clone https://github.com/your-username/gmfind.git
cd gmfind
# Install in development mode with dev dependencies
make install
# Initialize Playwright browsers
make init
Running Locally
# Run commands through uv
uv run gmfind --help
uv run gmfind check 1145350
# Or activate the virtual environment
source .venv/bin/activate
gmfind --help
Code Quality
make lint # Run ruff linter
make format # Format code with ruff
make type-check # Run mypy type checker
make check # Run all checks
Building
# Install build tools
uv pip install build twine
# Build the package
uv run python -m build
# This creates:
# dist/gmfind-0.1.0.tar.gz
# dist/gmfind-0.1.0-py3-none-any.whl
Testing Locally Before Publishing
# Create a test environment
uv venv /tmp/test-gmfind
source /tmp/test-gmfind/bin/activate
# Install your local build
pip install dist/gmfind-*.whl
# Test it
gmfind --version
gmfind check 1145350
# Clean up
deactivate
rm -rf /tmp/test-gmfind
Publishing
# Upload to TestPyPI first
uv run twine upload --repository testpypi dist/*
# Then upload to PyPI
uv run twine upload --repository pypi dist/*
Versioning
Update version in src/gmfind/__init__.py before releasing:
__version__ = "0.2.0"
Then rebuild and publish.
Security
- Credentials are read from environment variables, never stored in config files.
- Session data is stored locally in XDG data directory.
- Browser automation uses real Chromium with human-like behavior.
Troubleshooting
When errors occur during login or purchase, screenshots are automatically saved for debugging.
File locations (platform-specific):
- Linux/macOS:
~/.cache/gmfind/ - Windows:
%LOCALAPPDATA%\gmfind\Cache\
Troubleshooting files:
screenshots/- Error screenshots (e.g.,login_failed.png,purchase_failed.png)logs/gmfind.log- Application logs
Common issues:
- Login fails: Check
screenshots/login_*.pngfor the browser state at failure - Purchase fails: Check
screenshots/purchase_failed.pngorcheckout_failed.png - Run with
--headfulflag to watch the browser in real-time
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gmfind-0.1.7.tar.gz.
File metadata
- Download URL: gmfind-0.1.7.tar.gz
- Upload date:
- Size: 49.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6653efe8c9c0419d9ac37ca08ddc1906b7271288e1ad906d6921ac3b2066b3ea
|
|
| MD5 |
47a75a0f0e1117a116a8860999e91a4a
|
|
| BLAKE2b-256 |
2cc3a0145c9511d2727d3678e3e753c453b5b56f8f624298a64a0e04f22a7ec6
|
File details
Details for the file gmfind-0.1.7-py3-none-any.whl.
File metadata
- Download URL: gmfind-0.1.7-py3-none-any.whl
- Upload date:
- Size: 57.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e65b6e436576912890dd83469d4b04f2a5a3de74a6830d0fdff40e6f8ce6b62
|
|
| MD5 |
0252d4a7f9ea0228ac9917cefe1f8f30
|
|
| BLAKE2b-256 |
b2c9973f9e506d40610f20058b54994865678e1875789e840d08eeabbc1b4018
|