Skip to main content

Steam automation CLI - find games, check deals, purchase, and manage your Steam library

Project description

gmfind

A Python CLI tool for finding and purchasing Steam games. Check deals, view compatibility ratings, and manage your library from the terminal.

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.

Requirements

  • Python 3.10+
  • uv package manager
  • Steam account with Steam Wallet funds (for purchases)

Installation

# Clone and install
git clone https://github.com/your-username/steam-bot.git
cd steam-bot
uv pip install -e .

# Initialize (installs Playwright browsers and creates config templates)
gmfind init

Configuration

Set your Steam credentials as environment variables:

export STEAM_USERNAME="your_username"
export STEAM_PASSWORD="your_password"
export STEAM_ID="76561198xxxxxxxxx"

Or create a .env file in your working directory (for development).

Config Files

Config files are stored in platform-specific locations:

  • Linux: ~/.config/gmfind/
  • macOS: ~/Library/Application Support/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
gmfind buy 1145350 --force    # Skip validation checks
gmfind buy 1145350 --headful  # Show browser window
gmfind buy --auto             # Autonomous: 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"

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

Project Structure

steam-bot/
├── pyproject.toml              # Package configuration
├── src/gmfind/                 # Package source
│   ├── cli.py                  # CLI entry point (subcommands)
│   ├── config.py               # Configuration loading (Pydantic)
│   ├── paths.py                # XDG-compliant path handling
│   ├── steam_auth.py           # Headless authentication
│   ├── buy_game.py             # Purchase flow
│   ├── check_balance.py        # Wallet balance
│   ├── game_check.py           # Game details aggregator
│   ├── find_deals.py           # Deal discovery
│   ├── report_generator.py     # Markdown report output
│   ├── blocklist_checker.py    # Title filtering
│   ├── inventory.py            # API-based library export
│   ├── inventory_private.py    # Browser-based library export
│   └── recommendations/        # Rating clients
│       ├── protondb.py
│       ├── steam_deck.py
│       └── metacritic.py

Development

# Install dev dependencies
uv pip install -e ".[dev]"

# Run checks
uv run ruff check .         # Lint
uv run ruff format .        # Format
uv run mypy src/gmfind      # Type check

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.

License

MIT License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gmfind-0.1.0.tar.gz (45.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gmfind-0.1.0-py3-none-any.whl (54.0 kB view details)

Uploaded Python 3

File details

Details for the file gmfind-0.1.0.tar.gz.

File metadata

  • Download URL: gmfind-0.1.0.tar.gz
  • Upload date:
  • Size: 45.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for gmfind-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ceeeea39ff579018e234100a83f79de7e8c4b90dee85865da3688449a6c7a7a9
MD5 da27e8cac7bdf547722d80435bc0e725
BLAKE2b-256 de0223bc99ff13dabc38931b29f9829ddf2db191793533164b37c37773f5c0c8

See more details on using hashes here.

File details

Details for the file gmfind-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: gmfind-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 54.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for gmfind-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5363dfe40341e506bf78feb5f117a13c77b1bcfccea05634c63aee3383253663
MD5 f20e4a8e799fa14afbe5d0e4e2010489
BLAKE2b-256 8ee35568e54546d8af23e54d4441e6f87b7308c5377e4b484e1c79d83c2cc951

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page