Steam Library Exporter
Export your full Steam game library to CSV or JSON with rich metadata from four APIs.
Why?
Steam shows you your library — it doesn't let you query it. This tool pulls playtime, genres, prices, reviews, Metacritic scores, community tags, and estimated ownership data into a single flat CSV you can open in Excel, pandas, Google Sheets, Tableau, or any BI tool.
Features
| Feature | Description |
|---|---|
| Interactive mode | Run without arguments for a guided step-by-step setup — no flags to memorize |
| 24 metadata columns | appid, name, playtime, genres, developers, publishers, release date, Metacritic score, prices, review counts, SteamSpy tags, and more |
| CSV & JSON export | --format csv (default) or --format json for structured data |
| Four API sources | Steam Web API, Steam Store API, Steam Reviews API, SteamSpy |
| Sort options | --sort playtime|name|metacritic|reviews |
| Filter unplayed | --min-playtime N to skip games under N hours |
| Environment variables | Set STEAM_API_KEY and STEAM_ID once — never retype credentials |
| Progress with ETA | Shows elapsed time and estimated time remaining per game |
| Export summary | Prints total playtime, played/unplayed counts, top genres, and avg Metacritic |
| Optional SteamSpy | Skip with --no-steamspy to cut export time by ~25% |
| Partial export | Use --limit N to test with a small batch before running the full library |
| Custom output path | Override the default filename with --output |
| Cross-platform | Runs on Windows, macOS, and Linux wherever Python 3.10+ is installed |
Quick Start
1. Install
git clone https://github.com/davidmalko87/steam-library-exporter.git
cd steam-library-exporter
pip install -r requirements.txt
2. Configure
You need two things:
| Item | How to get it |
|---|---|
| Steam Web API key | steamcommunity.com/dev/apikey (free) |
| Steam64 ID | steamid.io — 17-digit number |
Set both Profile and Game details to Public in Steam → Settings → Privacy.
3. Run
# Interactive mode — guided step-by-step (no flags needed)
python steam_export.py
# Quick test — top 5 games by playtime
python steam_export.py --key YOUR_API_KEY --steamid YOUR_STEAM64_ID --limit 5
# Full library export
python steam_export.py --key YOUR_API_KEY --steamid YOUR_STEAM64_ID
# Use environment variables (set once, run without --key / --steamid)
export STEAM_API_KEY=YOUR_API_KEY
export STEAM_ID=YOUR_STEAM64_ID
python steam_export.py
# Export to JSON
python steam_export.py --key YOUR_API_KEY --steamid YOUR_STEAM64_ID --format json
# Sort by name, skip unplayed games
python steam_export.py --key YOUR_API_KEY --steamid YOUR_STEAM64_ID --sort name --min-playtime 1
# Faster — skip SteamSpy data
python steam_export.py --key YOUR_API_KEY --steamid YOUR_STEAM64_ID --no-steamspy
# Custom output filename
python steam_export.py --key YOUR_API_KEY --steamid YOUR_STEAM64_ID --output my_games.csv
Configuration Reference
| Flag | Required | Default | Description |
|---|---|---|---|
--key KEY |
Yes* | — | Steam Web API key |
--steamid STEAMID |
Yes* | — | Steam64 ID (17-digit number) |
--output OUTPUT |
No | steam_library.<format> |
Output file path |
--format FORMAT |
No | csv |
Export format: csv or json |
--sort FIELD |
No | playtime |
Sort by: playtime, name, metacritic, or reviews |
--min-playtime N |
No | 0 (all) |
Minimum playtime in hours to include a game |
--no-steamspy |
No | off | Skip SteamSpy API calls (faster export) |
--limit N |
No | 0 (all) |
Export only the top N games by playtime |
--version |
No | — | Print version and exit |
* Not required if the corresponding environment variable is set.
Environment Variables
| Variable | Replaces |
|---|---|
STEAM_API_KEY |
--key |
STEAM_ID |
--steamid |
Output Columns
appid, name, playtime_hours, playtime_2weeks_hours, type, developers, publishers, genres, categories, release_date, metacritic_score, price_current, price_initial, is_free, short_description, header_image, total_positive, total_negative, review_score_desc, total_reviews, estimated_owners, avg_playtime_global, median_playtime_global, steamspy_tags
Sample rows
appid,name,playtime_hours,metacritic_score,genres,price_current,review_score_desc,estimated_owners
570,Dota 2,1842.3,90,Action;Free to Play,0.0,Overwhelmingly Positive,100000000-200000000
730,Counter-Strike 2,634.1,83,Action,0.0,Very Positive,50000000-100000000
1091500,Cyberpunk 2077,112.7,86,Action;RPG,29.99,Very Positive,10000000-20000000
Project Structure
steam-library-exporter/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── feature_request.yml
│ ├── workflows/
│ │ └── ci.yml
│ └── PULL_REQUEST_TEMPLATE.md
├── steam_export.py # CLI entry point and all logic
├── requirements.txt # Python dependencies
├── CHANGELOG.md # Version history
├── CONTRIBUTING.md # Development and versioning guide
├── LICENSE # MIT
└── README.md
Known Limitations
- Rate limits: Steam Store API requires ~1.5 s between requests. A 200-game library takes roughly 13 minutes.
- Private profiles: The tool cannot read libraries set to Private in Steam Privacy Settings.
- Free-to-play games: Some F2P titles may lack price data in the Store API response.
- SteamSpy accuracy: Estimated ownership ranges are approximate (SteamSpy infers data, Steam does not publish it).
- No incremental export: The script always fetches and writes the full library from scratch.
Security
Never commit your API key. The
.gitignoreexcludes common credential files (.env,*.key), but always verify before pushing.
Your Steam Web API key is read-only and scoped to public data, but treat it like any credential.
License
MIT © 2026 David Malko
Links
Metadata
Release files for steam-library-exporter 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| steam_library_exporter-1.1.0.tar.gz | 13.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| steam_library_exporter-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.3 kB
Release files / steam_library_exporter-1.1.0.tar.gz
| Download URL | steam_library_exporter-1.1.0.tar.gz |
|---|---|
| Size | 13.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
22eb995f81e8bafb44059a59c7f1319f36672345c26c6b906a967efd7a0e67a0
|
|
BLAKE2b-256 checksum How to use checksums |
1b92b4e8c0906f32492e0c18832065f095b58cc00b971b0a729b425fe58334cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 13, 2026.
Transparency logRelease files / steam_library_exporter-1.1.0-py3-none-any.whl
| Download URL | steam_library_exporter-1.1.0-py3-none-any.whl |
|---|---|
| Size | 11.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
927731af87cdcbc06ab99d9f1639dfd5437f0195a88309c908ee9b934ad26fc5
|
|
BLAKE2b-256 checksum How to use checksums |
308c25ec8bd38c0a2ecc7d005dfd2cf1ab72c30ed2f78f8bff47a76d865cfb90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 13, 2026.
Transparency log