Steam Idle Bot

Farm playtime & trading-card drops β€” on autopilot

Steam Idle Bot syncs your library, idles only the games that still have cards to drop, and remembers what's finished β€” so every run scans less and starts faster.

2 idling backends 242 tests 3.12–3.14 Python ≀ 32 games / Steam limit MIT licensed
Why it's different

Accurate, self-pruning, and readable

Most idlers blindly run every game forever. This one knows where the drops are.

🎴

Drops only where it matters

Detects which games have trading cards and how many drops remain β€” idles just those, never wasting a slot.

🧠

Learns over time

A persistent no-drop cache records fully-farmed games and skips them forever. Each run scans less.

πŸ”

Accurate by design

Verifies the Steam web session is genuinely logged in, and auto-recovers a valid session from your browser.

πŸ–₯️

Readable output

Live panel of game names, cards remaining and idle time; structured report + JSON/Markdown checkpoints.

πŸ”

Two backends, one interface

Built-in Python client (Guard / 2FA) or a local steam-utility install β€” with transparent fallback.

⚑

Modern & tested

uv-managed, fully typed, 242 tests across Python 3.12–3.14. Green on every push.

How it works

Architecture & selection pipeline

An orchestrator drives a swappable backend and three card services; game selection is a funnel.

System architecture diagram
Entry & config β†’ SteamIdleBot orchestrator β†’ swappable backend + three card services β†’ IdleTracker.
Game selection pipeline diagram
Library β†’ has-cards β†’ drops-remaining β†’ exclusions & cap. Narrows to ≀ 32 idled games.
Quick start

Running in under a minute

# install uv, clone & sync
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/bernardopg/steam-idler-python.git
cd steam-idler-python && uv sync

# configure (never commit the filled .env)
cp .env.example .env   # set USERNAME, PASSWORD, STEAM_API_KEY

./run.sh --dry-run     # preview, no Steam contact
./run.sh               # go β€” or ./run-gui.sh for the GUI
Documentation

Read in your language