Skip to main content

Export your full Steam game library to a CSV file with rich metadata from four APIs

Project description

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

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

steam_library_exporter-1.1.0.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

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

steam_library_exporter-1.1.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file steam_library_exporter-1.1.0.tar.gz.

File metadata

  • Download URL: steam_library_exporter-1.1.0.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for steam_library_exporter-1.1.0.tar.gz
Algorithm Hash digest
SHA256 22eb995f81e8bafb44059a59c7f1319f36672345c26c6b906a967efd7a0e67a0
MD5 c67254162e5e6196aaa4febfd290c335
BLAKE2b-256 1b92b4e8c0906f32492e0c18832065f095b58cc00b971b0a729b425fe58334cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for steam_library_exporter-1.1.0.tar.gz:

Publisher: publish.yml on davidmalko87/steam-library-exporter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file steam_library_exporter-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for steam_library_exporter-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 927731af87cdcbc06ab99d9f1639dfd5437f0195a88309c908ee9b934ad26fc5
MD5 52a2be183d2cf34d92c35dc076452edc
BLAKE2b-256 308c25ec8bd38c0a2ecc7d005dfd2cf1ab72c30ed2f78f8bff47a76d865cfb90

See more details on using hashes here.

Provenance

The following attestation bundles were made for steam_library_exporter-1.1.0-py3-none-any.whl:

Publisher: publish.yml on davidmalko87/steam-library-exporter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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