Steam Charts Player Count & Topsellers Scraper
GAMESECOMMERCE
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
Steam Charts Player Count & Topsellers Scraper
Scrape live Steam charts — most played, top sellers, new releases, specials, and coming soon — combined with per-game concurrent player counts from the official Steam API. Returns time-stamped snapshot rows ideal for trend pipelines, launch benchmarking, and game market intelligence.
All data comes from official Valve endpoints (no SteamSpy, no HTML scraping). No API key required.
Features
- Pull the top 100 most-played games ranked by peak concurrent players (weekly rollup)
- Pull top sellers, specials/discounts, new releases, and coming-soon games from the Steam storefront
- Optionally attach live concurrent player counts to every chart row via
ISteamUserStats/GetNumberOfCurrentPlayers - Filter by region/country code for region-specific top sellers and pricing
- Every row is time-stamped at the moment of the snapshot — designed for time-series pipelines
- Pay-per-event pricing at roughly $0.001 per record
Who Uses Steam Chart Data and Why
- Indie developers and publishers — track your game's chart position and wishlist rank around launch to benchmark against competitors
- Game market intelligence firms — build player-count trend databases across hundreds of titles for investment or licensing decisions
- Community managers — monitor live player counts and weekly rank changes to time announcements and updates
- Price-tracking services — capture the specials/discounts chart on a schedule to identify sale events
- Academic researchers — longitudinal player-count datasets for studying game lifecycle, churn, and seasonal patterns
How It Works
- You specify which chart types to fetch (
most_played,top_sellers,specials,new_releases,coming_soon) and optionally a region code. - The actor queries
ISteamChartsService/GetMostPlayedGamesfor the weekly most-played leaderboard, andstore.steampowered.com/api/featuredcategoriesfor storefront charts — two API calls regardless of how many games are requested. - If
includePlayerCountsis enabled, the actor fans out concurrent requests toISteamUserStats/GetNumberOfCurrentPlayers— one call per unique game — to attach live player counts. - All rows are saved with a
snapshot_tsfield, making repeated runs suitable for time-series ingestion.
Input
Get the top 15 most-played games with live player counts
{
"chartTypes": ["most_played"],
"maxItems": 15,
"includePlayerCounts": true
}
Get top sellers (US) plus specials, no player counts (faster)
{
"chartTypes": ["top_sellers", "specials"],
"maxItems": 30,
"includePlayerCounts": false,
"region": "us"
}
Full snapshot — all chart types with live player counts
{
"chartTypes": ["most_played", "top_sellers", "specials", "new_releases", "coming_soon"],
"maxItems": 200,
"includePlayerCounts": true,
"region": "us"
}
Coming soon games in Japan
{
"chartTypes": ["coming_soon"],
"maxItems": 20,
"includePlayerCounts": false,
"region": "jp"
}
Input Fields
| Field | Type | Default | Description |
|---|---|---|---|
chartTypes |
array | ["most_played", "top_sellers"] |
Which charts to fetch. Options: most_played, top_sellers, specials, new_releases, coming_soon |
maxItems |
integer | 100 | Maximum chart rows to return across all enabled chart types |
includePlayerCounts |
boolean | true |
Fetch live concurrent player counts per game (one extra API call per game) |
region |
string | us |
Country code for top sellers and pricing (e.g. us, gb, de, jp) |
Output Fields
Each row in the dataset represents one game on one chart at the time of the snapshot.
| Field | Type | Description |
|---|---|---|
chart_type |
string | most_played, top_sellers, specials, new_releases, or coming_soon |
rank |
integer | Position in the chart (1-based) |
steam_appid |
integer | Steam application ID |
name |
string | Game name (null for most_played — the weekly-rank API doesn't return names) |
concurrent_players |
integer | Live concurrent player count (null if includePlayerCounts is false) |
peak_players_24h |
integer | Peak concurrent players in the last 24h (only for most_played) |
last_week_rank |
integer | Rank in the previous week; -1 means new chart entry (only for most_played) |
region |
string | Country code used for this snapshot |
price_final |
integer | Final price in cents, e.g. 3999 = $39.99 (storefront charts only) |
discount_percent |
integer | Discount percentage, e.g. 25 (storefront charts only) |
release_date |
string | Release date string (storefront charts only, if available) |
coming_soon |
boolean | true for coming_soon chart entries |
genres |
string | Reserved — null in current version |
header_image |
string | URL of the game header image (storefront charts only) |
snapshot_ts |
string | ISO 8601 timestamp when this snapshot was taken |
source_url |
string | API endpoint the record was sourced from |
Notes
- The
most_playedchart returns exactly 100 entries per run (Valve's weekly rollup size). Game names are not available from this endpoint — only appids, ranks, and peak player counts. - The
top_sellers,specials,new_releases, andcoming_sooncharts come from the Steam storefront API and include names, prices, and header images. concurrent_playersis the live count at the exact moment of the API call. For consistent time-series data, run the actor on a fixed schedule (e.g., hourly or daily) and usesnapshot_tsto align rows.- Some appids (DLC, hardware bundles, non-game items) return an error from
GetNumberOfCurrentPlayers— those rows getconcurrent_players: null. - Prices are in cents (integer). Divide by 100 to get the decimal value.