---
title: "Get compact player metrics"
method: GET
path: "/steam/api/apps/metrics"
tags: ["Apps"]
---

# Get compact player metrics

`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`

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.

## Query parameters

- `appid` string
- `limit` integer
- `sort` 'appid' | 'name' | 'players' | 'peak30d' | 'hoursplayed30d' | 'peakalltime' | 'change24h' | 'reviews' | 'reviews30d' | 'rating' | 'rating30d' | 'price' | 'discount' | 'releasedate' | 'updatedat' | 'metricsupdatedat'
- `order` 'asc' | 'desc'
- `search` string
- `tag` string
- `exclude_tag` string
- `platform` 'windows' | 'mac' | 'linux'
- `is_free` 0 | 1
- `currency` 'USD' | 'EUR' | 'GBP' | 'BRL' | 'RUB' | 'JPY' | 'CNY' | 'INR' | 'UAH' | 'KZT' | 'AUD' | 'CAD' | 'PLN' | 'CHF'
- `min_price` integer
- `max_price` integer
- `on_sale` 0 | 1
- `min_discount` integer
- `min_review_percent` number
- `max_review_percent` number
- `min_reviews` integer
- `min_reviews30d` integer
- `min_players` integer
- `coming_soon` 0 | 1
- `adult` 0 | 1
- `metrics_updated_since` string, date-time
- `updated_since` string
- `no_cache` '0' | '1'
- `format` string
- `pretty` '0' | '1'

## Response `200`

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.

## Other responses

- `400`: Invalid filter, sort key, order or cursor. A cursor must match its original sort and order.
- `401`: API key missing or invalid.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/steamwebapi/apis/steamwebapi-com-third-party-steam-market-api-documentation.md) · [All operations](https://skmtc.dev/steamwebapi/apis/steamwebapi-com-third-party-steam-market-api-documentation/llms.txt) · [OpenAPI document](https://skmtc.dev/steamwebapi/apis/steamwebapi-com-third-party-steam-market-api-documentation/revisions/f9a4109cbda6?raw)
