Apps

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.
get/steam/api/apps/metrics

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.

appidstring
Example:730

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.

limitinteger

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'appid' | 'name' | 'players' | 'peak30d' | 'hoursplayed30d' | 'peakalltime' | 'change24h' | 'reviews' | 'reviews30d' | 'rating' | 'rating30d' | 'price' | 'discount' | 'releasedate' | 'updatedat' | 'metricsupdatedat'

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.

order'asc' | 'desc'

Sort direction. Defaults to ascending for appid, name, price and metricsupdatedat and descending for every other sort.

searchstring
Example:valve

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.

tagstring
Example:FPS,Tactical

Steam user tag, for example FPS or Roguelike. Up to 5 comma separated values, all must match. See /steam/api/apps/filters.

exclude_tagstring
Example:Early Access

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.

platform'windows' | 'mac' | 'linux'

Games released for this platform.

Exact developer name, for example Valve.

Exact publisher name.

is_free0 | 1

Only free-to-play games (1) or only paid games (0).

currency'USD' | 'EUR' | 'GBP' | 'BRL' | 'RUB' | 'JPY' | 'CNY' | 'INR' | 'UAH' | 'KZT' | 'AUD' | 'CAD' | 'PLN' | 'CHF'

Storefront used by price filters and price sorts. Price data is used for selection but omitted from this compact response.

min_priceinteger

Minimum final price in minor units of currency (1999 = 19.99).

max_priceinteger
Example:2000

Maximum final price in minor units of currency. Free games are included unless is_free=0.

on_sale0 | 1

Only discounted games (1) or only games at full price (0) in the storefront of currency.

min_discountinteger

Minimum discount in percent, 0 to 100.

min_review_percentnumber
Example:90

Minimum share of positive reviews, 0 to 100. Combine with min_reviews to ignore games with a handful of reviews.

max_review_percentnumber
Example:70

Maximum share of positive reviews, 0 to 100.

min_reviewsinteger

Only games with at least this many reviews.

min_reviews30dinteger

Only games with at least this many reviews in the last 30 days.

min_playersinteger

Only games with at least this many current players.

coming_soon0 | 1

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).

adult0 | 1

Games with (1) or without (0) sexual content, by Steam content descriptors.

metrics_updated_sincestring date-time

Inclusive UTC timestamp for player metric changes. Prefer /steam/api/apps/metrics for compact synchronization.

updated_sincestring
Example:2026-09-15T00:00:00Z

Only catalog changes at or after this UTC timestamp; excludes player samples and rollups. Poll /steam/api/apps/metrics separately for player metrics.

no_cache'0' | '1'

Bypass the response cache for this request.

formatstring

Response format: json (default), csv, xml, html, gzip, zip, ndjson, mysql, pgsql, mongo.

pretty'0' | '1'

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.