Steam most played games API

Steam publishes concurrent player counts on the store homepage, but there is no supported JSON endpoint for the live most-played leaderboard. Trends MCP returns the Steam Most Played feed as ranked JSON for agents, cron jobs, and game analytics pipelines.

Game analysts search for steam most played api json when they want the homepage chart in a script, not a screenshot. Valve exposes per-game player counts through IPlayerService/GetNumberOfCurrentPlayers, but building a live leaderboard from that endpoint means maintaining an app ID list, rate-limiting thousands of calls, and reconciling duplicates. Most teams abandon that approach after the first sale event.

Trends MCP exposes the Steam Most Played feed as a single POST call. The response matches the JSON contract used for GitHub Trending Repos, X trending topics, and other live leaderboards on the platform.

Endpoint

POST https://api.trendsmcp.ai/api
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

Get the live Steam most played chart

{
  "mode": "top_trends",
  "type": "Steam Most Played",
  "limit": 25
}

The feed label is case-sensitive. Use exactly Steam Most Played as listed in the data sources documentation.

Response shape:

{
  "as_of_ts": "2026-06-21T14:30:00Z",
  "type": "Steam Most Played",
  "limit": 25,
  "count": 25,
  "data": [
    [1, "Counter-Strike 2"],
    [2, "Dota 2"],
    [3, "PUBG: BATTLEGROUNDS"]
  ]
}

Each row in data is a [rank, game_name] pair. Set limit up to 200. Use offset for pagination when pulling the full chart.

Code examples

Python

import requests

res = requests.post(
    "https://api.trendsmcp.ai/api",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"mode": "top_trends", "type": "Steam Most Played", "limit": 25}
)
res.raise_for_status()
chart = res.json()
for rank, title in chart["data"]:
    print(f"{rank}. {title}")

JavaScript

const res = await fetch("https://api.trendsmcp.ai/api", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    mode: "top_trends",
    type: "Steam Most Played",
    limit: 25
  })
});
const chart = await res.json();

curl

curl -s https://api.trendsmcp.ai/api \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode":"top_trends","type":"Steam Most Played","limit":10}'

MCP usage in Cursor or Claude

Connect Trends MCP per the Cursor setup guide, then prompt:

Using TrendsMCP, show me the top 15 games on the Steam Most Played chart right now.

The assistant routes to get_top_trends with the correct feed label. No Steam publisher Web API key is required for read access to the chart.

Pair with historical Steam player curves

The live chart answers what is winning concurrent players right now. It does not show whether a title is recovering after a patch or bleeding players since launch. For that, call the historical endpoint on the same API key:

{
  "source": "steam",
  "keyword": "Elden Ring",
  "percent_growth": ["3M", "1Y"]
}

That request returns normalized weekly concurrent player values and period-over-period growth. The Steam Trends API page documents keyword formatting and growth presets.

A practical pipeline: poll Steam Most Played hourly for rank deltas, then pull a 12-month growth curve only when a title enters the top 10 or jumps five ranks in a day.

Request counting and free tier

Each top_trends call counts as one request against the monthly plan allocation. The free tier includes 100 requests per month with no credit card. A hourly cron polling this feed consumes roughly 720 requests per month, which requires a paid plan or a slower poll interval.

Poll interval Requests per 30 days
Every hour ~720
Every 6 hours ~120
Daily ~30

For a daily digest emailed to a game studio Slack channel, the free tier covers the live chart plus several historical follow-up queries.

Error handling

Status Meaning Action
401 Missing or invalid API key Check Bearer token
400 Invalid feed type string Confirm exact label Steam Most Played
429 Monthly quota exhausted Upgrade plan or reduce poll frequency
500 Upstream pipeline error Retry with backoff

Error bodies follow {"error": "code", "message": "..."}. Log as_of_ts on successful responses so downstream dashboards can mark stale data when a poll fails.

Who uses this feed

Game studios watch whether rival titles spike during demo weekends or steal concurrent players after a balance patch. Rank movement on this chart often precedes Twitch viewership shifts by hours.

Investors and analysts treat the chart as a coarse real-time proxy for PC gaming attention. It is not revenue data, but sudden entries from early-access launches show up here before Metacritic scores settle.

Streamers and creators scan the chart for titles climbing into the top 20. A game moving from rank 40 to rank 12 in 48 hours usually correlates with clip volume on YouTube and TikTok.

None of these workflows require scraping the Steam store HTML. The JSON contract stays stable across frontend redesigns, which is the failure mode that breaks homegrown parsers.

Common questions

No. Valve's Steam Web API exposes GetNumberOfCurrentPlayers for a single app ID and ISteamChartsService for partner accounts. Neither returns the public most-played homepage chart as a documented JSON resource for general developers. Trends MCP returns a curated leaderboard snapshot through its own pipeline.
The feed reflects live concurrent player ranks at the time of the request. Polling every 15-60 minutes is typical for dashboards. Sub-minute polling burns request quota without adding signal because Steam chart positions move gradually unless a major launch or sale event occurs.
This endpoint returns the current ranked list only. For weekly concurrent player time series and growth percentages on a specific game title, use get_trends or get_growth with source set to steam and the game display name as the keyword. The historical Steam Trends API page covers that workflow.
The response data array returns rank and game name pairs in the same shape as other top_trends feeds. Absolute concurrent player counts may appear depending on upstream availability. Treat rank movement as the primary signal; exact player numbers can lag Valve's public display by a few minutes.