Developers · API v1

steampeek API

The Steam data behind steampeek, for your own code and AI agents: games, live player counts, chart ranks and their history, as JSON over HTTPS or as tools for an MCP client. Both come with the Studio plan and use the same key and the same allowance.

Base URL
https://steampeek.app/api/v1
Authentication
Authorization: Bearer spk_…
Format
JSON: { data, meta } or { error }
Allowance
50,000 units a month, 5,000 a day

35 endpoints, every one documented below with a live Try it panel, and 35 MCP tools.

Jump to a section or endpoint

Start here

Quickstart

  1. Create a key

    The API comes with the Studio plan. On the API dashboard, create a key and copy it. The full key is shown once, when you create it: steampeek keeps only a hash of it.

  2. Keep it out of your code

    Put it in an environment variable (or your platform's secret store). Every example on this page reads it from there.

    Shell
    export STEAMPEEK_API_KEY="spk_…"
  3. Call an endpoint: Game

    Request
    curl 'https://steampeek.app/api/v1/games/1145360' \
      -H "Authorization: Bearer $STEAMPEEK_API_KEY"

    Every endpoint below has the same call in JavaScript and Python, and a Try it panel that sends it from this page.

  4. Read the answer

    A success is { data, meta }: data is what each endpoint documents, and meta holds the call's request_id, what it cost (units) and endpoint details such as a history window. Headers repeat the cost and the rate limit:

    Response headers
    HTTP/2 200
    content-type: application/json
    cache-control: private, no-store
    x-request-id: 0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90
    x-ratelimit-limit: 60
    x-ratelimit-remaining: 59
    x-ratelimit-reset: 1791460860
    x-units-charged: 1
    x-units-remaining-day: 4879
    x-units-remaining-month: 43769
    Response body
    {
      "data": {
        "appid": 1145360,
        "name": "Hades",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1145360/header.jpg?t=1758127023",
        "store_url": "https://store.steampowered.com/app/1145360/",
        "steampeek_url": "https://steampeek.app/app/1145360",
        "release": {
          "date_text": "Sep 17, 2020",
          "timestamp": 1600353507,
          "precision": null,
          "coming_soon": false
        },
        "price": {
          "is_free": false,
          "currency": "USD",
          "final": 2499,
          "initial": 2499,
          "discount_percent": 0
        },
        "reviews": {
          "total": 286667,
          "percent_positive": 97,
          "label": "Overwhelmingly Positive"
        },
        "developers": [
          "Supergiant Games"
        ],
        "publishers": [
          "Supergiant Games"
        ],
        "genres": [
          "Action",
          "Indie",
          "RPG"
        ],
        "tags": [
          "Action Roguelike",
          "Roguelite",
          "Hack and Slash",
          "Indie",
          "Mythology"
        ],
        "platforms": {
          "windows": true,
          "mac": true,
          "linux": false
        },
        "short_description": "Defy the god of the dead as you hack and slash out of the Underworld in this rogue-like dungeon crawler from the creators of Bastion, Transistor, and Pyre.",
        "early_access_exit_timestamp": null,
        "publisher_pages": [
          {
            "name": "Supergiant Games",
            "clanid": 3584665
          }
        ],
        "categories": [
          "Captions available",
          "Family Sharing",
          "Full controller support",
          "Remote Play on Phone",
          "Remote Play on Tablet"
        ],
        "metacritic_score": 93,
        "website": "http://www.supergiantgames.com",
        "stats": {
          "players_now": 4654,
          "players_rank": 246,
          "peak_24h": 7388,
          "peak_24h_at": 1791468000,
          "all_time_peak": 10019,
          "all_time_peak_at": 1777215600,
          "followers": 308540,
          "topsellers": {
            "rank_now": 267,
            "best_24h": 215,
            "best_24h_at": 1791440100,
            "best_all_time": 8,
            "best_all_time_at": 1714773900
          },
          "more_like_this": {
            "inbound": 3718,
            "change_1d": 51,
            "change_7d": 213,
            "change_30d": 1942,
            "updated_at": 1791428400
          }
        }
      },
      "meta": {
        "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
        "units": {
          "charged": 1,
          "day": {
            "used": 121,
            "limit": 5000,
            "resets_at": "2026-10-09T00:00:00.000Z"
          },
          "month": {
            "used": 6231,
            "limit": 50000,
            "resets_at": "2026-11-01T00:00:00.000Z"
          }
        }
      }
    }

    Times in responses are epoch seconds (UTC) unless a field says otherwise; time parameters take epoch seconds or ISO 8601 (2026-01-31, 2026-01-31T12:00:00Z). Prices are in cents, and a value that isn't known is null. Errors have a shape of their own: Errors.

Authentication

Send the key in a header with every request. Either header works:

Preferred
Authorization: Bearer spk_…
Also accepted
X-API-Key: spk_…
  • Format. A key is spk_ followed by 38 letters and digits, 42 characters in all. The last 6 are a checksum, so a mistyped key is refused (invalid_key) before it is even looked up.
  • Never in a URL. A request that carries a key in its query string (?api_key=, ?key=, ?token= and the like) is refused with key_in_url, because URLs end up in logs, proxies and browser history. If that happened with a real key, revoke it.
  • Never in front-end code. Anything shipped to a browser or an app can be read, and so can a key committed to a repository. Call the API from a server, a script or an MCP client, with the key in an environment variable or a secret store.
  • Revoke on the dashboard. If a key may have leaked, revoke it on the API dashboard: it stops working at once (revoked_key). An account can have 3 active keys, so one per app or environment lets you replace one without touching the others.
  • Tied to the plan. Keys work while the account is on the Studio plan. If the plan ends, calls answer plan_required (403), and the same keys work again once it is active.

Units & limits

A call costs units by how much work it is: a lookup 1 unit, a history series 3 units, a forecast 10 units. The account gets a monthly allowance, with a daily cap so a month can't go in one afternoon.

units a month, per account
50,000units a month, per account
units a day at most
5,000units a day at most
requests a minute, per key
60requests a minute, per key
active keys per account
3active keys per account

What each endpoint costs

How the allowance works

  • It belongs to the account: every key and the MCP server draw from the same pool.
  • Only successful calls cost units. Invalid parameters, unknown games, calls refused by a limit and errors on our side are free.
  • The daily cap resets at 00:00 UTC and the monthly pool on the 1st of each month at 00:00 UTC. Unused units don't carry over.
  • There are no overage charges. When the day's or the month's units run out, calls answer 429 quota_exceeded until the reset (Retry-After says how many seconds, details.resets_at when).
  • Each key may make 60 requests a minute. Past that, calls answer 429 rate_limited with Retry-After. A separate, higher limit per IP address stops floods of made-up keys; ordinary use doesn't reach it.

Seeing what's left

Every successful response reports its cost in meta.units: charged, and on calls that cost units, day and month with used (this call included), limit and resets_at. The free GET /api/v1/account/usage shows today's and this month's units, the calling key's share and a breakdown by endpoint.

meta.units
{
  "charged": 3,
  "day": {
    "used": 123,
    "limit": 5000,
    "resets_at": "2026-10-09T00:00:00.000Z"
  },
  "month": {
    "used": 6233,
    "limit": 50000,
    "resets_at": "2026-11-01T00:00:00.000Z"
  }
}

The same numbers come back as headers:

Response headers about limits and units
HeaderMeaning
X-Request-IdIdentifies the call. Quote it if you report a problem.
X-RateLimit-LimitRequests allowed per minute on this key.
X-RateLimit-RemainingRequests left in the current minute.
X-RateLimit-ResetWhen the minute window resets, epoch seconds.
X-Units-ChargedUnits this call cost: 0 for a free endpoint, and on every error (errors are never charged).
X-Units-Remaining-DayUnits left today, on calls that cost units.
X-Units-Remaining-MonthUnits left this month, on calls that cost units.
Retry-AfterOn a 429: seconds to wait before trying again.

Errors

Errors use HTTP status codes and one JSON shape. Branch on error.code, which is stable; message is written for people and may change. details carries specifics (the invalid parameters, the period that ran out), and request_id (also the X-Request-Id header) identifies the call if you write to support@steampeek.app.

400 Bad Request
{
  "error": {
    "code": "invalid_params",
    "message": "Some parameters are invalid.",
    "details": {
      "issues": [
        {
          "param": "limit",
          "message": "Too big: expected number to be <=50"
        }
      ]
    },
    "docs_url": "https://steampeek.app/docs/api#errors"
  },
  "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90"
}
Every error code the API returns
CodeStatusWhat it means
missing_key401No API key. Send it as Authorization: Bearer spk_… or X-API-Key: spk_….
invalid_key401The key is malformed or doesn't exist. Keys are 42 characters and start with spk_.
revoked_key401The key was revoked on the API dashboard. Create a new one there.
key_in_url400A key was sent in the URL. URLs end up in logs and browser history, so the API refuses them: use a header instead (and consider revoking that key).
plan_required403The key's account isn't on the Studio plan (or its subscription has ended). Keys start working again when Studio is active.
rate_limited429More than the per-key requests per minute. Wait the number of seconds in Retry-After.
quota_exceeded429This call would take the account past its daily or monthly units. details.period says which; Retry-After and details.resets_at say when it resets. There are no overage charges.
invalid_params400A parameter is missing or invalid. details.issues lists each one. Invalid calls are never charged.
not_found404The game, publisher or resource doesn't exist (or isn't tracked). Not charged.
method_not_allowed405The API is read-only: every endpoint is a GET.
not_ready503The API is temporarily unavailable. Try again shortly.
internal_error500Something failed on our side. Not charged. Include the request_id if you report it.

Retrying: a 429 says how long to wait in Retry-After; a 500 or 503 is worth one more try after a few seconds. Other 4xx answers won't change until the request does.

For AI agents

MCP server

steampeek hosts a Model Context Protocol server, so an AI agent such as Claude or Cursor can use the API as tools, with no code of your own.

Endpoint
POST https://steampeek.app/mcp
Streamable HTTP, stateless, tools only
Authentication
Authorization: Bearer spk_…
The same API key as for REST calls

Claude Code

Terminal
claude mcp add --transport http steampeek https://steampeek.app/mcp --header "Authorization: Bearer spk_…"

Claude Desktop, Cursor and other JSON configs

Add the server to the client's MCP config (in Cursor, .cursor/mcp.json or the global ~/.cursor/mcp.json), with your key in place of spk_…:

mcp.json
{
  "mcpServers": {
    "steampeek": {
      "url": "https://steampeek.app/mcp",
      "headers": {
        "Authorization": "Bearer spk_…"
      }
    }
  }
}
Your client only starts local servers?

Bridge to the hosted server with mcp-remote (needs Node.js). It sends the header from env on every call:

Config
{
  "mcpServers": {
    "steampeek": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://steampeek.app/mcp",
        "--header",
        "Authorization:${STEAMPEEK_AUTH}"
      ],
      "env": {
        "STEAMPEEK_AUTH": "Bearer spk_…"
      }
    }
  }
}

Tools

Every endpoint below is also a tool: the badge on its card gives the tool's name. A tool's input is the endpoint's parameters and its result is the same { data, meta } JSON. Tool calls cost the same units as REST calls and come out of the same allowance.

MCP tools and what each call costs
ToolEndpointUnits
games_searchSearch games1
games_getGame1
games_playersPlayer count history3
games_followersFollowers history3
games_topsellersTop sellers rank history3
games_wishlist_rankWishlist rank history3
games_new_and_trendingNew & Trending position history3
games_new_and_trending_summaryNew & Trending reach1
games_reviewsReviews history3
games_pricesPrice history3
games_more_like_thisMore Like This history3
games_similarSimilar games (More like this)1
games_cited_byGames that list this one (More like this)1
games_regional_ranksTop sellers rank in every country (one day)3
games_topsellers_statsTop sellers rank summary1
games_eventsSales and events1
games_wishlist_estimateEstimated wishlists3
games_forecastLaunch forecast10
charts_listChart1
charts_new_and_trendingNew & Trending1
charts_moversBiggest movers1
charts_momentumMomentum1
catalog_platform_statsCatalog stats1
catalog_filter_optionsFilter values0
catalog_filterFilter the catalog3
releases_listReleased games1
releases_upcomingRelease calendar1
releases_hypeHype board1
publishers_listPublisher list1
publishers_searchSearch publishers1
publishers_getPublisher1
publishers_gamesPublisher's games1
publishers_followersPublisher followers history3
publishers_playersPublisher players history3
account_usageUsage and limits0

Endpoints

Games

GET/api/v1/games/{appid}

Game

1 unit· lookupMCPgames_get

One game: store facts plus live stats (players, peaks, followers, chart ranks).

Everything on a steampeek game page's header in one call. Stats are the latest samples: players hourly, top-sellers every 10 minutes, followers daily.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

Response

dataobject
  • appidinteger
  • namestring
  • typestringnullable

    game, dlc, demo, music, …

  • header_imagestringnullable
  • store_urlstring
  • steampeek_urlstring
  • releaseobject
    Fields (4)
    • date_textstringnullable

      The release date as the Steam store prints it ("21 Aug, 2012", "Q3 2026", "To be announced").

    • timestampintegernullable

      Release moment, epoch seconds. Exact to the hour only when precision is "date_full"; otherwise the end of the announced period.

    • precisionstringnullable

      How exact timestamp is: date_full, date_month, date_quarter, date_year, text_comingsoon or text_tba.

    • coming_soonbooleannullable

      Not released yet.

  • priceobject
    Fields (5)
    • is_freebooleannullable
    • currencystringnullable

      ISO 4217 code of the US store price (USD).

    • finalintegernullable

      Current price in the currency's minor unit (cents).

    • initialintegernullable

      Price before the discount, minor unit.

    • discount_percentintegernullable
  • reviewsobject
    Fields (3)
    • totalintegernullable
    • percent_positivenumbernullable
    • labelstringnullable

      Steam's own summary ("Very Positive"; "6 user reviews" below Steam's threshold).

  • developersarray of strings
  • publishersarray of strings
  • genresarray of strings
  • tagsarray of strings

    Up to 10 user tags, most-voted first.

  • platformsobject
    Fields (3)
    • windowsboolean
    • macboolean
    • linuxboolean
  • short_descriptionstringnullable
  • early_access_exit_timestampintegernullable

    Scheduled 1.0 release of an Early Access game, epoch seconds.

  • publisher_pagesarray of objects

    Publishers with a Steam curator page (the clanid works with /publishers/{clanid}).

    Item fields (2)
    • namestring
    • clanidinteger
  • categoriesarray of strings
  • metacritic_scoreintegernullable
  • websitestringnullable
  • statsobject
    Fields (9)
    • players_nowintegernullable

      Concurrent players at the latest hourly sample.

    • players_rankintegernullable

      Rank among the most-played games right now.

    • peak_24hintegernullable
    • peak_24h_atintegernullable

      Epoch seconds (UTC).

    • all_time_peakintegernullable

      Highest concurrent players since steampeek started tracking the game.

    • all_time_peak_atintegernullable

      Epoch seconds (UTC).

    • followersintegernullable

      Steam community followers at the latest daily snapshot.

    • topsellersobject
      Fields (5)
      • rank_nowintegernullable

        Position on Steam's global Top Sellers chart at the latest 10-minute snapshot (null when outside the chart).

      • best_24hintegernullable

        Best global position in the 24 hours to the last snapshot that listed the game (best_24h_at says when).

      • best_24h_atintegernullable

        Epoch seconds (UTC).

      • best_all_timeintegernullable
      • best_all_time_atintegernullable

        Epoch seconds (UTC).

    • more_like_thisobject
      Fields (5)
      • inboundintegernullable

        How many games' "More like this" shelves list this one.

      • change_1dintegernullable
      • change_7dintegernullable
      • change_30dintegernullable
      • updated_atintegernullable

        Epoch seconds (UTC).

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "appid": 1145360,
    "name": "Hades",
    "type": "game",
    "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1145360/header.jpg?t=1758127023",
    "store_url": "https://store.steampowered.com/app/1145360/",
    "steampeek_url": "https://steampeek.app/app/1145360",
    "release": {
      "date_text": "Sep 17, 2020",
      "timestamp": 1600353507,
      "precision": null,
      "coming_soon": false
    },
    "price": {
      "is_free": false,
      "currency": "USD",
      "final": 2499,
      "initial": 2499,
      "discount_percent": 0
    },
    "reviews": {
      "total": 286667,
      "percent_positive": 97,
      "label": "Overwhelmingly Positive"
    },
    "developers": [
      "Supergiant Games"
    ],
    "publishers": [
      "Supergiant Games"
    ],
    "genres": [
      "Action",
      "Indie",
      "RPG"
    ],
    "tags": [
      "Action Roguelike",
      "Roguelite",
      "Hack and Slash",
      "Indie",
      "Mythology"
    ],
    "platforms": {
      "windows": true,
      "mac": true,
      "linux": false
    },
    "short_description": "Defy the god of the dead as you hack and slash out of the Underworld in this rogue-like dungeon crawler from the creators of Bastion, Transistor, and Pyre.",
    "early_access_exit_timestamp": null,
    "publisher_pages": [
      {
        "name": "Supergiant Games",
        "clanid": 3584665
      }
    ],
    "categories": [
      "Captions available",
      "Family Sharing",
      "Full controller support",
      "Remote Play on Phone",
      "Remote Play on Tablet"
    ],
    "metacritic_score": 93,
    "website": "http://www.supergiantgames.com",
    "stats": {
      "players_now": 4654,
      "players_rank": 246,
      "peak_24h": 7388,
      "peak_24h_at": 1791468000,
      "all_time_peak": 10019,
      "all_time_peak_at": 1777215600,
      "followers": 308540,
      "topsellers": {
        "rank_now": 267,
        "best_24h": 215,
        "best_24h_at": 1791440100,
        "best_all_time": 8,
        "best_all_time_at": 1714773900
      },
      "more_like_this": {
        "inbound": 3718,
        "change_1d": 51,
        "change_7d": 213,
        "change_30d": 1942,
        "updated_at": 1791428400
      }
    }
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}

Endpoints

Game history

GET/api/v1/games/{appid}/players

Player count history

3 units· seriesMCPgames_players

Concurrent players over time, hourly.

Hourly samples for windows up to 30 days, 6-hour maxima up to 90 days, daily maxima beyond that (meta.bucket_seconds says which). In the hourly series an hour with no sample reads 0 (Steam reported nobody playing, or the game wasn't sampled), except inside a gap of up to 6 hours between two non-zero samples: those hours are left out, since a sample was missed, and the series joins the two.

An app id steampeek has no data for (or that doesn't exist) gets an empty answer, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 730

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 30 days before to. Use 0 for "since tracking began".

    example 2026-10-01

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-10-01T03:00:00Z

Response

dataarray of objects

Each item:

  • timestampinteger

    Epoch seconds (UTC).

  • playersinteger

    Concurrent players (the maximum within the bucket when bucketed).

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • truncatedboolean

    True when the window held more points than one answer carries, so the series ends early: ask again with from just after the last point (or a shorter window) for the rest.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/730/players?from=2026-10-01&to=2026-10-01T03:00:00Z' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1790812800,
      "players": 470743
    },
    {
      "timestamp": 1790816400,
      "players": 520027
    },
    {
      "timestamp": 1790820000,
      "players": 537993
    }
  ],
  "meta": {
    "from": 1790812800,
    "to": 1790823600,
    "bucket_seconds": 0,
    "truncated": false,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/followers

Followers history

3 units· seriesMCPgames_followers

Steam community followers over time, one snapshot a day.

Followers are snapshotted about once a day, released or not (DLC less often); the time of day varies. resolution thins the series to one point per UTC day, week (Monday first) or month: each point is the last snapshot in its period, with that snapshot's own timestamp.

An app id steampeek has no data for (or that doesn't exist) gets an empty answer, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 30 days before to. Use 0 for "since tracking began".

    example 2026-10-01

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-10-04

  • resolutionstringqueryoptional

    One point per UTC day (default), week or month: the last snapshot in each.

    default daily

    One ofdailyweeklymonthly

Response

dataarray of objects

Each item:

  • timestampinteger

    Epoch seconds (UTC).

  • followersinteger

    Steam community followers at that snapshot.

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • resolutionstring
    One ofdailyweeklymonthly
  • truncatedboolean

    True when the window held more points than one answer carries, so the series ends early: ask again with from just after the last point (or a shorter window) for the rest.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360/followers?from=2026-10-01&to=2026-10-04' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1790895813,
      "followers": 308437
    },
    {
      "timestamp": 1790982146,
      "followers": 308466
    },
    {
      "timestamp": 1791068701,
      "followers": 308491
    }
  ],
  "meta": {
    "from": 1790812800,
    "to": 1791072000,
    "resolution": "daily",
    "truncated": false,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/topsellers

Top sellers rank history

3 units· seriesMCPgames_topsellers

The game's position on Steam's Top Sellers chart over time, worldwide or in one country.

Worldwide by default; cc picks a country's chart. The global chart is sampled every 10 minutes, each country's every hour. Windows up to 7 days return every sample; longer ones return the best position per hour (up to 30 days), per 6 hours (up to 90 days) or per day (meta.bucket_seconds says which). A gap means the game wasn't on the chart then.

An app id steampeek has no data for (or that doesn't exist) gets an empty answer, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 730

  • ccstringqueryoptional

    Store region: "global" or one of the 28 tracked countries (ISO 3166-1 alpha-2, lowercase).

    default global · example global

    One of 29 values
    globalataubebrcachczdedkesfifrgbhkitjpkrnlnonzplrusesgthtrtwus
  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 2 days before to. Use 0 for "since tracking began".

    example 2026-10-05T12:00:00Z

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-10-05T12:30:00Z

Response

dataarray of objects

Each item:

  • timestampinteger

    Epoch seconds (UTC).

  • rankinteger

    Position on the chart, 1 = top. In a bucketed series, the best position within the bucket.

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • truncatedboolean

    True when the window held more points than one answer carries, so the series ends early: ask again with from just after the last point (or a shorter window) for the rest.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/730/topsellers?from=2026-10-05T12:00:00Z&to=2026-10-05T12:30:00Z' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1791201900,
      "rank": 1
    },
    {
      "timestamp": 1791202500,
      "rank": 1
    },
    {
      "timestamp": 1791203100,
      "rank": 1
    }
  ],
  "meta": {
    "from": 1791201600,
    "to": 1791203400,
    "bucket_seconds": 0,
    "truncated": false,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/wishlist-rank

Wishlist rank history

3 units· seriesMCPgames_wishlist_rank

The game's position on Steam's most-wishlisted chart of upcoming games, over time.

Sampled every 2 hours. Windows up to 7 days return every sample; longer ones return the best position per hour (up to 30 days), per 6 hours (up to 90 days) or per day (meta.bucket_seconds says which). Steam takes a game off this chart when it launches, so a released game's series ends at its release, and by default you get the run-up to it (see from).

Steam publishes ranks, not wishlist counts. /games/{appid}/wishlist-estimate turns these ranks into estimated counts.

An app id steampeek has no data for (or that doesn't exist) gets an empty answer, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 3223070

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 90 days before to. When neither from nor to is given and the game is out, the window is instead the run-up to its release: the 30 days before it if it came out less than 30 days ago, 90 if less than 90, a year otherwise. Use 0 for "since tracking began".

    example 2026-10-01

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now; for a released game, to its release when from isn't given either (Steam takes a game off its wishlist chart at launch, so there is nothing after it).

    example 2026-10-01T06:00:00Z

Response

dataarray of objects

Each item:

  • timestampinteger

    Epoch seconds (UTC).

  • rankinteger

    Position on the chart, 1 = top. In a bucketed series, the best position within the bucket.

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • truncatedboolean

    True when the window held more points than one answer carries, so the series ends early: ask again with from just after the last point (or a shorter window) for the rest.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/3223070/wishlist-rank?from=2026-10-01&to=2026-10-01T06:00:00Z' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1790812800,
      "rank": 447
    },
    {
      "timestamp": 1790820000,
      "rank": 446
    },
    {
      "timestamp": 1790827200,
      "rank": 447
    }
  ],
  "meta": {
    "from": 1790812800,
    "to": 1790834400,
    "bucket_seconds": 0,
    "truncated": false,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/reviews

Reviews history

3 units· seriesMCPgames_reviews

Steam user review totals over time, about every 6 hours.

Every stored snapshot of the game's Steam review counts, taken four times a day. The *_added fields are the change since the previous snapshot; they can be negative when Steam removes reviews.

An app id steampeek has no data for (or that doesn't exist) gets an empty answer, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 7 days before to. Use 0 for "since tracking began".

    example 2026-10-04

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-10-05

Response

dataarray of objects

Each item:

  • timestampinteger

    Epoch seconds (UTC).

  • total_reviewsintegernullable
  • positive_reviewsintegernullable
  • percent_positivenumbernullable

    Positive share of all reviews, 0-100, to three decimals; null with no reviews.

  • reviews_addedintegernullable

    Change in total_reviews since the previous snapshot.

  • positive_addedintegernullable
  • negative_addedintegernullable
metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • truncatedboolean

    True when the window held more points than one answer carries, so the series ends early: ask again with from just after the last point (or a shorter window) for the rest.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360/reviews?from=2026-10-04&to=2026-10-05' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1791088200,
      "total_reviews": 301361,
      "positive_reviews": 294716,
      "percent_positive": 97.795,
      "reviews_added": 19,
      "positive_added": 17,
      "negative_added": 2
    },
    {
      "timestamp": 1791109800,
      "total_reviews": 301377,
      "positive_reviews": 294732,
      "percent_positive": 97.795,
      "reviews_added": 16,
      "positive_added": 16,
      "negative_added": 0
    },
    {
      "timestamp": 1791131400,
      "total_reviews": 301420,
      "positive_reviews": 294773,
      "percent_positive": 97.795,
      "reviews_added": 43,
      "positive_added": 41,
      "negative_added": 2
    }
  ],
  "meta": {
    "from": 1791072000,
    "to": 1791158400,
    "bucket_seconds": 0,
    "truncated": false,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/prices

Price history

3 units· seriesMCPgames_prices

The game's US store price over time: one point per change.

A point is stored only when the price changes, so read each one as "from this moment on". Prices are checked every 6 hours across the catalog and every 30 minutes for a busier subset, so a change is seen up to that long after Steam made it. The price in effect at from is the last change before it, which can fall outside the window: widen the window to see it.

An app id steampeek has no data for (or that doesn't exist) gets an empty answer, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 365 days before to. Use 0 for "since tracking began".

    example 2026-07-01

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-08-01

Response

dataarray of objects

Each item:

  • timestampinteger

    When the change was seen, epoch seconds (UTC).

  • currencystringnullable

    ISO 4217 code (USD: this is the US store).

  • finalintegernullable

    Price paid, in the currency's minor unit (cents).

  • initialintegernullable

    Price before the discount, minor unit.

  • discount_percentintegernullable

    Discount, 0-100.

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • truncatedboolean

    True when the window held more points than one answer carries, so the series ends early: ask again with from just after the last point (or a shorter window) for the rest.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360/prices?from=2026-07-01&to=2026-08-01' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1783618207,
      "currency": "USD",
      "final": 2499,
      "initial": 2499,
      "discount_percent": 0
    },
    {
      "timestamp": 1784657804,
      "currency": "USD",
      "final": 749,
      "initial": 2499,
      "discount_percent": 70
    },
    {
      "timestamp": 1785173408,
      "currency": "USD",
      "final": 2499,
      "initial": 2499,
      "discount_percent": 0
    }
  ],
  "meta": {
    "from": 1782864000,
    "to": 1785542400,
    "bucket_seconds": 0,
    "truncated": false,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/more-like-this

More Like This history

3 units· seriesMCPgames_more_like_this

How many games' "More like this" shelves on Steam list this game, over time. Higher is better.

Every Steam store page shows a "More like this" shelf. inbound counts the games whose shelf lists this one: how much of Steam's recommendation space points at it. One snapshot a day.

/games/{appid}/cited-by lists those games today; /games/{appid}/similar lists the games on this game's own shelf.

An app id steampeek has no data for (or that doesn't exist) gets an empty answer, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 7 days before to. Use 0 for "since tracking began".

    example 2026-10-01

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-10-04

Response

dataarray of objects

Each item:

  • timestampinteger

    Epoch seconds (UTC).

  • inboundinteger

    Games whose "More like this" shelf listed this one that day.

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • truncatedboolean

    True when the window held more points than one answer carries, so the series ends early: ask again with from just after the last point (or a shorter window) for the rest.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360/more-like-this?from=2026-10-01&to=2026-10-04' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1790823600,
      "inbound": 3505
    },
    {
      "timestamp": 1790910000,
      "inbound": 3337
    },
    {
      "timestamp": 1790996400,
      "inbound": 3049
    }
  ],
  "meta": {
    "from": 1790812800,
    "to": 1791072000,
    "bucket_seconds": 0,
    "truncated": false,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/similar

Similar games (More like this)

1 unit· lookupMCPgames_similar

The games Steam shows in the "More like this" shelf on this game's store page.

Today's shelf, refreshed once a day. Ordered by app id: Steam's own shelf order isn't kept. Apps steampeek has no record of are left out, so a page can hold fewer than page_size games; total counts them all. Each game carries its own inbound: how many shelves list it, a popularity signal.

An app id steampeek has no data for gets an empty list, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-100, default 25).

    1–100 · default 25 · example 1

Response

dataarray of objects

Each item:

  • appidinteger
  • namestring
  • typestringnullable

    game, dlc, demo, music, …

  • header_imagestringnullable
  • store_urlstring
  • steampeek_urlstring
  • releaseobject
    Fields (4)
    • date_textstringnullable

      The release date as the Steam store prints it ("21 Aug, 2012", "Q3 2026", "To be announced").

    • timestampintegernullable

      Release moment, epoch seconds. Exact to the hour only when precision is "date_full"; otherwise the end of the announced period.

    • precisionstringnullable

      How exact timestamp is: date_full, date_month, date_quarter, date_year, text_comingsoon or text_tba.

    • coming_soonbooleannullable

      Not released yet.

  • priceobject
    Fields (5)
    • is_freebooleannullable
    • currencystringnullable

      ISO 4217 code of the US store price (USD).

    • finalintegernullable

      Current price in the currency's minor unit (cents).

    • initialintegernullable

      Price before the discount, minor unit.

    • discount_percentintegernullable
  • reviewsobject
    Fields (3)
    • totalintegernullable
    • percent_positivenumbernullable
    • labelstringnullable

      Steam's own summary ("Very Positive"; "6 user reviews" below Steam's threshold).

  • developersarray of strings
  • publishersarray of strings
  • genresarray of strings
  • tagsarray of strings

    Up to 10 user tags, most-voted first.

  • platformsobject
    Fields (3)
    • windowsboolean
    • macboolean
    • linuxboolean
  • inboundintegernullable

    How many games' "More like this" shelves list this similar game (null when not tracked).

metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360/similar?page_size=1' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "appid": 250900,
      "name": "The Binding of Isaac: Rebirth",
      "type": "game",
      "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/250900/header.jpg?t=1731977365",
      "store_url": "https://store.steampowered.com/app/250900/",
      "steampeek_url": "https://steampeek.app/app/250900",
      "release": {
        "date_text": "Nov 4, 2014",
        "timestamp": 1415124000,
        "precision": null,
        "coming_soon": false
      },
      "price": {
        "is_free": false,
        "currency": "USD",
        "final": 1499,
        "initial": 1499,
        "discount_percent": 0
      },
      "reviews": {
        "total": 420021,
        "percent_positive": 96,
        "label": "Overwhelmingly Positive"
      },
      "developers": [
        "Nicalis, Inc.",
        "Edmund McMillen"
      ],
      "publishers": [
        "Nicalis, Inc."
      ],
      "genres": [
        "Action"
      ],
      "tags": [
        "Action Roguelike",
        "Roguelike",
        "Indie",
        "Replay Value",
        "Difficult"
      ],
      "platforms": {
        "windows": true,
        "mac": true,
        "linux": true
      },
      "inbound": 15361
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 1,
    "total": 20,
    "has_more": true,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/cited-by

Games that list this one (More like this)

1 unit· lookupMCPgames_cited_by

The games whose "More like this" shelf on Steam lists this game today.

Refreshed once a day. Ordered by app id: Steam's own shelf order isn't kept. Apps steampeek has no record of are left out, so a page can hold fewer than page_size games; total counts them all. How many there were over time: /games/{appid}/more-like-this.

An app id steampeek has no data for gets an empty list, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-100, default 25).

    1–100 · default 25 · example 1

Response

dataarray of objectsGame summary ›
metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360/cited-by?page_size=1' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "appid": 7260,
      "name": "Loki",
      "type": "game",
      "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/7260/header.jpg?t=1562029560",
      "store_url": "https://store.steampowered.com/app/7260/",
      "steampeek_url": "https://steampeek.app/app/7260",
      "release": {
        "date_text": "Nov 5, 2007",
        "timestamp": 1194303600,
        "precision": null,
        "coming_soon": false
      },
      "price": {
        "is_free": false,
        "currency": "USD",
        "final": 999,
        "initial": 999,
        "discount_percent": 0
      },
      "reviews": {
        "total": 218,
        "percent_positive": 64,
        "label": "Mixed"
      },
      "developers": [
        "Cyanide Studios"
      ],
      "publishers": [],
      "genres": [
        "RPG"
      ],
      "tags": [
        "RPG",
        "Hack and Slash",
        "Mythology",
        "Action",
        "Action RPG"
      ],
      "platforms": {
        "windows": true,
        "mac": false,
        "linux": false
      }
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 1,
    "total": 3653,
    "has_more": true,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/regional-ranks

Top sellers rank in every country (one day)

3 units· seriesMCPgames_regional_ranks

One UTC day of the game's hourly Top Sellers rank in every tracked country.

One row per hourly snapshot, oldest first. ranks maps each country that listed the game that hour to its position; a country where it wasn't on the chart is left out of the row.

Days go back 180 days from the game's latest day on any country's chart: meta.min_day to meta.max_day. A day outside them is refused (400) with both in details. An app id steampeek has no data for gets an empty data, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 730

  • daystringqueryoptional

    UTC day, YYYY-MM-DD. Defaults to the latest day the game was on any tracked country's chart (looked for over the last 12 days; today when there is none).

    example 2026-10-08

Response

dataarray of objects

Each item:

  • timestampinteger

    The snapshot's hour, epoch seconds (UTC).

  • ranksmap of integers

    Country code (lowercase) → position on that country's chart, 1 = top.

metaobject

Every response's meta carries request_id and units.

  • daystring

    The UTC day returned, YYYY-MM-DD.

  • min_daystring

    The earliest day on offer for this game.

  • max_daystring

    The latest day the game was on any tracked country's chart (today when it hasn't been for 12 days).

  • countriesarray of strings

    Countries that listed the game at least once that day, biggest markets first.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/730/regional-ranks?day=2026-10-08' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1791417600,
      "ranks": {
        "tw": 4,
        "cz": 2,
        "at": 4,
        "ca": 8,
        "se": 2,
        "hk": 5,
        "de": 4,
        "tr": 2,
        "gb": 6,
        "ru": 2,
        "br": 4,
        "us": 8,
        "au": 5,
        "dk": 2,
        "nz": 3,
        "th": 13,
        "pl": 2,
        "be": 11,
        "jp": 26,
        "it": 7,
        "es": 4,
        "fi": 2,
        "fr": 7,
        "nl": 4,
        "no": 2,
        "kr": 25,
        "ch": 2,
        "sg": 6
      }
    },
    {
      "timestamp": 1791421200,
      "ranks": {
        "hk": 3,
        "fr": 7,
        "br": 3,
        "tr": 2,
        "au": 6,
        "nl": 4,
        "fi": 2,
        "at": 3,
        "gb": 6,
        "no": 2,
        "sg": 7,
        "ch": 2,
        "ca": 6,
        "ru": 2,
        "se": 2,
        "nz": 4,
        "de": 4,
        "us": 8,
        "kr": 28,
        "cz": 2,
        "be": 14,
        "tw": 4,
        "es": 4,
        "pl": 2,
        "it": 6,
        "dk": 2,
        "jp": 27,
        "th": 14
      }
    },
    {
      "timestamp": 1791424800,
      "ranks": {
        "hk": 3,
        "fr": 7,
        "nz": 4,
        "it": 8,
        "th": 14,
        "tr": 2,
        "sg": 8,
        "se": 2,
        "de": 4,
        "kr": 26,
        "pl": 2,
        "gb": 6,
        "be": 11,
        "au": 6,
        "cz": 2,
        "nl": 5,
        "tw": 4,
        "ru": 2,
        "es": 5,
        "ch": 2,
        "no": 2,
        "dk": 2,
        "jp": 25,
        "ca": 6,
        "at": 3,
        "fi": 2,
        "us": 7,
        "br": 3
      }
    }
  ],
  "meta": {
    "day": "2026-10-08",
    "min_day": "2026-04-11",
    "max_day": "2026-10-08",
    "countries": [
      "us",
      "de",
      "fr",
      "gb",
      "au",
      "ca",
      "br",
      "ru",
      "pl",
      "nl",
      "jp",
      "kr",
      "es",
      "it",
      "se",
      "no",
      "dk",
      "fi",
      "ch",
      "at",
      "be",
      "cz",
      "tr",
      "tw",
      "hk",
      "sg",
      "th",
      "nz"
    ],
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/topsellers-stats

Top sellers rank summary

1 unit· lookupMCPgames_topsellers_stats

The game's Top Sellers rank now, its best in the last 24 hours and its best ever, worldwide or in one country.

One region per call (cc, worldwide by default). steampeek keeps these figures current while the game is on the chart; once it leaves, they keep their last values rather than clearing, so rank_now can be a position it no longer holds and best_24h can be more than a day old (best_24h_at says when). /games/{appid}/topsellers has the exact history.

A game with no record in that region, or an app id steampeek doesn't know, gets nulls, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 730

  • ccstringqueryoptional

    Store region: "global" or one of the 28 tracked countries (ISO 3166-1 alpha-2, lowercase).

    default global · example us

    One of 29 values
    globalataubebrcachczdedkesfifrgbhkitjpkrnlnonzplrusesgthtrtwus

Response

dataobject
  • regionstring

    "global" or the country asked for.

  • rank_nowintegernullable

    Position at the latest snapshot that listed the game, 1 = top (see the note above).

  • best_24hintegernullable

    Best position over the 24 hours to that snapshot.

  • best_24h_atintegernullable

    When it held best_24h.

  • best_all_timeintegernullable

    Best position since steampeek began tracking the chart.

  • best_all_time_atintegernullable

    When it held best_all_time.

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/730/topsellers-stats?cc=us' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "region": "us",
    "rank_now": 11,
    "best_24h": 7,
    "best_24h_at": 1791468000,
    "best_all_time": 1,
    "best_all_time_at": 1776747600
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/events

Sales and events

1 unit· lookupMCPgames_events

Steam sales and festivals the game took part in, with their dates.

The events whose sale pages list the game, oldest first: the same markers the game page draws on its charts. Only events with both a start and an end are included.

An app id steampeek has no data for gets an empty list, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145360

Response

dataarray of objects

Each item:

  • idinteger

    steampeek's id for the event.

  • namestring

    The event's name (its slug, or "Event <id>", when Steam gave it none).

  • slugstringnullable

    The event's slug on Steam, when it has one.

  • urlstringnullable

    The event's sale page on the Steam store.

  • starts_atinteger

    Epoch seconds (UTC).

  • ends_atinteger

    Epoch seconds (UTC).

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145360/events' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "id": 802,
      "name": "Isometric RPG Sale 2026",
      "slug": "IsometricRPGSale2026",
      "url": "https://store.steampowered.com/curator/43179774/sale/IsometricRPGSale2026",
      "starts_at": 1786640400,
      "ends_at": 1787158800
    }
  ],
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/wishlist-estimate

Estimated wishlists

3 units· seriesMCPgames_wishlist_estimate

Estimated wishlist counts over time, worked out from the game's rank on Steam's most-wishlisted chart. Model estimates, not Steam's numbers.

These are steampeek's estimates, not Steam's numbers: Steam publishes no wishlist counts, only the chart's order. Each point is one UTC day of the game's rank on the most-wishlisted chart (/games/{appid}/wishlist-rank, read over the same window) and estimates the total from it in two ways.

A day's average_rank is the mean of that day's ranks as the window's rank series has them: every reading of the chart (one every 2 hours) for windows up to 30 days, the best of each 6 hours up to 90 days, and beyond 90 days the day's best rank alone. So a long window reads slightly better ranks, and slightly higher estimates, than a short one over the same days.

estimate comes from a power law (count ≈ A × rank^B) fitted on games whose real totals are known, scaled for the chart's growth since the fit, with a rough band around it (estimate_low / estimate_high, ±10% by default; not a statistical confidence interval). If the current fit can't be read, the one from 2026-04-20 is used. knn_estimate_unadjusted is the median real total of the 3 closest known cases: games with a known total on a day they held a similar rank, as near in date as possible. knn_estimate scales those three for the chart's growth between their dates and this one.

Read them as an order of magnitude. The power law overestimates near the top of the chart, increasingly in the top 100 and most in the top 10, and a wide gap between the methods usually means the rank is outside what they were fitted on.

At most 60 points: one per day the game was on the chart, spread evenly across the window when it holds more days. A game with no chart history in the window (or that steampeek doesn't know) gets an empty list, not a 404.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 3223070

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 90 days before to. When neither from nor to is given and the game is out, the window is instead the run-up to its release: the 30 days before it if it came out less than 30 days ago, 90 if less than 90, a year otherwise. Use 0 for "since tracking began".

    example 2026-10-01

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now; for a released game, to its release when from isn't given either (Steam takes a game off its wishlist chart at launch, so there is nothing after it).

    example 2026-10-03

Response

dataarray of objects

Each item:

  • timestampinteger

    The day's first point in the rank series (a sample, or the start of a bucket), epoch seconds (UTC).

  • average_ranknumber

    The game's position on the most-wishlisted chart that UTC day, averaged as described above, 1 = top, to one decimal.

  • estimateinteger

    Power-law estimate of the game's total wishlists. An estimate, not Steam's number.

  • estimate_lowinteger

    Low edge of the rough band around estimate.

  • estimate_highinteger

    High edge of the rough band around estimate.

  • knn_estimateintegernullable

    Median real total of the 3 closest known cases (a similar rank, near in date), each scaled for the chart's growth to this day. Null when there is nothing to compare with.

  • knn_estimate_unadjustedintegernullable

    Median of the same three real totals without the growth scaling. Null when there is nothing to compare with.

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/3223070/wishlist-estimate?from=2026-10-01&to=2026-10-03' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1790812800,
      "average_rank": 446.6,
      "estimate": 150511,
      "estimate_low": 135460,
      "estimate_high": 165562,
      "knn_estimate": 145678,
      "knn_estimate_unadjusted": 83257
    },
    {
      "timestamp": 1790899200,
      "average_rank": 445,
      "estimate": 151250,
      "estimate_low": 136125,
      "estimate_high": 166375,
      "knn_estimate": 145773,
      "knn_estimate_unadjusted": 83257
    },
    {
      "timestamp": 1790985600,
      "average_rank": 445,
      "estimate": 151348,
      "estimate_low": 136213,
      "estimate_high": 166483,
      "knn_estimate": 145868,
      "knn_estimate_unadjusted": 83257
    }
  ],
  "meta": {
    "from": 1790812800,
    "to": 1790985600,
    "bucket_seconds": 86400,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/games/{appid}/forecast

Launch forecast

10 units· forecastMCPgames_forecast

steampeek's forecast of a game's launch: peak and average players in its first week and its first-week reviews, from similar past launches.

A nearest-neighbour model. The game's pre-launch signals (followers, estimated wishlists and their trend, the publisher's and developer's past launches, price, tags, genres, categories, languages, platforms) are compared with the games launched on Steam since January 2024, and the real first-week numbers of the 15 most similar launches make the forecast. When the game continues a series that launched in that period, the earlier game (found by name) counts as an extra voice and leads neighbors.

Each band gives percentiles of those launches' outcomes, weighted by similarity. Player counts are scaled up for Steam's growth since each launch (about 2.5% a month); review counts are not. scenarios picks the comparable launch closest to the low, middle and high outcome, as an example of each.

For a released game, the followers and wishlist signals are read as they stood before its launch, so the forecast can be checked against what happened. In steampeek's backtest on 378 launches, the median error of peak_7d.p50 was about 2× and about half the launches landed within 2× of it; p25-p75 held about half the real outcomes and p10-p90 about 80%. Pre-launch data can't see marketing, streamers or word of mouth, which is why smaller launches are never rated above medium confidence.

Games only: a DLC, demo, soundtrack or other non-game app is refused with 400. An app id steampeek doesn't know is a 404. While the model has no training data loaded the call is a 503 not_ready: try again later. The first call after a quiet spell can take several seconds while the model loads.

Parameters

  • appidintegerpathrequired

    Steam app id: the number in store.steampowered.com/app/<id>.

    ≥ 1 · example 1145350

Response

dataobject
  • appidinteger
  • namestring
  • peak_24hobjectnullable

    Peak concurrent players in the first 24 hours. Null when fewer than 3 similar launches have the number.

    Fields (5)
    • p10integer

      10th percentile: a weak but plausible outcome.

    • p25integer
    • p50integer

      Median: the most likely outcome.

    • p75integer
    • p90integer

      90th percentile: a strong but plausible outcome.

  • peak_7dobjectnullable

    Peak concurrent players in the first 7 days. Null when fewer than 3 similar launches have the number.

    Fields (5)
    • p10integer

      10th percentile: a weak but plausible outcome.

    • p25integer
    • p50integer

      Median: the most likely outcome.

    • p75integer
    • p90integer

      90th percentile: a strong but plausible outcome.

  • avg_7dobjectnullable

    Average concurrent players over the first 7 days. Null when fewer than 3 similar launches have the number.

    Fields (5)
    • p10integer

      10th percentile: a weak but plausible outcome.

    • p25integer
    • p50integer

      Median: the most likely outcome.

    • p75integer
    • p90integer

      90th percentile: a strong but plausible outcome.

  • reviews_7dobjectnullable

    Steam reviews in the first 7 days. Null when fewer than 3 similar launches have the number.

    Fields (5)
    • p10integer

      10th percentile: a weak but plausible outcome.

    • p25integer
    • p50integer

      Median: the most likely outcome.

    • p75integer
    • p90integer

      90th percentile: a strong but plausible outcome.

  • confidencestring

    How closely the similar launches match. Launches under ~20k followers (or with none recorded) are capped at medium.

    One oflowmediumhigh
  • confidence_reasonstring

    One sentence on why.

  • neighborsarray of objects

    The similar launches behind the bands, closest first (a predecessor leads), with their real numbers, not scaled for growth.

    Item fields (9)
    • appidinteger
    • namestring
    • release_datestringnullable

      Its release day, YYYY-MM-DD.

    • similaritynumber

      0-1, higher = closer to the forecast game. Only meaningful within one forecast; a predecessor is listed with 1.

    • is_predecessorboolean

      The earlier game in a series this one continues (found by name), counted as an extra voice in the bands.

    • peak_24hintegernullable

      Its real peak concurrent players in the first 24 hours.

    • peak_7dintegernullable

      Its real peak concurrent players in the first 7 days.

    • avg_7dintegernullable

      Its real average concurrent players over the first 7 days.

    • reviews_7dintegernullable

      Steam reviews it got in its first 7 days.

  • scenariosobject

    The neighbour whose real peak_7d is nearest each outcome, on a log scale.

    Fields (3)
    • floorobjectnullable

      Closest to p25 of peak_7d, leaving out launches that peaked under 5 players.

      Fields (9)
      • appidinteger
      • namestring
      • release_datestringnullable

        Its release day, YYYY-MM-DD.

      • similaritynumber

        0-1, higher = closer to the forecast game. Only meaningful within one forecast; a predecessor is listed with 1.

      • is_predecessorboolean

        The earlier game in a series this one continues (found by name), counted as an extra voice in the bands.

      • peak_24hintegernullable

        Its real peak concurrent players in the first 24 hours.

      • peak_7dintegernullable

        Its real peak concurrent players in the first 7 days.

      • avg_7dintegernullable

        Its real average concurrent players over the first 7 days.

      • reviews_7dintegernullable

        Steam reviews it got in its first 7 days.

    • likelyobjectnullable

      Closest to p50 of peak_7d.

      Fields (9)
      • appidinteger
      • namestring
      • release_datestringnullable

        Its release day, YYYY-MM-DD.

      • similaritynumber

        0-1, higher = closer to the forecast game. Only meaningful within one forecast; a predecessor is listed with 1.

      • is_predecessorboolean

        The earlier game in a series this one continues (found by name), counted as an extra voice in the bands.

      • peak_24hintegernullable

        Its real peak concurrent players in the first 24 hours.

      • peak_7dintegernullable

        Its real peak concurrent players in the first 7 days.

      • avg_7dintegernullable

        Its real average concurrent players over the first 7 days.

      • reviews_7dintegernullable

        Steam reviews it got in its first 7 days.

    • ceilingobjectnullable

      Closest to p75 of peak_7d.

      Fields (9)
      • appidinteger
      • namestring
      • release_datestringnullable

        Its release day, YYYY-MM-DD.

      • similaritynumber

        0-1, higher = closer to the forecast game. Only meaningful within one forecast; a predecessor is listed with 1.

      • is_predecessorboolean

        The earlier game in a series this one continues (found by name), counted as an extra voice in the bands.

      • peak_24hintegernullable

        Its real peak concurrent players in the first 24 hours.

      • peak_7dintegernullable

        Its real peak concurrent players in the first 7 days.

      • avg_7dintegernullable

        Its real average concurrent players over the first 7 days.

      • reviews_7dintegernullable

        Steam reviews it got in its first 7 days.

  • candidates_consideredinteger

    Past launches the game was compared with.

  • training_sizeinteger

    Launches in the model's training data.

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/games/1145350/forecast' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "appid": 1145350,
    "name": "Hades II",
    "peak_24h": {
      "p10": 1583,
      "p25": 6050,
      "p50": 11815,
      "p75": 13839,
      "p90": 59597
    },
    "peak_7d": {
      "p10": 6951,
      "p25": 9875,
      "p50": 17695,
      "p75": 40201,
      "p90": 271310
    },
    "avg_7d": {
      "p10": 3610,
      "p25": 5803,
      "p50": 9652,
      "p75": 20974,
      "p90": 157192
    },
    "reviews_7d": {
      "p10": 9720,
      "p25": 15642,
      "p50": 29237,
      "p75": 55194,
      "p90": 116898
    },
    "confidence": "high",
    "confidence_reason": "Found a tight cluster of comparable launches (15 matches, top neighbour clearly closer than the rest).",
    "neighbors": [
      {
        "appid": 1044720,
        "name": "Farthest Frontier",
        "release_date": "2025-10-23",
        "similarity": 0.11109666703189051,
        "is_predecessor": false,
        "peak_24h": 6839,
        "peak_7d": 13312,
        "avg_7d": 6760,
        "reviews_7d": 20171
      },
      {
        "appid": 690830,
        "name": "Foundation",
        "release_date": "2025-01-31",
        "similarity": 0.11045400719251557,
        "is_predecessor": false,
        "peak_24h": 7169,
        "peak_7d": 18422,
        "avg_7d": 8578,
        "reviews_7d": 15642
      },
      {
        "appid": 1657630,
        "name": "Slime Rancher 2",
        "release_date": "2025-09-23",
        "similarity": 0.10339712104520156,
        "is_predecessor": false,
        "peak_24h": 9240,
        "peak_7d": 11625,
        "avg_7d": 7087,
        "reviews_7d": 31946
      }
    ],
    "scenarios": {
      "floor": {
        "appid": 1657630,
        "name": "Slime Rancher 2",
        "release_date": "2025-09-23",
        "similarity": 0.10339712104520156,
        "is_predecessor": false,
        "peak_24h": 9240,
        "peak_7d": 11625,
        "avg_7d": 7087,
        "reviews_7d": 31946
      },
      "likely": {
        "appid": 690830,
        "name": "Foundation",
        "release_date": "2025-01-31",
        "similarity": 0.11045400719251557,
        "is_predecessor": false,
        "peak_24h": 7169,
        "peak_7d": 18422,
        "avg_7d": 8578,
        "reviews_7d": 15642
      },
      "ceiling": {
        "appid": 2142790,
        "name": "Fields of Mistria",
        "release_date": "2026-08-05",
        "similarity": 0.07787185475264204,
        "is_predecessor": false,
        "peak_24h": 26077,
        "peak_7d": 39069,
        "avg_7d": 22219,
        "reviews_7d": 29237
      }
    },
    "candidates_considered": 53681,
    "training_size": 53682
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 10,
      "day": {
        "used": 130,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6240,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}

Endpoints

Charts & catalog

GET/api/v1/charts/{chart}

Chart

1 unit· lookupMCPcharts_list

One of Steam's charts as steampeek tracks it: top sellers, wishlists, followers, players or More like this.

topsellers is Steam's Top Sellers chart, global (refreshed every 10 minutes) or for one of 28 countries with cc (hourly). wishlist is Steam's most-wishlisted chart, the top ~4,000 (every 2 hours); unreleased games dominate it. followers ranks games by Steam community followers, the top ~20,000 (daily). players ranks games by concurrent players now, the top ~10,000 (hourly). more-like-this ranks games by how many other games show them on their store page's "More like this" shelf, the top 1,000 (daily at 03:00 UTC).

Lists are served from steampeek's cache and can trail their source; updated_at says when an entry's numbers were taken. meta.total is the chart's length, rounded up to a multiple of 10 for every chart but more-like-this. Sorting by a change in descending order lists games new to the chart (no change value yet) first.

Parameters

  • chartstringpathrequired

    Which chart: topsellers, wishlist, followers, players or more-like-this.

    example players

    One oftopsellerswishlistfollowersplayersmore-like-this
  • ccstringqueryoptional

    topsellers only: "global" (default) or one of the 28 tracked countries (ISO 3166-1 alpha-2, lowercase). The other charts are global and refuse it.

    example de

    One of 29 values
    globalataubebrcachczdedkesfifrgbhkitjpkrnlnonzplrusesgthtrtwus
  • sortstringqueryoptional

    rank (default): the chart's order. change_1d, change_7d or change_30d: by movement over that span (wishlist, followers and more-like-this only).

    One ofrankchange_1dchange_7dchange_30d
  • orderstringqueryoptional

    asc or desc. Defaults to asc for sort=rank (top of the chart first) and to desc for the change sorts (biggest gains first).

    One ofascdesc
  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-200, default 50).

    1–200 · default 50 · example 2

Response

dataarray of objects

Each item:

  • rankintegernullable

    Position on the chart (1 = top). It doesn't change with sort; the array is in sort order.

  • playersintegernullable

    players chart: concurrent players at the latest hourly sample.

  • followersintegernullable

    followers chart: Steam community followers at the latest daily snapshot.

  • inboundintegernullable

    more-like-this chart: how many games list this one on their store page's "More like this" shelf.

  • change_1dintegernullable

    Movement over the last day. wishlist: positions climbed (positive = moved up); followers: followers gained; more-like-this: shelves gained. Null on topsellers and players, and for a game that wasn't on the chart then.

  • change_7dintegernullable

    Movement over the last 7 days. wishlist: positions climbed (positive = moved up); followers: followers gained; more-like-this: shelves gained. Null on topsellers and players, and for a game that wasn't on the chart then.

  • change_30dintegernullable

    Movement over the last 30 days. wishlist: positions climbed (positive = moved up); followers: followers gained; more-like-this: shelves gained. Null on topsellers and players, and for a game that wasn't on the chart then.

  • updated_atintegernullable

    When this entry's numbers were taken. Null where the chart doesn't record it (topsellers).

metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/charts/players?page_size=2' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "rank": 1,
      "game": {
        "appid": 730,
        "name": "Counter-Strike 2",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/162664aa5da85f418105350c5d67ca565f6c3713/header.jpg?t=1789251637",
        "store_url": "https://store.steampowered.com/app/730/",
        "steampeek_url": "https://steampeek.app/app/730",
        "release": {
          "date_text": "Aug 21, 2012",
          "timestamp": 1345568400,
          "precision": null,
          "coming_soon": false
        },
        "price": {
          "is_free": true,
          "currency": "USD",
          "final": 0,
          "initial": 0,
          "discount_percent": 0
        },
        "reviews": {
          "total": 9914665,
          "percent_positive": 85,
          "label": "Very Positive"
        },
        "developers": [
          "Valve"
        ],
        "publishers": [
          "Valve"
        ],
        "genres": [
          "Action",
          "Free To Play"
        ],
        "tags": [
          "FPS",
          "Shooter",
          "Multiplayer",
          "Competitive",
          "Action"
        ],
        "platforms": {
          "windows": true,
          "mac": false,
          "linux": true
        }
      },
      "players": 1032885,
      "followers": null,
      "inbound": null,
      "change_1d": null,
      "change_7d": null,
      "change_30d": null,
      "updated_at": 1791489600
    },
    {
      "rank": 2,
      "game": {
        "appid": 570,
        "name": "Dota 2",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/570/header.jpg?t=1791407503",
        "store_url": "https://store.steampowered.com/app/570/",
        "steampeek_url": "https://steampeek.app/app/570",
        "release": {
          "date_text": "Jul 9, 2013",
          "timestamp": 1373389200,
          "precision": null,
          "coming_soon": false
        },
        "price": {
          "is_free": true,
          "currency": "USD",
          "final": 0,
          "initial": 0,
          "discount_percent": 0
        },
        "reviews": {
          "total": 2794249,
          "percent_positive": 80,
          "label": "Very Positive"
        },
        "developers": [
          "Valve"
        ],
        "publishers": [
          "Valve"
        ],
        "genres": [
          "Action",
          "Free To Play",
          "Strategy"
        ],
        "tags": [
          "Free to Play",
          "MOBA",
          "Multiplayer",
          "Strategy",
          "eSports"
        ],
        "platforms": {
          "windows": true,
          "mac": true,
          "linux": true
        }
      },
      "players": 782087,
      "followers": null,
      "inbound": null,
      "change_1d": null,
      "change_7d": null,
      "change_30d": null,
      "updated_at": 1791489600
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 2,
    "total": 10000,
    "has_more": true,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/charts/movers

Biggest movers

1 unit· lookupMCPcharts_movers

The biggest 24-hour swings in concurrent players among the most-played games: gainers and losers.

Among the ~350 games with the most players right now: up to 8 gainers and 8 losers, ranked by percent change against 24 hours earlier. The earlier sample must be at least 200 players and the larger of the two at least 500, so small games can't swing the board; a game that fell out of the top ~350 altogether isn't among the losers. Refreshed every 5 minutes from the hourly samples.

Parameters

None.

Response

dataobject
  • gainersarray of objects
    Item fields (5)
    • players_nowinteger

      Concurrent players at the latest hourly sample.

    • players_24h_agointeger

      Concurrent players at the last sample taken 24 to 30 hours earlier.

    • changeinteger

      players_now minus players_24h_ago.

    • change_percentnumber

      Change in percent of players_24h_ago (159.4 = +159.4%; negative for losers).

  • losersarray of objects
    Item fields (5)
    • players_nowinteger

      Concurrent players at the latest hourly sample.

    • players_24h_agointeger

      Concurrent players at the last sample taken 24 to 30 hours earlier.

    • changeinteger

      players_now minus players_24h_ago.

    • change_percentnumber

      Change in percent of players_24h_ago (159.4 = +159.4%; negative for losers).

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/charts/movers' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "gainers": [
      {
        "game": {
          "appid": 632360,
          "name": "Risk of Rain 2",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/632360/header.jpg?t=1791475448",
          "store_url": "https://store.steampowered.com/app/632360/",
          "steampeek_url": "https://steampeek.app/app/632360",
          "release": {
            "date_text": "Aug 11, 2020",
            "timestamp": 1597157640,
            "precision": null,
            "coming_soon": false
          },
          "price": {
            "is_free": false,
            "currency": "USD",
            "final": 824,
            "initial": 2499,
            "discount_percent": 67
          },
          "reviews": {
            "total": 240549,
            "percent_positive": 93,
            "label": "Very Positive"
          },
          "developers": [
            "Hopoo Games"
          ],
          "publishers": [
            "Gearbox Publishing",
            "2K"
          ],
          "genres": [
            "Action",
            "Indie"
          ],
          "tags": [
            "Third-Person Shooter",
            "Action Roguelike",
            "Multiplayer",
            "Co-op",
            "Roguelite"
          ],
          "platforms": {
            "windows": true,
            "mac": false,
            "linux": false
          }
        },
        "players_now": 35672,
        "players_24h_ago": 6681,
        "change": 28991,
        "change_percent": 433.9
      },
      {
        "game": {
          "appid": 2141910,
          "name": "Magic: The Gathering Arena",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2141910/98dd2b99c480cb65c85616e759f8346d87c94ca4/header.jpg?t=1787780109",
          "store_url": "https://store.steampowered.com/app/2141910/",
          "steampeek_url": "https://steampeek.app/app/2141910",
          "release": {
            "date_text": "May 23, 2023",
            "timestamp": 1684855740,
            "precision": null,
            "coming_soon": false
          },
          "price": {
            "is_free": true,
            "currency": "USD",
            "final": 0,
            "initial": 0,
            "discount_percent": 0
          },
          "reviews": {
            "total": 32319,
            "percent_positive": 61,
            "label": "Mixed"
          },
          "developers": [
            "Wizards of the Coast"
          ],
          "publishers": [
            "Wizards of the Coast"
          ],
          "genres": [
            "Free To Play",
            "Strategy"
          ],
          "tags": [
            "Strategy",
            "Card Game",
            "Free to Play",
            "Trading Card Game",
            "Deckbuilding"
          ],
          "platforms": {
            "windows": true,
            "mac": true,
            "linux": false
          }
        },
        "players_now": 12593,
        "players_24h_ago": 2686,
        "change": 9907,
        "change_percent": 368.8
      }
    ],
    "losers": [
      {
        "game": {
          "appid": 594650,
          "name": "Hunt: Showdown 1896",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/594650/8cf55bcd74fc14c93f3a9cc7d0a442afabab6f88/header_alt_assets_29.jpg?t=1791385253",
          "store_url": "https://store.steampowered.com/app/594650/",
          "steampeek_url": "https://steampeek.app/app/594650",
          "release": {
            "date_text": "Aug 27, 2019",
            "timestamp": 1566909034,
            "precision": null,
            "coming_soon": false
          },
          "price": {
            "is_free": false,
            "currency": "USD",
            "final": 2999,
            "initial": 2999,
            "discount_percent": 0
          },
          "reviews": {
            "total": 213712,
            "percent_positive": 74,
            "label": "Mostly Positive"
          },
          "developers": [
            "Crytek"
          ],
          "publishers": [
            "Crytek"
          ],
          "genres": [
            "Action"
          ],
          "tags": [
            "FPS",
            "Multiplayer",
            "PvP",
            "Team-Based",
            "Tactical"
          ],
          "platforms": {
            "windows": true,
            "mac": false,
            "linux": false
          }
        },
        "players_now": 12762,
        "players_24h_ago": 20379,
        "change": -7617,
        "change_percent": -37.4
      },
      {
        "game": {
          "appid": 2429640,
          "name": "Throne and Liberty",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2429640/497cc638fa3186f1aeefddaff89eaaf6f0c2e7dd/header.jpg?t=1787851215",
          "store_url": "https://store.steampowered.com/app/2429640/",
          "steampeek_url": "https://steampeek.app/app/2429640",
          "release": {
            "date_text": "Oct 1, 2024",
            "timestamp": 1727801940,
            "precision": null,
            "coming_soon": false
          },
          "price": {
            "is_free": true,
            "currency": "USD",
            "final": 0,
            "initial": 0,
            "discount_percent": 0
          },
          "reviews": {
            "total": 68957,
            "percent_positive": 66,
            "label": "Mixed"
          },
          "developers": [
            "NC",
            "FirstSpark Games"
          ],
          "publishers": [
            "Amazon Game Studios"
          ],
          "genres": [
            "Action",
            "Adventure",
            "Free To Play",
            "Massively Multiplayer",
            "RPG"
          ],
          "tags": [
            "MMORPG",
            "Free to Play",
            "Open World",
            "Massively Multiplayer",
            "RPG"
          ],
          "platforms": {
            "windows": true,
            "mac": false,
            "linux": false
          }
        },
        "players_now": 3356,
        "players_24h_ago": 4373,
        "change": -1017,
        "change_percent": -23.3
      }
    ]
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/charts/momentum

Momentum

1 unit· lookupMCPcharts_momentum

The biggest 7-day gains in Steam followers and in "More like this" shelf placements.

Two boards of up to 10 games each, unreleased games included: the biggest 7-day gains in Steam community followers among the ~20,000 most-followed games, and the biggest 7-day gains in how many games list a game on their "More like this" shelf. Both measures update daily; the boards refresh every 5 minutes.

Parameters

None.

Response

dataobject
  • follower_gainersarray of objects
    Item fields (4)
    • followersinteger

      Steam community followers at the latest daily snapshot.

    • change_7dinteger

      Followers gained over the last 7 days.

    • change_7d_percentnumbernullable

      change_7d as a percent of the value 7 days ago (null when that was 0).

  • more_like_this_risersarray of objects
    Item fields (4)
    • inboundinteger

      How many games list this one on their "More like this" shelf now.

    • change_7dinteger

      Shelves gained over the last 7 days.

    • change_7d_percentnumbernullable

      change_7d as a percent of the value 7 days ago (null when that was 0).

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/charts/momentum' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "follower_gainers": [
      {
        "game": {
          "appid": 3393110,
          "name": "AION 2",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3393110/10aa4b096ebe6af0d1dd7882e5ba004271aef6f7/header.jpg?t=1791205225",
          "store_url": "https://store.steampowered.com/app/3393110/",
          "steampeek_url": "https://steampeek.app/app/3393110",
          "release": {
            "date_text": "Oct 5, 2026",
            "timestamp": 1791205224,
            "precision": null,
            "coming_soon": false
          },
          "price": {
            "is_free": true,
            "currency": "USD",
            "final": 0,
            "initial": 0,
            "discount_percent": 0
          },
          "reviews": {
            "total": 17619,
            "percent_positive": 64,
            "label": "Mixed"
          },
          "developers": [
            "NC"
          ],
          "publishers": [
            "NC"
          ],
          "genres": [
            "Action",
            "Adventure",
            "Free To Play",
            "Massively Multiplayer",
            "RPG"
          ],
          "tags": [
            "Free to Play",
            "MMORPG",
            "Massively Multiplayer",
            "Adventure",
            "Open World"
          ],
          "platforms": {
            "windows": true,
            "mac": false,
            "linux": false
          }
        },
        "followers": 126534,
        "change_7d": 15755,
        "change_7d_percent": 14.2
      },
      {
        "game": {
          "appid": 1422450,
          "name": "Deadlock",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1422450/aa249c5e8cc8f90941bd1dbdc311773cd1afe065/header.jpg?t=1790716179",
          "store_url": "https://store.steampowered.com/app/1422450/",
          "steampeek_url": "https://steampeek.app/app/1422450",
          "release": {
            "date_text": "To be announced",
            "timestamp": null,
            "precision": "text_tba",
            "coming_soon": true
          },
          "price": {
            "is_free": false,
            "currency": null,
            "final": null,
            "initial": null,
            "discount_percent": null
          },
          "reviews": {
            "total": 0,
            "percent_positive": 0,
            "label": "No user reviews"
          },
          "developers": [
            "Valve"
          ],
          "publishers": [
            "Valve"
          ],
          "genres": [
            "Action"
          ],
          "tags": [
            "MOBA",
            "Third-Person Shooter",
            "Multiplayer",
            "Hero Shooter",
            "Team-Based"
          ],
          "platforms": {
            "windows": true,
            "mac": false,
            "linux": false
          }
        },
        "followers": 444996,
        "change_7d": 9676,
        "change_7d_percent": 2.2
      }
    ],
    "more_like_this_risers": [
      {
        "game": {
          "appid": 4001890,
          "name": "How to Fish",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4001890/45c4ddff4901e32c4b8b643e1b97d0d01898d299/header.jpg?t=1788788717",
          "store_url": "https://store.steampowered.com/app/4001890/",
          "steampeek_url": "https://steampeek.app/app/4001890",
          "release": {
            "date_text": "Aug 20, 2026",
            "timestamp": 1787234619,
            "precision": null,
            "coming_soon": false
          },
          "price": {
            "is_free": false,
            "currency": "USD",
            "final": 799,
            "initial": 799,
            "discount_percent": 0
          },
          "reviews": {
            "total": 68771,
            "percent_positive": 95,
            "label": "Overwhelmingly Positive"
          },
          "developers": [
            "Dazed Games"
          ],
          "publishers": [
            "Dazed Games"
          ],
          "genres": [
            "Action",
            "Casual",
            "Indie",
            "Simulation"
          ],
          "tags": [
            "Simulation",
            "Multiplayer",
            "Online Co-Op",
            "Co-op",
            "Fishing"
          ],
          "platforms": {
            "windows": true,
            "mac": false,
            "linux": false
          }
        },
        "inbound": 55896,
        "change_7d": 32102,
        "change_7d_percent": 134.9
      },
      {
        "game": {
          "appid": 2357570,
          "name": "Overwatch®",
          "type": "game",
          "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/2357570/5c208b2699cd38ed6125d039be388fa744db54a4/header_alt_assets_23.jpg?t=1791311522",
          "store_url": "https://store.steampowered.com/app/2357570/",
          "steampeek_url": "https://steampeek.app/app/2357570",
          "release": {
            "date_text": "Aug 10, 2023",
            "timestamp": 1691692200,
            "precision": null,
            "coming_soon": false
          },
          "price": {
            "is_free": true,
            "currency": "USD",
            "final": 0,
            "initial": 0,
            "discount_percent": 0
          },
          "reviews": {
            "total": 426900,
            "percent_positive": 31,
            "label": "Mostly Negative"
          },
          "developers": [
            "Blizzard Entertainment, Inc."
          ],
          "publishers": [
            "Blizzard Entertainment, Inc."
          ],
          "genres": [
            "Action",
            "Free To Play"
          ],
          "tags": [
            "Free to Play",
            "Hero Shooter",
            "FPS",
            "Multiplayer",
            "Team-Based"
          ],
          "platforms": {
            "windows": true,
            "mac": false,
            "linux": false
          }
        },
        "inbound": 40693,
        "change_7d": 31050,
        "change_7d_percent": 322
      }
    ]
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/catalog/stats

Catalog stats

1 unit· lookupMCPcatalog_platform_stats

How many Steam apps steampeek tracks and how many people are playing right now.

The figures on top of steampeek's dashboard. Refreshed every 5 minutes; players come from the hourly samples.

Parameters

None.

Response

dataobject
  • apps_trackedinteger

    Steam apps in steampeek's catalog: games, DLC, demos, soundtracks, tools.

  • apps_with_store_datainteger

    Apps with full store data (price, release, genres, tags).

  • players_nowinteger

    Concurrent players summed over every game steampeek samples hourly.

  • players_updated_atintegernullable

    Time of the latest player sample.

  • data_updated_atintegernullable

    Time of the freshest live data (top sellers, every 10 minutes).

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/catalog/stats' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "apps_tracked": 328022,
    "apps_with_store_data": 287948,
    "players_now": 9018798,
    "players_updated_at": 1791489600,
    "data_updated_at": 1791491700
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/catalog/filters

Filter values

FreeMCPcatalog_filter_options

Ids and names for the catalog filter's list parameters: genres, categories, tags, languages and more.

What /catalog/games accepts in its list parameters. Changes rarely (refreshed hourly). Free: it costs no units.

Parameters

None.

Response

dataobject
  • genresarray of objects

    For genres.

    Item fields (2)
    • idstring
    • namestring
  • categoriesarray of objects

    For categories.

    Item fields (2)
    • idinteger
    • namestring
  • tagsarray of objects

    For tags.

    Item fields (2)
    • idinteger
    • namestring
  • languagesarray of objects

    For languages.

    Item fields (2)
    • idinteger
    • namestring
  • content_descriptorsarray of objects

    For cd.

    Item fields (2)
    • idinteger
    • namestring
  • typesarray of strings

    For types.

  • platformsarray of strings

    For os.

  • statusesarray of strings

    For status.

metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/catalog/filters' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "genres": [
      {
        "id": "85",
        "name": "360 Video"
      },
      {
        "id": "50",
        "name": "Accounting"
      },
      {
        "id": "1",
        "name": "Action"
      },
      {
        "id": "25",
        "name": "Adventure"
      },
      {
        "id": "51",
        "name": "Animation & Modeling"
      }
    ],
    "categories": [
      {
        "id": 82,
        "name": "#category_contrast_controls"
      },
      {
        "id": 80,
        "name": "#category_playable_at_your_own_pace"
      },
      {
        "id": 81,
        "name": "#category_playable_without_vision"
      },
      {
        "id": 50,
        "name": "Additional High-Quality Audio"
      },
      {
        "id": 78,
        "name": "Adjustable Difficulty"
      }
    ],
    "tags": [
      {
        "id": 7743,
        "name": "1980s"
      },
      {
        "id": 6691,
        "name": "1990's"
      },
      {
        "id": 4975,
        "name": "2.5D"
      },
      {
        "id": 3871,
        "name": "2D"
      },
      {
        "id": 4736,
        "name": "2D Fighter"
      }
    ],
    "languages": [
      {
        "id": 15,
        "name": "Finnish"
      },
      {
        "id": 14,
        "name": "Dutch"
      },
      {
        "id": 13,
        "name": "Danish"
      },
      {
        "id": 12,
        "name": "Polish"
      },
      {
        "id": 20,
        "name": "Romanian"
      }
    ],
    "content_descriptors": [
      {
        "id": 1,
        "name": "Nudity or Sexual Content"
      },
      {
        "id": 2,
        "name": "Frequent Violence or Gore"
      },
      {
        "id": 3,
        "name": "Adult Only Sexual Content"
      },
      {
        "id": 4,
        "name": "Gratuitous Sexual Content"
      },
      {
        "id": 5,
        "name": "Any Mature Content"
      }
    ],
    "types": [
      "game",
      "dlc",
      "demo",
      "music",
      "hardware"
    ],
    "platforms": [
      "windows",
      "mac",
      "linux"
    ],
    "statuses": [
      "released",
      "full_release",
      "early_access",
      "coming_soon"
    ]
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 0
    }
  }
}
GET/api/v1/catalog/games

Filter the catalog

3 units· seriesMCPcatalog_filter

Every app matching a set of filters (tags, genres, price, reviews, players, followers, release…), a page at a time.

steampeek's catalog filter over the whole catalog (about 240,000 apps). Combine any of the parameters; at least one is required. Within tags, genres, categories and languages a game must have every id listed; within types, publishers, developers and cd any one is enough; os needs every platform listed. Ids are listed by /catalog/filters. The parameter names are the keys of steampeek's filter URLs, so the filter part of a site URL works here.

Results are ordered by app id, so pages stay stable while you page through them. The filter index is rebuilt hourly; follower counts move daily.

Parameters

  • tagsstringqueryoptional

    Steam user-tag ids, comma-separated; a game must have all of them (1774 = Shooter, 492 = Indie). /catalog/filters lists every id.

    up to 4000 characters · example 1774,3859

  • genresstringqueryoptional

    Steam genre ids, comma-separated; a game must have all of them (1 = Action, 23 = Indie, 70 = Early Access).

    up to 4000 characters · example 1,23

  • categoriesstringqueryoptional

    Steam store category ids, comma-separated; a game must have all of them (1 = Multi-player, 9 = Co-op, 22 = Steam Achievements).

    up to 4000 characters · example 9

  • languagesstringqueryoptional

    Supported-language ids (Steam's language codes), comma-separated; a game must support all of them (0 = English).

    up to 4000 characters · example 0

  • typesstringqueryoptional

    App types, comma-separated; an app matches any of them: game, dlc, demo, music, hardware. All types when absent.

    up to 4000 characters · example game

  • statusstringqueryoptional

    released, full_release (released and not in Early Access), early_access (released into Early Access) or coming_soon (not released yet).

    One ofreleasedfull_releaseearly_accesscoming_soon
  • price_fromintegerqueryoptional

    Lowest current US price, in cents (999 = $9.99).

    ≥ 0

  • price_tointegerqueryoptional

    Highest current US price, in cents. price_from=0&price_to=0 = free games only.

    ≥ 0

  • discount_fromintegerqueryoptional

    Lowest current discount, percent.

    0–100

  • discount_tointegerqueryoptional

    Highest current discount, percent.

    0–100

  • rating_fromintegerqueryoptional

    Lowest share of positive Steam reviews, percent.

    0–100

  • rating_tointegerqueryoptional

    Highest share of positive Steam reviews, percent.

    0–100

  • reviews_fromintegerqueryoptional

    Fewest Steam reviews.

    ≥ 0

  • reviews_tointegerqueryoptional

    Most Steam reviews.

    ≥ 0

  • release_fromstringqueryoptional

    Release date on or after this day (YYYY-MM-DD), as the store page states it.

  • release_tostringqueryoptional

    Release date on or before this day (YYYY-MM-DD).

  • followers_fromintegerqueryoptional

    Fewest Steam community followers (latest daily snapshot).

    ≥ 0

  • followers_tointegerqueryoptional

    Most Steam community followers.

    ≥ 0

  • ccu_fromintegerqueryoptional

    Fewest concurrent players right now (hourly samples).

    ≥ 0

  • ccu_tointegerqueryoptional

    Most concurrent players right now.

    ≥ 0

  • peak_ccu_fromintegerqueryoptional

    Lowest all-time peak of concurrent players, as tracked by steampeek.

    ≥ 0

  • peak_ccu_tointegerqueryoptional

    Highest all-time peak of concurrent players.

    ≥ 0

  • ach_fromintegerqueryoptional

    Fewest Steam achievements (ach_from=1: has achievements).

    ≥ 0

  • ach_tointegerqueryoptional

    Most Steam achievements.

    ≥ 0

  • wl_rank_fromintegerqueryoptional

    Best position on Steam's most-wishlisted chart. Only the ~4,000 games on that chart have one.

    ≥ 1

  • wl_rank_tointegerqueryoptional

    Worst position on the most-wishlisted chart (wl_rank_to=100 = the top 100).

    ≥ 1

  • publishersstringqueryoptional

    Exact publisher names as the store lists them, comma-separated; a game matches any of them. Case-sensitive. A comma that is part of a name is written %2C in the value (KRAFTON%2C Inc.), which is %252C once the query string is URL-encoded.

    up to 4000 characters · example Valve

  • developersstringqueryoptional

    Exact developer names, comma-separated; a game matches any of them. Case-sensitive; a comma inside a name is %2C, as for publishers.

    up to 4000 characters · example Supergiant Games

  • osstringqueryoptional

    Platforms, comma-separated; a game must support all of them: windows, mac, linux.

    up to 4000 characters · example mac,linux

  • cdstringqueryoptional

    Steam content descriptor ids, comma-separated; a game matches any of them: 1 = nudity or sexual content, 2 = frequent violence or gore, 3 = adult only sexual content, 4 = gratuitous sexual content, 5 = any mature content.

    up to 4000 characters · example 1

  • ea_exit_fromstringqueryoptional

    Early Access games whose scheduled full release is on or after this day (YYYY-MM-DD).

  • ea_exit_tostringqueryoptional

    Early Access games whose scheduled full release is on or before this day (YYYY-MM-DD).

  • upcomingstringqueryoptional

    upcoming=1 is the same as status=coming_soon; kept so older steampeek filter URLs work.

    One of1
  • orderstringqueryoptional

    asc (default): by app id, lowest first (the oldest store pages); desc: the newest store pages first.

    One ofascdesc
  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-200, default 50).

    1–200 · default 50 · example 2

Response

dataarray of objectsGame summary ›
metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/catalog/games?types=game&publishers=Valve&page_size=2' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "appid": 10,
      "name": "Counter-Strike",
      "type": "game",
      "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/10/header.jpg?t=1745368572",
      "store_url": "https://store.steampowered.com/app/10/",
      "steampeek_url": "https://steampeek.app/app/10",
      "release": {
        "date_text": "Nov 1, 2000",
        "timestamp": 973065600,
        "precision": null,
        "coming_soon": false
      },
      "price": {
        "is_free": false,
        "currency": "USD",
        "final": 999,
        "initial": 999,
        "discount_percent": 0
      },
      "reviews": {
        "total": 170089,
        "percent_positive": 96,
        "label": "Overwhelmingly Positive"
      },
      "developers": [
        "Valve"
      ],
      "publishers": [
        "Valve"
      ],
      "genres": [
        "Action"
      ],
      "tags": [
        "Action",
        "FPS",
        "Multiplayer",
        "Shooter",
        "Classic"
      ],
      "platforms": {
        "windows": true,
        "mac": true,
        "linux": true
      }
    },
    {
      "appid": 20,
      "name": "Team Fortress Classic",
      "type": "game",
      "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/20/header.jpg?t=1745368565",
      "store_url": "https://store.steampowered.com/app/20/",
      "steampeek_url": "https://steampeek.app/app/20",
      "release": {
        "date_text": "Apr 1, 1999",
        "timestamp": 922953600,
        "precision": null,
        "coming_soon": false
      },
      "price": {
        "is_free": false,
        "currency": "USD",
        "final": 499,
        "initial": 499,
        "discount_percent": 0
      },
      "reviews": {
        "total": 7070,
        "percent_positive": 86,
        "label": "Very Positive"
      },
      "developers": [
        "Valve"
      ],
      "publishers": [
        "Valve"
      ],
      "genres": [
        "Action"
      ],
      "tags": [
        "Action",
        "FPS",
        "Multiplayer",
        "Classic",
        "Hero Shooter"
      ],
      "platforms": {
        "windows": true,
        "mac": true,
        "linux": true
      }
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 2,
    "total": 32,
    "has_more": true,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}

Endpoints

Releases

GET/api/v1/releases

Released games

1 unit· lookupMCPreleases_list

Games released in a calendar month or the last 7 days / 3 / 6 months, with players, chart ranks and launch numbers.

Games whose Steam release date falls in the window: a calendar month (year + month, default the current UTC month) or a rolling window ending today (period). Unreleased games are not listed; see /releases/upcoming and /releases/hype.

Stats refresh every 30 minutes; a rolling window can trail the clock by up to an hour after midnight UTC. Live columns (players_now, topsellers_rank) are null for a game that has dropped off those charts; the peak columns keep its history.

Parameters

  • yearintegerqueryoptional

    Calendar year, with month.

    1,970–2,100 · example 2026

  • monthintegerqueryoptional

    Calendar month 1-12, with year.

    1–12 · example 9

  • periodstringqueryoptional

    A rolling window ending today instead of a calendar month: 7d, 3m or 6m.

    example 7d

    One of7d3m6m
  • sortstringqueryoptional

    players (default; players now), peak_players, topsellers_rank, topsellers_best_rank, release (release date), first_week_reviews, followers or conversion. Games without a value come last in either order.

    One ofplayerspeak_playerstopsellers_ranktopsellers_best_rankreleasefirst_week_reviewsfollowersconversion
  • orderstringqueryoptional

    asc or desc. Defaults to asc for the two topsellers ranks (best first) and to desc for everything else.

    One ofascdesc
  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-200, default 50).

    1–200 · default 50 · example 2

Response

dataarray of objects

Each item:

  • players_nowintegernullable

    Concurrent players at the latest hourly sample; null when the game isn't among the ~10,000 most played.

  • peak_playersintegernullable

    Most concurrent players steampeek has recorded for the game.

  • topsellers_rankintegernullable

    Position on Steam's global Top Sellers now (1 = top); null when it isn't on the chart.

  • topsellers_best_rankintegernullable

    Best position the game has reached on the global Top Sellers chart.

  • followersintegernullable

    Steam community followers at the latest daily snapshot.

  • first_weekobject
    Fields (5)
    • reviewsintegernullable

      Steam reviews written in the 7 days after release.

    • positiveintegernullable

      How many of those were positive.

    • followers_at_releaseintegernullable

      Followers at the last snapshot before release (null before December 2025, when tracking of this starts).

    • conversionnumbernullable

      First-week reviews ÷ followers at release: how far the launch reached beyond its pre-release audience. Null below 100 followers at release, where the ratio is noise.

    • conversion_vs_mediannumbernullable

      conversion as a multiple of the median launch (0.073); above 1 = a stronger launch than typical.

metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • released_fromstring

    First release day in the window (YYYY-MM-DD, UTC).

  • released_tostring

    Last release day in the window, inclusive.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/releases?period=7d&page_size=2' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "game": {
        "appid": 3393110,
        "name": "AION 2",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/3393110/10aa4b096ebe6af0d1dd7882e5ba004271aef6f7/header.jpg?t=1791205225",
        "store_url": "https://store.steampowered.com/app/3393110/",
        "steampeek_url": "https://steampeek.app/app/3393110",
        "release": {
          "date_text": "Oct 5, 2026",
          "timestamp": 1791205224,
          "precision": null,
          "coming_soon": false
        },
        "price": {
          "is_free": true,
          "currency": "USD",
          "final": 0,
          "initial": 0,
          "discount_percent": 0
        },
        "reviews": {
          "total": 17619,
          "percent_positive": 64,
          "label": "Mixed"
        },
        "developers": [
          "NC"
        ],
        "publishers": [
          "NC"
        ],
        "genres": [
          "Action",
          "Adventure",
          "Free To Play",
          "Massively Multiplayer",
          "RPG"
        ],
        "tags": [
          "Free to Play",
          "MMORPG",
          "Massively Multiplayer",
          "Adventure",
          "Open World"
        ],
        "platforms": {
          "windows": true,
          "mac": false,
          "linux": false
        }
      },
      "players_now": 349351,
      "peak_players": 397810,
      "topsellers_rank": 4,
      "topsellers_best_rank": 1,
      "followers": 124873,
      "first_week": {
        "reviews": 17222,
        "positive": 10991,
        "followers_at_release": 119241,
        "conversion": 0.1444,
        "conversion_vs_median": 1.98
      }
    },
    {
      "game": {
        "appid": 4891320,
        "name": "[WoG] War of Genesis: Idle Loot",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4891320/80d3cc10f37c03a6b520846baf44883651132896/header.jpg?t=1791357492",
        "store_url": "https://store.steampowered.com/app/4891320/",
        "steampeek_url": "https://steampeek.app/app/4891320",
        "release": {
          "date_text": "Oct 7, 2026",
          "timestamp": 1791357492,
          "precision": null,
          "coming_soon": false
        },
        "price": {
          "is_free": true,
          "currency": "USD",
          "final": 0,
          "initial": 0,
          "discount_percent": 0
        },
        "reviews": {
          "total": 1661,
          "percent_positive": 57,
          "label": "Mixed"
        },
        "developers": [
          "New Normal Soft Inc."
        ],
        "publishers": [
          "New Normal Soft Inc."
        ],
        "genres": [
          "Action",
          "Casual",
          "Early Access",
          "Free To Play",
          "RPG"
        ],
        "tags": [
          "Desktop Companion",
          "Trading",
          "Idler",
          "RPG",
          "Free to Play"
        ],
        "platforms": {
          "windows": true,
          "mac": false,
          "linux": false
        }
      },
      "players_now": 19837,
      "peak_players": 52580,
      "topsellers_rank": 1252,
      "topsellers_best_rank": 364,
      "followers": 1948,
      "first_week": {
        "reviews": 1728,
        "positive": 1018,
        "followers_at_release": 1948,
        "conversion": 0.8871,
        "conversion_vs_median": 12.15
      }
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 2,
    "total": 644,
    "has_more": true,
    "released_from": "2026-10-02",
    "released_to": "2026-10-08",
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/releases/upcoming

Release calendar

1 unit· lookupMCPreleases_upcoming

Every upcoming game with an exact release date and hour on Steam, soonest first: the full release calendar.

Unreleased games whose developer has set an exact release moment in Steamworks (about 1,800 at any time); each game's release.timestamp is that moment, to the hour. Games announced for a month, quarter or year, or "To be announced", aren't here: /releases/hype covers dated periods, and /catalog/games?status=coming_soon every unreleased app.

Release times are read from Steam every 6 hours; the list refreshes hourly, and follower counts daily. Games without follower data sort as 0.

Parameters

  • sortstringqueryoptional

    release (default): by release moment. followers: by Steam community followers.

    example followers

    One ofreleasefollowers
  • orderstringqueryoptional

    asc or desc. Defaults to asc for release (soonest first) and desc for followers (most followed first).

    One ofascdesc
  • qstringqueryoptional

    Only games whose name contains this text (case-insensitive).

    2–100 characters

  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-200, default 50).

    1–200 · default 50 · example 2

Response

dataarray of objects

Each item:

  • followersintegernullable

    Steam community followers at the latest snapshot (daily); null when not tracked yet.

metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/releases/upcoming?sort=followers&page_size=2' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "game": {
        "appid": 4771370,
        "name": "Cities: Skylines - Content Creator Pack: Holiday Getaways",
        "type": "dlc",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4771370/edee448144ce98f4bba6e4e274a28d0a8ce19d7b/header.jpg?t=1791385162",
        "store_url": "https://store.steampowered.com/app/4771370/",
        "steampeek_url": "https://steampeek.app/app/4771370",
        "release": {
          "date_text": "Oct 28, 2026",
          "timestamp": 1793178000,
          "precision": "date_full",
          "coming_soon": true
        },
        "price": {
          "is_free": false,
          "currency": null,
          "final": null,
          "initial": null,
          "discount_percent": null
        },
        "reviews": {
          "total": 0,
          "percent_positive": 0,
          "label": "No user reviews"
        },
        "developers": [
          "Tomas13TO"
        ],
        "publishers": [
          "Paradox Interactive"
        ],
        "genres": [
          "Simulation",
          "Strategy"
        ],
        "tags": [
          "City Builder",
          "Simulation",
          "Building",
          "Management",
          "Strategy"
        ],
        "platforms": {
          "windows": true,
          "mac": false,
          "linux": false
        }
      },
      "followers": 875527
    },
    {
      "game": {
        "appid": 4771380,
        "name": "Cities: Skylines - Content Creator Pack: Mansions & Manors",
        "type": "dlc",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4771380/b87dcd49352441d19ad36f6baaf58dc67354b36f/header.jpg?t=1791385169",
        "store_url": "https://store.steampowered.com/app/4771380/",
        "steampeek_url": "https://steampeek.app/app/4771380",
        "release": {
          "date_text": "Oct 28, 2026",
          "timestamp": 1793178000,
          "precision": "date_full",
          "coming_soon": true
        },
        "price": {
          "is_free": false,
          "currency": null,
          "final": null,
          "initial": null,
          "discount_percent": null
        },
        "reviews": {
          "total": 0,
          "percent_positive": 0,
          "label": "No user reviews"
        },
        "developers": [
          "Feindbold"
        ],
        "publishers": [
          "Paradox Interactive"
        ],
        "genres": [
          "Simulation",
          "Strategy"
        ],
        "tags": [
          "City Builder",
          "Simulation",
          "Building",
          "Management",
          "Strategy"
        ],
        "platforms": {
          "windows": true,
          "mac": false,
          "linux": false
        }
      },
      "followers": 875527
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 2,
    "total": 4392,
    "has_more": true,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/releases/hype

Hype board

1 unit· lookupMCPreleases_hype

Announced games releasing in the next 7 days, 1, 3 or 6 months, ranked by hype: followers plus their recent growth.

Unreleased games whose release date falls before the end of the UTC day period ahead. A game announced for a month, quarter or year counts at the end of that period, and one whose announced period has passed without a release is still listed; games without a date ("To be announced", "Coming soon") aren't.

hype_score = 4 × max(followers_gained_7d, 0) + followers / 10. The weight 4 was the best fit when ranking 1,967 2026 launches by their first-week peak players: the score ranks them better than followers alone (Spearman 0.69 against 0.62). DLC and other non-game apps take followers and growth from their base game, and their hype is the growth term alone (null when the growth is unknown).

Followers and growth update daily (00:20 UTC); the board refreshes hourly, so for up to an hour after midnight UTC its window can still end a day before meta.releasing_by.

Parameters

  • periodstringqueryoptional

    How far ahead: 7d, 1m, 3m (default) or 6m.

    default 3m · example 3m

    One of7d1m3m6m
  • sortstringqueryoptional

    hype (default), velocity (followers gained in 7 days), followers or release (release date). Games without a value come last.

    One ofhypevelocityfollowersrelease
  • orderstringqueryoptional

    asc or desc. Defaults to desc, and to asc for release (soonest first).

    One ofascdesc
  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-200, default 50).

    1–200 · default 50 · example 2

Response

dataarray of objects

Each item:

  • hype_scorenumbernullable

    4 × max(followers_gained_7d, 0) + followers / 10 (see the description).

  • followersintegernullable

    Steam community followers at the latest snapshot (daily); null when not tracked yet.

  • followers_gained_7dintegernullable

    Followers gained over the last 7 days (can be negative); null for a game tracked under a week.

metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • releasing_byinteger

    End of the window: games release at or before this moment.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/releases/hype?period=3m&page_size=2' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "game": {
        "appid": 4435490,
        "name": "Call of Duty®: Modern Warfare® 4",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4435490/0c492be3204835d71e8b454b6eb1817f8ff68c0d/header.jpg?t=1791307351",
        "store_url": "https://store.steampowered.com/app/4435490/",
        "steampeek_url": "https://steampeek.app/app/4435490",
        "release": {
          "date_text": "Oct 22, 2026",
          "timestamp": 1792731600,
          "precision": "date_full",
          "coming_soon": true
        },
        "price": {
          "is_free": false,
          "currency": "USD",
          "final": 6999,
          "initial": 6999,
          "discount_percent": 0
        },
        "reviews": {
          "total": 0,
          "percent_positive": 0,
          "label": "No user reviews"
        },
        "developers": [
          "Infinity Ward",
          "Beenox",
          "Digital Legends",
          "Activision Shanghai",
          "Raven Software"
        ],
        "publishers": [
          "Activision"
        ],
        "genres": [
          "Action"
        ],
        "tags": [
          "Action",
          "Shooter",
          "FPS",
          "Multiplayer",
          "First-Person"
        ],
        "platforms": {
          "windows": true,
          "mac": false,
          "linux": false
        }
      },
      "hype_score": 75921,
      "followers": 712414,
      "followers_gained_7d": 1170
    },
    {
      "game": {
        "appid": 4954910,
        "name": "Scam With Your Friends",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4954910/128effac3212fc1b92b4f6cd8891995df0d4b199/header.jpg?t=1791402592",
        "store_url": "https://store.steampowered.com/app/4954910/",
        "steampeek_url": "https://steampeek.app/app/4954910",
        "release": {
          "date_text": null,
          "timestamp": 1793430000,
          "precision": "date_month",
          "coming_soon": true
        },
        "price": {
          "is_free": false,
          "currency": null,
          "final": null,
          "initial": null,
          "discount_percent": null
        },
        "reviews": {
          "total": 0,
          "percent_positive": 0,
          "label": "No user reviews"
        },
        "developers": [
          "JakeHub",
          "Metater"
        ],
        "publishers": [
          "Jatater Worldwide"
        ],
        "genres": [
          "Action",
          "Casual",
          "Early Access",
          "Indie",
          "Simulation"
        ],
        "tags": [
          "Online Co-Op",
          "Artificial Intelligence",
          "Voice Control",
          "Job Simulator",
          "Dark Comedy"
        ],
        "platforms": {
          "windows": true,
          "mac": false,
          "linux": false
        }
      },
      "hype_score": 26309,
      "followers": 13087,
      "followers_gained_7d": 6250
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 2,
    "total": 11058,
    "has_more": true,
    "releasing_by": 1799452799,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}

Endpoints

Publishers

GET/api/v1/publishers

Publisher list

1 unit· lookupMCPpublishers_list

Steam publishers and developers ranked by followers of their Steam page, with catalog size and players.

Every publisher or developer page steampeek tracks (about 27,000). Followers are refreshed daily; apps, apps_in_topsellers and players are computed for each page of results, and the list is cached for up to an hour.

Parameters

  • sortstringqueryoptional

    followers (default) or name.

    One offollowersname
  • orderstringqueryoptional

    asc or desc. Defaults to desc for followers (most followed first) and asc for name (A to Z).

    One ofascdesc
  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-200, default 50).

    1–200 · default 50 · example 2

Response

dataarray of objects

Each item:

  • rankintegernullable

    Position by followers (1 = most followed), whatever sort is.

  • clanidinteger
  • namestring
  • avatarstringnullable

    URL of the page's avatar image.

  • followersinteger

    Followers of the publisher's Steam page (daily snapshot, around 10:00 UTC).

  • appsintegernullable

    Apps in steampeek's catalog from this publisher: games, DLC, soundtracks, demos. Null, like apps_in_topsellers and players, when these counts couldn't be read for the page (rare).

  • apps_in_topsellersintegernullable

    How many of those are on Steam's global Top Sellers chart now.

  • playersintegernullable

    Concurrent players across the publisher's games: the sum of each game's average over the latest complete UTC day.

  • steam_urlstring

    The publisher's page on the Steam store.

  • steampeek_urlstring
metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/publishers?page_size=2' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "rank": 1,
      "clanid": 33273264,
      "name": "Capcom",
      "avatar": "https://avatars.fastly.steamstatic.com/6b62a91eb5a093261d8831d1908717bab0d687e9_full.jpg",
      "followers": 1728947,
      "apps": 1430,
      "apps_in_topsellers": 109,
      "players": 113568,
      "steam_url": "https://store.steampowered.com/curator/33273264/",
      "steampeek_url": "https://steampeek.app/publisher/33273264"
    },
    {
      "rank": 2,
      "clanid": 33075774,
      "name": "Ubisoft",
      "avatar": "https://avatars.fastly.steamstatic.com/4a5d676cb58bea0828ce6691be7afec24f85d13e_full.jpg",
      "followers": 1640455,
      "apps": 1320,
      "apps_in_topsellers": 126,
      "players": 131155,
      "steam_url": "https://store.steampowered.com/curator/33075774/",
      "steampeek_url": "https://steampeek.app/publisher/33075774"
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 2,
    "total": 27954,
    "has_more": true,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/publishers/{clanid}

Publisher

1 unit· lookupMCPpublishers_get

One publisher or developer page: followers, released and upcoming games, games on the top-sellers chart.

Refreshed daily with the publisher's follower snapshot; cached for up to an hour.

Parameters

  • clanidintegerpathrequired

    Steam curator (publisher/developer page) id: the number in store.steampowered.com/curator/<id>.

    ≥ 1 · example 3584665

Response

dataobject
  • clanidinteger
  • namestring
  • avatarstringnullable

    URL of the page's avatar image.

  • background_imagestringnullable

    URL of the page's header background, when it has one.

  • followersinteger

    Followers of the publisher's Steam page (daily snapshot, around 10:00 UTC).

  • released_gamesinteger

    Released games from this publisher in steampeek's catalog.

  • upcoming_gamesinteger

    Announced, unreleased games from this publisher.

  • games_in_topsellersinteger

    How many of its games are on Steam's global Top Sellers chart now.

  • data_updated_atintegernullable

    When the page was last read from Steam.

  • steam_urlstring

    The publisher's page on the Steam store.

  • steampeek_urlstring
metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/publishers/3584665' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "clanid": 3584665,
    "name": "Supergiant Games",
    "avatar": "https://avatars.fastly.steamstatic.com/a2ac03c229b9dd346495c1efdd7e7c37f910a22f_full.jpg",
    "background_image": "https://clan.fastly.steamstatic.com/images/3584665/4d8fbe51e7c10dee74befc8b8bd168878676c696.png",
    "followers": 164269,
    "released_games": 8,
    "upcoming_games": 0,
    "games_in_topsellers": 7,
    "data_updated_at": 1791453600,
    "steam_url": "https://store.steampowered.com/curator/3584665/",
    "steampeek_url": "https://steampeek.app/publisher/3584665"
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/publishers/{clanid}/games

Publisher's games

1 unit· lookupMCPpublishers_games

The games a publisher or developer page lists, newest first, a page at a time.

Every app tied to the publisher's page in steampeek's catalog, released and upcoming. The default order puts released games first, newest release first, then upcoming ones.

Parameters

  • clanidintegerpathrequired

    Steam curator (publisher/developer page) id: the number in store.steampowered.com/curator/<id>.

    ≥ 1 · example 3584665

  • typestringqueryoptional

    all (default), game, dlc or demo.

    default all · example game

    One ofallgamedlcdemo
  • upcoming_onlyboolean | stringqueryoptional

    true: only games not released yet.

  • sortstringqueryoptional

    release (default; release date), reviews (Steam review count) or followers. Games without a value come last.

    One ofreleasereviewsfollowers
  • orderstringqueryoptional

    asc or desc (default desc).

    One ofascdesc
  • pageintegerqueryoptional

    Page number, starting at 1.

    1–10,000 · default 1

  • page_sizeintegerqueryoptional

    Items per page (1-200, default 50).

    1–200 · default 50 · example 1

Response

dataarray of objects

Each item:

  • followersintegernullable

    Steam community followers of the game (latest daily snapshot).

metaobject

Every response's meta carries request_id and units.

  • pageinteger
  • page_sizeinteger
  • totalintegernullable

    Total items, when known.

  • has_moreboolean
  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/publishers/3584665/games?type=game&page_size=1' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "game": {
        "appid": 1145350,
        "name": "Hades II",
        "type": "game",
        "header_image": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/1145350/91ac334a2c137d08968ccc0bc474a02579602100/header.jpg?t=1779901265",
        "store_url": "https://store.steampowered.com/app/1145350/",
        "steampeek_url": "https://steampeek.app/app/1145350",
        "release": {
          "date_text": "Sep 25, 2025",
          "timestamp": 1758816089,
          "precision": null,
          "coming_soon": false
        },
        "price": {
          "is_free": false,
          "currency": "USD",
          "final": 2999,
          "initial": 2999,
          "discount_percent": 0
        },
        "reviews": {
          "total": 114969,
          "percent_positive": 95,
          "label": "Overwhelmingly Positive"
        },
        "developers": [
          "Supergiant Games"
        ],
        "publishers": [
          "Supergiant Games"
        ],
        "genres": [
          "Action",
          "Indie",
          "RPG"
        ],
        "tags": [
          "Action",
          "Roguelike",
          "Roguelite",
          "Hack and Slash",
          "Mythology"
        ],
        "platforms": {
          "windows": true,
          "mac": true,
          "linux": false
        }
      },
      "followers": 292455
    }
  ],
  "meta": {
    "page": 1,
    "page_size": 1,
    "total": 5,
    "has_more": true,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 1,
      "day": {
        "used": 121,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6231,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/publishers/{clanid}/followers

Publisher followers history

3 units· seriesMCPpublishers_followers

Followers of a publisher's Steam page over time, one point per day or week.

Snapshots are taken once a day, around 10:00 UTC. daily gives every snapshot; weekly keeps the last snapshot of each week (weeks start on Monday, UTC). History starts when steampeek began tracking the page; use from=0 for all of it.

Parameters

  • clanidintegerpathrequired

    Steam curator (publisher/developer page) id: the number in store.steampowered.com/curator/<id>.

    ≥ 1 · example 3584665

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 90 days before to. Use 0 for "since tracking began".

    example 2026-10-05

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-10-08

  • resolutionstringqueryoptional

    daily (default) or weekly: one point per UTC day or per week.

    default daily

    One ofdailyweekly

Response

dataarray of objects

Each item:

  • timestampinteger

    When the snapshot was taken (the last one of its day or week).

  • followersinteger
metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/publishers/3584665/followers?from=2026-10-05&to=2026-10-08' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "timestamp": 1791194400,
      "followers": 164139
    },
    {
      "timestamp": 1791280800,
      "followers": 164182
    },
    {
      "timestamp": 1791367200,
      "followers": 164223
    }
  ],
  "meta": {
    "from": 1791158400,
    "to": 1791417600,
    "bucket_seconds": 86400,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}
GET/api/v1/publishers/{clanid}/players

Publisher players history

3 units· seriesMCPpublishers_players

Daily players across all of a publisher's games, with the five most-played games of each day.

For each UTC day: every game's average concurrent players that day, summed over the publisher's games, plus the day's top 5. A game with several publishers counts for each of them. A day is added after it ends (at 00:45 UTC), so the latest point is yesterday.

Parameters

  • clanidintegerpathrequired

    Steam curator (publisher/developer page) id: the number in store.steampowered.com/curator/<id>.

    ≥ 1 · example 3584665

  • fromnumber | stringqueryoptional

    Start of the window: epoch seconds or ISO 8601. Defaults to 90 days before to. Use 0 for "since tracking began".

    example 2026-10-06

  • tonumber | stringqueryoptional

    End of the window: epoch seconds or ISO 8601. Defaults to now.

    example 2026-10-08

Response

dataarray of objects

Each item:

  • datestring

    The UTC day (YYYY-MM-DD).

  • timestampinteger

    00:00 UTC of that day.

  • playersinteger

    Average concurrent players that day, summed over the publisher's games.

  • top_gamesarray of objects

    The publisher's five most-played games that day.

    Item fields (4)
    • rankinteger
    • appidinteger
    • namestring
    • playersinteger

      The game's average concurrent players that day.

metaobject

Every response's meta carries request_id and units.

  • frominteger

    Epoch seconds (UTC).

  • tointeger

    Epoch seconds (UTC).

  • bucket_secondsinteger

    Resolution: 0 = every stored sample; otherwise each point aggregates this many seconds.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/publishers/3584665/players?from=2026-10-06&to=2026-10-08' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": [
    {
      "date": "2026-10-06",
      "timestamp": 1791244800,
      "players": 9175,
      "top_games": [
        {
          "rank": 1,
          "appid": 1145360,
          "name": "Hades",
          "players": 4984
        },
        {
          "rank": 2,
          "appid": 1145350,
          "name": "Hades II",
          "players": 4149
        },
        {
          "rank": 3,
          "appid": 107100,
          "name": "Bastion",
          "players": 19
        }
      ]
    },
    {
      "date": "2026-10-07",
      "timestamp": 1791331200,
      "players": 9004,
      "top_games": [
        {
          "rank": 1,
          "appid": 1145360,
          "name": "Hades",
          "players": 4900
        },
        {
          "rank": 2,
          "appid": 1145350,
          "name": "Hades II",
          "players": 4063
        },
        {
          "rank": 3,
          "appid": 107100,
          "name": "Bastion",
          "players": 18
        }
      ]
    }
  ],
  "meta": {
    "from": 1791244800,
    "to": 1791417600,
    "bucket_seconds": 86400,
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 3,
      "day": {
        "used": 123,
        "limit": 5000,
        "resets_at": "2026-10-09T00:00:00.000Z"
      },
      "month": {
        "used": 6233,
        "limit": 50000,
        "resets_at": "2026-11-01T00:00:00.000Z"
      }
    }
  }
}

Endpoints

Account

GET/api/v1/account/usage

Usage and limits

FreeMCPaccount_usage

Units used and left today and this month, and what each call costs. Free.

Units are shared by every key on the account and the hosted MCP server. The daily cap resets at 00:00 UTC, the monthly pool on the 1st at 00:00 UTC. This call costs nothing and works when the allowance is spent.

Parameters

None.

Response

dataobject
  • dayobject
    Fields (4)
    • usedinteger
    • limitinteger
    • leftinteger
    • resets_atstring

      ISO 8601, UTC.

  • monthobject
    Fields (4)
    • usedinteger
    • limitinteger
    • leftinteger
    • resets_atstring

      ISO 8601, UTC.

  • requests_per_minute_per_keyinteger
  • costsobject

    Units a call costs, by the class each endpoint lists.

    Fields (3)
    • lookupinteger
    • seriesinteger
    • forecastinteger
  • this_keyobject

    This month, the key that made this call.

    Fields (2)
    • requestsinteger
    • unitsinteger
  • endpointsarray of objects

    This month, every key, most units first.

    Item fields (4)
    • endpointstring
    • channelstring
      One ofrestmcp
    • requestsinteger
    • unitsinteger
metaobject

Every response's meta carries request_id and units.

  • request_idstring

    Quote it if you report a problem.

  • unitsobjectUnits ›

Example request

curl 'https://steampeek.app/api/v1/account/usage' \
  -H "Authorization: Bearer $STEAMPEEK_API_KEY"

Example response

200 OK
{
  "data": {
    "day": {
      "used": 359,
      "limit": 5000,
      "left": 4641,
      "resets_at": "2026-10-09T00:00:00.000Z"
    },
    "month": {
      "used": 359,
      "limit": 50000,
      "left": 49641,
      "resets_at": "2026-11-01T00:00:00.000Z"
    },
    "requests_per_minute_per_key": 60,
    "costs": {
      "lookup": 1,
      "series": 3,
      "forecast": 10
    },
    "this_key": {
      "requests": 160,
      "units": 359
    },
    "endpoints": [
      {
        "endpoint": "games.forecast",
        "channel": "rest",
        "requests": 11,
        "units": 70
      },
      {
        "endpoint": "catalog.filter",
        "channel": "rest",
        "requests": 18,
        "units": 51
      },
      {
        "endpoint": "games.players",
        "channel": "rest",
        "requests": 6,
        "units": 18
      },
      {
        "endpoint": "games.followers",
        "channel": "rest",
        "requests": 5,
        "units": 15
      },
      {
        "endpoint": "games.prices",
        "channel": "rest",
        "requests": 5,
        "units": 15
      }
    ]
  },
  "meta": {
    "request_id": "0b7f6a8e-3c1d-4f6b-9a51-2e8d4c7b1a90",
    "units": {
      "charged": 0
    }
  }
}

Reference

Objects

Objects that several responses share, described once. A field holding one links here.

Game summary

A game as every list returns it. /games/{appid} has the full record.

In the responses of Search games, Games that list this one (More like this), Chart, New & Trending, Biggest movers, Momentum, Filter the catalog, Released games, Release calendar, Hype board and Publisher's games.

  • appidinteger
  • namestring
  • typestringnullable

    game, dlc, demo, music, …

  • header_imagestringnullable
  • store_urlstring
  • steampeek_urlstring
  • releaseobject
    Fields (4)
    • date_textstringnullable

      The release date as the Steam store prints it ("21 Aug, 2012", "Q3 2026", "To be announced").

    • timestampintegernullable

      Release moment, epoch seconds. Exact to the hour only when precision is "date_full"; otherwise the end of the announced period.

    • precisionstringnullable

      How exact timestamp is: date_full, date_month, date_quarter, date_year, text_comingsoon or text_tba.

    • coming_soonbooleannullable

      Not released yet.

  • priceobject
    Fields (5)
    • is_freebooleannullable
    • currencystringnullable

      ISO 4217 code of the US store price (USD).

    • finalintegernullable

      Current price in the currency's minor unit (cents).

    • initialintegernullable

      Price before the discount, minor unit.

    • discount_percentintegernullable
  • reviewsobject
    Fields (3)
    • totalintegernullable
    • percent_positivenumbernullable
    • labelstringnullable

      Steam's own summary ("Very Positive"; "6 user reviews" below Steam's threshold).

  • developersarray of strings
  • publishersarray of strings
  • genresarray of strings
  • tagsarray of strings

    Up to 10 user tags, most-voted first.

  • platformsobject
    Fields (3)
    • windowsboolean
    • macboolean
    • linuxboolean

Units

What this call cost and what is left. day and month are present when the call cost units.

In every response's meta.

  • chargedinteger

    Units this call cost.

  • dayobjectoptional
    Fields (3)
    • usedinteger

      Units used in the period, this call included.

    • limitinteger
    • resets_atstring (date-time)
  • monthobjectoptional
    Fields (3)
    • usedinteger

      Units used in the period, this call included.

    • limitinteger
    • resets_atstring (date-time)

Versioning

v1 is stable. It changes only in ways a working client doesn't notice: new endpoints, new optional parameters, new fields in responses and new error codes, so ignore what you don't recognise. A breaking change would ship as /api/v2 instead of changing v1.

The OpenAPI document is generated from the same code as this page and the API itself, so it always describes what is deployed. Point a client generator or an API tool at https://steampeek.app/api/v1/openapi.json.

Questions or a missing endpoint: write to support@steampeek.app. Using the API means accepting the Terms of Service. The data comes from Steam's public store and community pages; steampeek is not affiliated with Valve.