Get compact player metrics
Player metrics for all published catalog games, without catalog metadata, prices or chart series. This endpoint is not restricted to the Steam top 100.
**Most played:**
- Current players: `/steam/api/apps/metrics?sort=players&order=desc&limit=500`.
- Estimated player-hours over 30 days: `/steam/api/apps/metrics?sort=hoursplayed30d&order=desc&limit=500`.
- Highest 30-day peak: `/steam/api/apps/metrics?sort=peak30d&order=desc&limit=500`.
- Supply your API key with X-Api-Key, or add a non-empty key query parameter.
**Retrieve every game:**
- Start with `/steam/api/apps/metrics?sort=appid&order=asc&limit=500`.
- The default page size is 100; the maximum is 500. Always returns a data array and a pagination object, even for a single appid.
- Pass `pagination.nextcursor` as the next request cursor, keeping filters, sort, order and limit unchanged. Stop when nextcursor is null. There is no unbounded all-games response.
- Use sort=appid to include games without player measurements. Sorting by players or another nullable metric excludes games without that value.
- /steam/api/apps/filters lists available filter values and sort keys. All supported filters are documented below, including catalog filters whose fields are omitted from this compact response.
**Incremental synchronization:**
- Use metrics_updated_since with sort=metricsupdatedat&order=asc. Follow every nextcursor before advancing your watermark, overlap successive polls by at least ten minutes and upsert by appid.
- Responses may be cached for up to five minutes; no_cache=1 bypasses the response cache but does not force a new Steam measurement.
- playersupdatedat is the Steam measurement time; metricsupdatedat also advances for rollups and failed attempts. This is a current-state feed, not an event log or a frozen snapshot across pages.
Request
- Base URL: https://www.steamwebapi.com
- URL: https://www.steamwebapi.com/steam/api/apps/metrics
- Auth: API key in query parameter key
Query parameters
Your API key, required only when X-Api-Key is not sent. With header authentication, omit key entirely rather than sending an empty key parameter.
Filter by up to 100 comma separated appids. Always returns a paginated list, including for one appid. Without this filter, all published catalog games are eligible.
Games per page: default 100, minimum 1, maximum 500. This is a page size, not a total-result limit. Values above 500 are capped at 500. Follow pagination.nextcursor until null to retrieve every matching game.
Opaque cursor from the previous response (pagination.nextcursor). Only valid with the same sort and order.
Sort keys: appid (Steam app ID), name (alphabetical), players (latest concurrent players), peak30d (30-day peak), hoursplayed30d (estimated player-hours over 30 days), peakalltime (all-time peak), change24h (24-hour player change), reviews (total reviews), reviews30d (recent review count), rating and rating30d (Wilson scores), price (final price), discount (discount percentage), releasedate (release date), updatedat (catalog update), metricsupdatedat (player metric update). For most played right now, use sort=players&order=desc. For most played over 30 days, use sort=hoursplayed30d&order=desc. Default: appid. Sort keys may use catalog fields omitted from this compact response. Games without a value for the selected sort key are excluded; use appid to include unmeasured games. Price sorts use currency.
Sort direction. Defaults to ascending for appid, name, price and metricsupdatedat and descending for every other sort.
At least two characters. Matches anywhere in the game name, or the start of a developer, publisher, genre or tag.
Steam genre, for example Action. Up to 5 comma separated values, all must match.
Steam user tag, for example FPS or Roguelike. Up to 5 comma separated values, all must match. See /steam/api/apps/filters.
Leave out games with any of these tags, up to 5 comma separated values.
Steam store category, for example Co-op or Full controller support. Up to 5 comma separated values, all must match.
Supported language (interface, subtitles or audio), for example German. Up to 5 comma separated values, all must match.
Language with full audio. Up to 5 comma separated values, all must match.
Games released for this platform.
Exact developer name, for example Valve.
Exact publisher name.
Only free-to-play games (1) or only paid games (0).
Storefront used by price filters and price sorts. Price data is used for selection but omitted from this compact response.
Minimum final price in minor units of currency (1999 = 19.99).
Maximum final price in minor units of currency. Free games are included unless is_free=0.
Only discounted games (1) or only games at full price (0) in the storefront of currency.
Minimum discount in percent, 0 to 100.
Minimum share of positive reviews, 0 to 100. Combine with min_reviews to ignore games with a handful of reviews.
Maximum share of positive reviews, 0 to 100.
Only games with at least this many reviews.
Only games with at least this many reviews in the last 30 days.
Only games with at least this many current players.
Only unreleased games (1) or only released games (0).
Only games released on or after this date (Y-m-d).
Only games released on or before this date (Y-m-d).
Games with (1) or without (0) sexual content, by Steam content descriptors.
Inclusive UTC timestamp for player metric changes. Prefer /steam/api/apps/metrics for compact synchronization.
Only catalog changes at or after this UTC timestamp; excludes player samples and rollups. Poll /steam/api/apps/metrics separately for player metrics.
Bypass the response cache for this request.
Response format: json (default), csv, xml, html, gzip, zip, ndjson, mysql, pgsql, mongo.
Pretty-print the JSON response.
Response
A data array of player metrics plus pagination: limit, count, sort, order, currency and nextcursor. nextcursor is null on the last page. The default response contains at most 100 games, or up to 500 with limit=500.
Changes
No recorded changes to this operation across all 1 revision of this API.