Skip to content

davidmalko87/steam-library-exporter

Repository files navigation

Steam Library Exporter

CI Version Python License Platform Last Commit Open Issues

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 .gitignore excludes 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

About

Python script to export your Steam game library to CSV — playtime, genres, reviews, metacritic scores, prices, tags & estimated owners via Steam Web API + Store API + SteamSpy

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages