The Steam API: game data, reviews, pricing, and player counts in one place

Updated:
The Steam API: game data, reviews, pricing, and player counts in one place

Steam's official Web API is fragmented across at least a dozen separate interfaces, each with its own authentication model, underdocumented response format, and endpoint-specific API key requirement. Getting game metadata from one endpoint, user reviews from another, and pricing from a third means managing multiple auth flows and stitching together incompatible JSON shapes. SteamDB's enriched data โ€” player counts, lowest-price history, patch logs, active sale alerts โ€” isn't available from Valve at all. It lives behind a website.

The Anysite Steam API consolidates all of it. Ten endpoints across two namespaces (/steam for the Store, /steamdb for SteamDB) return structured JSON with a single access-token header. No Valve key, no session management, no DOM parsing.

What the Steam API returns

The POST /api/steam/apps endpoint returns the full Store record for any game: name, genres, developer, publisher, metacritic score, pricing with discount percentage, DLC and package lists, achievement count, platform support, screenshots, and system requirements. Pass a numeric app ID or a Steam Store URL โ€” the endpoint accepts both.

Reviews are a separate call. POST /api/steam/apps/reviews accepts review_type (positive, negative, or all) and a language filter. Each review object includes the author's playtime at review time, whether the copy was purchased on Steam (vs gifted or received for free), a is_steam_purchase flag, and a weighted_vote_score that Steam uses for ranking. These fields matter when you're doing sentiment analysis โ€” a 200-hour player's negative review carries different weight than a 20-minute refund candidate.

What does the SteamDB API add that Steam's API doesn't?

The Steam Store API doesn't expose current player counts, historical pricing, or sale intelligence. SteamDB does. The POST /api/steamdb/apps endpoint returns the same enriched record SteamDB shows on its app pages: players_now, peak_24h, peak_all_time, current price and lowest-ever price, review totals split by positive and negative, SteamDB tags, and Steam Deck compatibility tier.

The POST /api/steamdb/charts endpoint returns the live player-count leaderboard โ€” rank, current players, 24h and all-time peaks for the top N games. Useful for tracking esports titles, measuring competitor game health, or building a live gaming dashboard. The POST /api/steamdb/sales endpoint returns currently discounted games with an is_historical_low boolean and a min_discount filter parameter. A 50%+ discount query against this endpoint powers a price-alert bot in about 30 lines of code.

Pricing and what each endpoint costs

All 10 endpoints cost 1 credit per request. A daily price alert scanning 50 games uses 1,500 credits per month (50 requests ร— 30 days). A review pipeline pulling 100 reviews per game across 20 games per week runs under 100 credits per month. Player-count polling (top 100 games, hourly) costs 72,000 credits per month. The Anysite Starter plan covers 15,000 credits at $49/month; Growth covers 100,000 at $200.

A minimal review-mining example

Search for a game, get its app ID, then pull negative reviews in English:

import requests

BASE = "https://api.anysite.io"
HEADERS = {"access-token": "YOUR_TOKEN", "Content-Type": "application/json"}

# Find the app ID
search = requests.post(f"{BASE}/api/steam/apps/search",
    headers=HEADERS, json={"term": "Cyberpunk 2077", "count": 1})
app_id = search.json()[0]["id"]

# Pull up to 200 negative English reviews
reviews = requests.post(f"{BASE}/api/steam/apps/reviews",
    headers=HEADERS,
    json={"appid": str(app_id), "count": 200,
          "review_type": "negative", "language": "english"})

for r in reviews.json():
    print(r["playtime_at_review"] // 60, "hrs โ€”", r["text"][:80])

The full endpoint reference, parameter schemas, and SDK examples are at anysite.io/endpoints/steam/.

What about the patch history and promotions endpoints?

POST /api/steamdb/apps/patches returns the build changelog indexed by SteamDB โ€” each entry includes the patch title, a Unix timestamp, and a has_patch_notes flag (some builds ship silently without public notes). This is useful for competitive monitoring: correlate update frequency with player-count changes, or detect when a competitor ships a major content drop. The SteamDB platform itself is a well-known reference site for Steam data; their API documentation for the raw data points is sparse, which is why this endpoint exists.

POST /api/steamdb/promotions returns the current list of free-to-keep and limited-time giveaways on Steam. Each record includes start_at and end_at timestamps โ€” enough to build a promotion-expiry alert without polling Steam directly.

Authentication

All 10 endpoints use the same access-token header โ€” no separate Valve key, no Steam session cookie, no additional setup. Get your token at app.anysite.io.