Public API
JSON endpoints over HTTPS. No API keys or accounts required. CORS supports GET, HEAD, POST, and OPTIONS. Standard rate limits apply at 120 requests per minute per IP address and 120 distinct titles per hour. JSON responses are cached for 30 seconds; the CSV export is updated as a 5-minute snapshot. Operated by Musical Pig LLC.
Over the rate limit the API returns HTTP 429. Title search q is at most 80 characters. Errors use JSON { "error": "…" } with the matching HTTP status. Use is subject to the Terms of Service. What we count, and what we do not store, is in the Privacy Policy.
Host
https://api.pcgdb.comSend JSON here
www.pcgdb.com is the catalog site, not the API. A browser can open either. Scripts should call the API host.
curl https://api.pcgdb.com/api/v1/health
Catalog9Health, lists, search, CSV
GET /api/v1/healthService healthhttps://api.pcgdb.com/api/v1/health{ "ok": true, "name": "pcgdb", "operator": "Musical Pig LLC", "operatorUrl": "https://musical-pig.com", "steam": { "exhausted": false }, "slow": false, "catalog": { "titles": 2864, "limit": 15000, "priced": 2654 }, "notices": [] }Public health has no volume or CPU numbers. steam.exhausted pauses live Steam polls.
GET /api/v1/pulseHomepage railshttps://api.pcgdb.com/api/v1/pulse{ "comingSoon": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "updated": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "mostPlayed": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "topRated": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "deals": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "gems": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "moving": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ], "week": [ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ] }Homepage rails as slim AppCard arrays. comingSoon is New on the store. Live lists are longer.
GET /api/v1/catalogFull sampled cataloghttps://api.pcgdb.com/api/v1/catalog?cc=us[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[]. Optional cc selects the display price region (us, eu, gb, …).
GET /api/v1/catalog/liteSlim catalog cards for list pageshttps://api.pcgdb.com/api/v1/catalog/lite?cc=us[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false, "dlc": [], "editions": [] } ]Same titles as /catalog without descriptions, DLC, or editions. spark24 stays so list cards can draw the 24h sparkline.
GET /api/v1/catalog/ccuSummed in-game count over timehttps://api.pcgdb.com/api/v1/catalog/ccu{ "current": 4147266, "sampledAt": "2026-09-08T23:31:38Z", "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }Sum of sampled in-game counts. series is { t, v }[] with t in unix seconds. Default is all-time downsampled plus the last 7 days raw.
GET /api/v1/catalog/ccu?from=&to=Catalog in-game series, raw window (unix seconds, max 7 days)https://api.pcgdb.com/api/v1/catalog/ccu?from=1788660090&to=1789264890{ "current": 4147266, "sampledAt": "2026-09-08T23:31:38Z", "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. current is still the latest catalog total.
GET /api/v1/policyNo-edit statementhttps://api.pcgdb.com/api/v1/policy{ "statement": "PCGDB does not hide, edit, or omit player counts or prices after ingest. Corrections are append-only.", "chartsEdited": false, "publisherOptOut": false, "operator": "Musical Pig LLC", "operatorUrl": "https://musical-pig.com", "recentIngests": [ { "kind": "ingest", "count": 100, "fingerprint": "abc123", "note": "730", "at": "2026-09-08T00:00:00Z" } ] }GET /api/v1/apps?q=Title search (max 80 characters)https://api.pcgdb.com/api/v1/apps?q=counter[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[]. q is at most 80 characters. Add local=1 to skip the Steam store fallback.
GET /api/v1/export/apps.csvCSV dumphttps://api.pcgdb.com/api/v1/export/apps.csvappid,name,currentPlayers,usCents 730,Counter-Strike 2,499779,0
text/csv snapshot, refreshed about every five minutes. Not JSON.
Charts8Most played, gems, movers, sales
GET /api/v1/charts/playersMost played (top 100)https://api.pcgdb.com/api/v1/charts/players[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[] — top 100 by current players.
GET /api/v1/charts/gemsHidden gems filterhttps://api.pcgdb.com/api/v1/charts/gems[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]AppCard[] after the hidden-gems filter.
GET /api/v1/charts/lookupsMost opened titles (hashed unique-ish views)https://api.pcgdb.com/api/v1/charts/lookups[ { "appid": 730, "name": "Counter-Strike 2", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "hits": 16, "firstAt": "2026-09-06T21:00:00Z", "lastAt": "2026-09-08T23:00:00Z", "hours": 11, "peakHourHits": 3 } ]Unique-ish game-page opens. Query text and IPs are not stored.
GET /api/v1/charts/searchesTitles that appeared in search (query text is not stored)https://api.pcgdb.com/api/v1/charts/searches[ { "appid": 730, "name": "Counter-Strike 2", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "hits": 4, "firstAt": "2026-09-07T18:00:00Z", "lastAt": "2026-09-08T22:00:00Z", "hours": 3, "peakHourHits": 2 } ]Titles that appeared in search. The search string is not stored.
GET /api/v1/charts/moversUnusual in-game counts versus that title's typical hour of weekhttps://api.pcgdb.com/api/v1/charts/movers[ { "appid": 730, "name": "Counter-Strike 2", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "currentPlayers": 900000, "expected": 620000, "residualPct": 45, "delta24h": 12000, "steamDeck": "playable", "mature": false, "reviewPositive": 8452479, "reviewNegative": 1387191, "reviewDelta": 420 } ]Ranked by residual after that title's typical hour of week, not raw percent. Titles below about 150 in-game stay out. No extra Steam calls.
GET /api/v1/salesSale calendarhttps://api.pcgdb.com/api/v1/sales[ { "name": "Steam Autumn Sale 2026", "kind": "seasonal", "starts": "2026-10-01T00:00:00Z", "ends": "2026-10-08T00:00:00Z", "source": "https://partner.steamgames.com/doc/marketing/upcoming_events" } ]GET /api/v1/deals?cc=usCurrent discounts for a regionhttps://api.pcgdb.com/api/v1/deals?cc=us[ { "appid": 570, "name": "Dota 2", "cc": "us", "currency": "USD", "cents": 0, "initialCents": 0, "discount": 0 } ]cc is a store region. cents are the current price in the smallest currency unit.
GET /api/v1/updatesRecent depot build IDshttps://api.pcgdb.com/api/v1/updates[ { "appid": 730, "name": "Counter-Strike 2", "buildId": 20458890, "branch": "public", "at": "2026-08-24T23:39:20Z" } ]Recent depot build IDs PCGDB has sampled.
One title12Card, players, prices, news
GET /api/v1/apps/{id}App cardhttps://api.pcgdb.com/api/v1/apps/730{ "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false }Optional ?cc=us for regional price fields. Live objects may also include dlc, editions, and spark24.
GET /api/v1/apps/{id}/similarSame tags, similar review volumehttps://api.pcgdb.com/api/v1/apps/730/similar[ { "appid": 730, "name": "Counter-Strike 2", "type": "game", "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg", "developers": "Valve", "publishers": "Valve", "free": true, "mature": false, "requiredAge": 0, "tags": [ "Action", "Free to Play", "Multiplayer" ], "currentPlayers": 499779, "peakAll": 1337437, "peak24h": 1337437, "delta24h": -58331, "reviewPositive": 8452479, "reviewNegative": 1387191, "releaseDate": "Aug 21, 2012", "comingSoon": false, "shortDescription": "For over two decades, Counter-Strike has offered an elite competitive experience…", "usCents": 0, "usInitialCents": 0, "usLowCents": 0, "steamDeck": "playable", "steamAi": false } ]Slim AppCard[]. Shares at least one of this title's first three store tags and the same review-count band. A mechanical overlap, not a recommendation.
GET /api/v1/apps/{id}/playersPlayer serieshttps://api.pcgdb.com/api/v1/apps/730/players{ "appid": 730, "current": 492943, "peak24h": 1337437, "peakAll": 1337437, "intervalMs": 60000, "sampledAt": "2026-09-08T23:31:00Z", "steam": { "exhausted": false }, "gapFill": { "active": false, "since": null, "series": [] }, "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }series is { t, v }[] (t unix seconds, v in-game count). Default is all-time downsampled to about 2000 min/max points plus the last 7 days at full poll cadence. gapFill.active is true only when catalog-wide Steam samples are stale; the fill series is an hour-of-week guess, not a live count and not a maintenance zero.
GET /api/v1/apps/{id}/players?from=&to=Player series, raw window (unix seconds, max 7 days)https://api.pcgdb.com/api/v1/apps/730/players?from=1788660090&to=1789264890{ "appid": 730, "current": 492943, "peak24h": 1337437, "peakAll": 1337437, "intervalMs": 60000, "sampledAt": "2026-09-08T23:31:00Z", "steam": { "exhausted": false }, "series": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. Same JSON shape as /players.
GET /api/v1/apps/{id}/forecast?horizon=7dPlayer estimates (24h, 7d, 14d, 21d, 30d)https://api.pcgdb.com/api/v1/apps/730/forecast?horizon=24h{ "ok": true, "horizonHours": 24, "lines": { "fit": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "low": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "likely": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "high": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ], "tags": [ { "t": 1788660090, "v": 547351 }, { "t": 1788663690, "v": 612004 } ] }, "mapePct": 14, "missPct": 18, "trajectory": "steady", "peak": { "t": 1788746490, "v": 512000 }, "model": { "now": 499779, "daily": 0.012, "sigma": 0.14, "mapePct": 14, "season": "title", "trajectory": "steady", "kind": "steady" } }horizon is 24h, 7d, 14d, 21d, or 30d. ok is false with reason short_history when too few samples exist (horizonHours is still set). tags is omitted without a tag cohort. fit is the same model drawn on hours already sampled. trajectory is launch, sale, growth, or steady. model.kind is fade (launch and post-discount: also floor and halfLifeHours), growth (climbing weeks: also ceiling), or steady. mapePct is the hour-of-week residual as a percent, used for the low/high band. missPct is a 48-hour walk-forward miss on titles with enough history, not an accuracy badge. peak is the highest likely point in the chosen window. These lines are guesses, not Valve forecasts.
GET /api/v1/apps/{id}/pricesRegional priceshttps://api.pcgdb.com/api/v1/apps/730/prices[ { "cc": "us", "currency": "USD", "cents": 0, "initialCents": 0, "discount": 0, "sampledAt": "2026-09-06T02:03:08Z" } ]One row per sampled store region. cents are in the smallest currency unit.
GET /api/v1/apps/{id}/prices/history?cc=usPrice history + historical lowhttps://api.pcgdb.com/api/v1/apps/730/prices/history?cc=us{ "appid": 730, "cc": "us", "lowCents": 0, "lowAt": "2026-09-05T22:01:00Z", "series": [ { "t": 1788660090, "v": 0 }, { "t": 1788746490, "v": 0 } ] }cc is required. series v is cents. lowCents is the lowest sampled price in that region. Default series is all-time downsampled plus the last 7 days raw.
GET /api/v1/apps/{id}/prices/history?cc=us&from=&to=Price history, raw window (unix seconds, max 7 days)https://api.pcgdb.com/api/v1/apps/730/prices/history?cc=us&from=1788660090&to=1789264890{ "appid": 730, "cc": "us", "lowCents": 0, "lowAt": "2026-09-05T22:01:00Z", "series": [ { "t": 1788660090, "v": 0 }, { "t": 1788746490, "v": 0 } ] }from and to are unix seconds. Window is at most 7 days. series is raw samples in that window. Omit both for the default series. cc is still required. lowCents stays the all-time sampled low.
GET /api/v1/apps/{id}/buildsDepot build historyhttps://api.pcgdb.com/api/v1/apps/730/builds[ { "buildId": 20458890, "branch": "public", "description": "", "timeUpdated": "2026-08-24T23:39:20Z" } ]GET /api/v1/apps/{id}/newsPublic Steam newshttps://api.pcgdb.com/api/v1/apps/730/news[ { "gid": "1841579228676851", "title": "Counter-Strike 2 Update", "url": "https://steamcommunity.com/games/730/announcements", "at": "2026-08-24T23:39:20Z", "feed": "Community Announcements" } ]GET /api/v1/apps/{id}/reviews?lang=englishReview summaryhttps://api.pcgdb.com/api/v1/apps/730/reviews?lang=english{ "recent": { "desc": "Very Positive", "total": 9845359, "positive": 8456710, "negative": 1388649 }, "language": { "desc": "Very Positive", "total": 2610407, "positive": 2245824, "negative": 364583 }, "languageCode": "english", "languageLabel": "English reviews" }lang is a Steam review language code, default english.
GET /api/v1/apps/{id}/regionsRegion-locked SKUshttps://api.pcgdb.com/api/v1/apps/730/regions[ { "cc": "us", "available": true, "reason": "" } ]Region-locked SKU flags PCGDB has sampled.