Steam API: Get game reviews
Reads public Steam player reviews for a game by name, store link, or app ID, with optional sorting (most helpful or most recent), verdict and language filters. Overall figures cover all lifetime reviews in every language and verdict.
Unofficial. Not affiliated with or endorsed by Steam.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Game, required
game Game name, Steam store link, or app ID, for example Hollow Knight.
Hollow Knight
- Sort optional
sort Order of reviews, for example most_recent.
most_helpful (default)
One of
most_helpful,most_recent.- Verdict optional
verdict Recommendation filter, for example negative.
all (default)
One of
all,positive,negative.- Language optional
language Review language name, for example French; all includes every language.
English (default)
- Max Results optional
max_results Maximum reviews to return, for example 20.
20 (default)
Whole number from 1 to 100.
Input as JSON
{ "game": "Hollow Knight"}Output
{ "game": "Hollow Knight", "reviews": [ { "review_id": "236276941", "review_url": "https://steamcommunity.com/profiles/76561198084238006/recommended/367520/" , "funny_votes": 2, "posted_date": "2026-09-26", "recommended": "yes", "review_text": "Great game. The lore is also incredible, especially when you finally piece together why [spoiler] the final boss stabbed himself, as he's actually trying to help you [/spoiler]. The soundtrack is amazing. The sealed vessel OST is the only thing that kept me sane during the path of pain. The only dow…" , "helpful_votes": 46, "hours_played_at_review": 100.9 }, { "review_id": "235370562", "review_url": "https://steamcommunity.com/profiles/76561199014701945/recommended/367520/" , "funny_votes": 0, "posted_date": "2026-09-16", "recommended": "yes", "review_text": "I hadn't played any metroidvania before, and was looking for a fun 2d platforming experience. Obviously Hollow Knight was the one to try. So far, really liking it! Sharp, quick gameplay, but slow enough you don't have to go super fast either, really good balance. \n\nArt style, music, and sound design…", "helpful_votes": 12, "hours_played_at_review": 22.3 }, { "review_id": "235764972", "review_url": "https://steamcommunity.com/profiles/76561198248757478/recommended/367520/" , "funny_votes": 0, "posted_date": "2026-09-21", "recommended": "yes", "review_text": "It's a great game. Should have picked it up sooner but was waiting for Silksong to release. You know, better late than never and all. Also, turn on \"Quick Cast\" and don't sleep on nail arts.", "helpful_votes": 7, "hours_played_at_review": 167.1 } ], "game_url": "https://store.steampowered.com/app/367520/" , "total_reviews": 503838, "percent_positive": 97, "overall_review_summary": "Overwhelmingly Positive"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"store.steampowered.com/get_game_reviews","input":{"game":"Hollow Knight"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "store.steampowered.com/get_game_reviews" , "input": { "game": "Hollow Knight" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "store.steampowered.com/get_game_reviews" , "input": { "game": "Hollow Knight" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run store.steampowered.com/get_game_reviews# with {"game":"Hollow Knight"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "game" ], "properties": { "game": { "type": "string", "minLength": 1, "description": "Game name, Steam store link, or app ID, for example Hollow Knight." }, "sort": { "enum": [ "most_helpful", "most_recent" ], "type": "string", "default": "most_helpful", "description": "Order of reviews, for example most_recent." }, "verdict": { "enum": [ "all", "positive", "negative" ], "type": "string", "default": "all", "description": "Recommendation filter, for example negative." }, "language": { "type": "string", "default": "English", "description": "Review language name, for example French; all includes every language." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum reviews to return, for example 20." } }}Output schema
{ "type": "object", "required": [ "game", "game_url", "overall_review_summary", "percent_positive", "total_reviews", "reviews" ], "properties": { "game": { "type": "string", "description": "Steam game title." }, "reviews": { "type": "array", "items": { "type": "object", "required": [ "review_id", "review_url", "recommended", "review_text", "posted_date", "hours_played_at_review", "helpful_votes", "funny_votes" ], "properties": { "review_id": { "type": "string", "description": "Steam recommendation ID.", "x-fous-developer": true }, "review_url": { "type": "string", "description": "Review page." }, "funny_votes": { "type": "integer", "description": "Funny votes." }, "posted_date": { "type": "string", "format": "date", "description": "Date the review was first posted." }, "recommended": { "enum": [ "yes", "no" ], "type": "string", "description": "Whether the player recommends the game." }, "review_text": { "type": "string", "description": "The player’s review." }, "helpful_votes": { "type": "integer", "description": "Helpful votes." }, "hours_played_at_review": { "type": [ "number", "null" ], "description": "Hours played when the review was posted." } }, "additionalProperties": false }, "description": "Matching player reviews in the requested order." }, "game_url": { "type": "string", "description": "Steam game page." }, "total_reviews": { "type": "integer", "description": "Number of all lifetime reviews." }, "percent_positive": { "type": [ "number", "null" ], "description": "Percent of all lifetime reviews that recommend the game." }, "overall_review_summary": { "type": [ "string", "null" ], "description": "Overall lifetime Steam review rating across all languages." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
store.steampowered.com/get_game_reviews- Returns
- game title and link, overall review summary, percent positive, total reviews, reviews (ID, link, recommended, text, posted date, hours played, helpful and funny votes)
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method store.steampowered.com/get_game_reviews with the inputs above.
Ask your agent
- What are people saying about Baldur's Gate 3 lately? Pull the 30 most recent player reviews and tell me the overall percent positive.
- Show me the most helpful negative Steam reviews for Cyberpunk 2077, I want to know the main complaints before buying.
- Get German-language reviews for app ID 1245620, sorted newest first, max 50.
- I'm deciding whether to pick up Stardew Valley — what's its overall review rating and total review count, plus the top 10 positive reviews with hours played?
- Grab recent Steam reviews in all languages for https://store.steampowered.com/app/1086940/ and include helpful and funny vote counts.
See more
All Steam methodsFinds a PC game on Steam by name, store link or app ID and returns its store details, country price, reviews, tags and live player count.
store.steampowered.com/get_gameGets a Steam game's current players, 24-hour peak, all-time peak and monthly player-count history from SteamCharts. Takes a game name, SteamCharts or Steam store link, or Steam app ID.
store.steampowered.com/get_player_count_historyLists Steam's top-selling, discounted, or new and trending games in store order, with prices for a chosen country, review summaries and release dates.
store.steampowered.com/list_top_sellersLists the games with the most players on Steam right now, with current and peak players and prices for a chosen country.
store.steampowered.com/list_most_playedGets public user reviews for an Android app on Google Play. The app can be given by name, Play Store link, or app ID.
play.google.com/get_app_reviewsGets customer reviews for an iPhone or iPad app, found by name or App Store link, from the selected country's App Store.
apps.apple.com/get_app_reviewsFinds a Sephora US product by name or Sephora link and returns its review summary and customer reviews, sorted and optionally filtered by skin type.
sephora.com/get_product_reviewsFinds a place on Google Maps by name and location and returns its public reviews in the chosen order.
google.com/get_place_reviews