Steam Game Reviews Scraper
Pricing
$0.50 / 1,000 results
Steam Game Reviews Scraper
Fetch user reviews for any Steam game from Steam's public official store review API, with filtering, sorting, and date range support.
Pricing
$0.50 / 1,000 results
Rating
0.0
(0)
Developer
Zerah Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Fetch user reviews for any public Steam game - review text, recommendation status, helpfulness votes, playtime, Steam Deck and refund flags, and more - directly from Steam's current official reviews API, plus rule-based per-game insights and optional change tracking between runs.
Updated for Steam's new official reviews API (October 2026). Steam retired the
old store.steampowered.com/appreviews endpoint on October 22, 2026 - it now
redirects to the store homepage instead of returning data. This actor calls Steam's
replacement, IUserReviewsService/GetAppReviews, directly.
What it does
Give it one or more Steam games (store URLs, app IDs, or plain game names) and it will:
- Resolve each game from a full store URL (e.g.
https://store.steampowered.com/app/730/CounterStrike_2/), a plain app ID, or a free-text name (e.g.Stardew Valley) via Steam's public store search. - Look up the game's name via Steam's public app details endpoint (best-effort).
- Page through that game's reviews using cursor-based pagination.
- Filter by language (one, several, or all), recommendation (positive/negative), purchase type, minimum/maximum playtime at review, Steam Deck play, and whether to include off-topic "review bomb" activity.
- Sort by most recent, last updated, or most helpful.
- Restrict results to a date range - applied by Steam's API itself, so it works with any sort order and never fetches or charges for reviews outside your window.
- Optionally add one summary row per game with Steam's overall review score, totals, and how many reviews matched your filters.
- Optionally add one rule-based insights row per game (see below).
- Optionally track changes between runs, so a scheduled run only fetches reviews posted since the last time it ran.
- Clearly report games that can't be found, or names that don't resolve, instead of silently skipping them.
- Write a self-check report at the end of every run.
No personal reviewer identity (Steam ID, profile URL) is collected or output - only the review content and the aggregate author stats Steam exposes publicly (playtime, number of reviews written).
Why this actor
- Built on Steam's current API, not a deprecated one. Many Steam-review tools
were built against the old
store.steampowered.com/appreviewsendpoint, which Steam turned off in October 2026. This actor speaks the replacement API, including its new filters (playtime range, Steam Deck, server-side date range that works with any sort order, off-topic/review-bomb toggle). - Analysis, not just raw rows. An optional insights row per game gives you positive-rate trends, keyword counts for positive vs. negative reviews, playtime patterns, language mix, and refund/early-access share - computed locally from the reviews already fetched, with no extra Steam API calls, using transparent, deterministic rules.
- Cheap, transparent monitoring. Turn on change tracking and a scheduled run only pays for and fetches reviews posted since the previous run - not the whole history again.
- A self-check on every run. A
RUN_REPORTrecord in the key-value store tells you exactly what happened: games processed and resolved, rows pushed by type, errors by code, warnings (e.g. a search term matching nothing), and whether any output row was missing a required field. - Resilient to partial failures. One bad app ID or an unresolved game name never aborts the whole run - you get a clear error row for that entry and full results for the rest.
- No reviewer identity, ever. Steam IDs and profile links are never collected or output, by design - not configurable, not an opt-in.
How to use
- Add one or more games to Games (app ID or store URL) and/or Search by game
name (free text, resolved automatically). Any of these formats work:
730https://store.steampowered.com/app/730/CounterStrike_2/Counter-Strike 2(in Search by game name)
- Set Max reviews per game to cap how many reviews are fetched per game. Leave at
0to fetch all available reviews. - (Optional) Choose Sort by, Languages, Review type, and Purchase type to narrow down the results. Add Minimum/maximum playtime, Steam Deck only, or Include off-topic review bombs for finer control.
- (Optional) Set Date from / Date to to restrict reviews to a date range - this works with any sort order.
- (Optional) Leave Include game summary row and Include game insights row on (default) to get per-game aggregate rows alongside the raw reviews.
- (Optional) Enable Track changes between runs and set a Monitor name to fetch only new reviews on subsequent runs with the same name.
- (Optional) Turn on a proxy under Proxy configuration if you're fetching very large volumes across many games - Steam's review API itself has no anti-bot protection, so this is rarely required.
- Run the actor.
Example input
{"games": ["730"],"gameNames": ["Stardew Valley"],"maxReviewsPerGame": 100,"sort": "recent","languages": ["all"],"reviewType": "all","purchaseType": "all","includeGameSummary": true,"includeInsights": true}
Output example
Review row:
{"type": "review","appId": "730","gameName": "Counter-Strike 2","reviewId": "123456789","language": "english","reviewText": "Great game, runs well and the new engine is a big upgrade.","votedUp": true,"votesUp": 12,"votesFunny": 0,"weightedVoteScore": 0.52,"commentCount": 0,"steamPurchase": true,"receivedForFree": false,"writtenDuringEarlyAccess": false,"refunded": false,"primarilySteamDeck": false,"developerResponse": null,"developerRespondedAt": null,"createdAt": "2026-03-15T10:22:31.000Z","updatedAt": "2026-03-15T10:22:31.000Z","authorPlaytimeForeverHours": 245.3,"authorPlaytimeAtReviewHours": 180.1,"authorPlaytimeLastTwoWeeksHours": 6.5,"authorLastPlayedAt": "2026-03-20T08:00:00.000Z","authorNumReviews": 8,"scrapedAt": "2026-01-01T12:00:00.000Z"}
Game summary row (when Include game summary row is enabled):
{"type": "gameSummary","appId": "730","gameName": "Counter-Strike 2","reviewScoreDesc": "Very Positive","totalPositive": 1500000,"totalNegative": 150000,"totalReviews": 1650000,"totalMatching": 1650000,"scrapedAt": "2026-01-01T12:00:00.000Z"}
Game insights row (when Include game insights row is enabled) - computed from the reviews fetched in this run, not Steam's full history:
{"type": "gameInsights","appId": "730","gameName": "Counter-Strike 2","reviewsAnalyzed": 500,"positivePercentOverall": 82.4,"positivePercentLast30Days": 76.1,"monthlyTrend": [{ "month": "2026-01", "totalReviews": 120, "positivePercent": 85.0 }],"topPositiveKeywordCounts": [{ "keyword": "fun", "count": 42 }],"topNegativeKeywordCounts": [{ "keyword": "cheaters", "count": 18 }],"shareUnder2HoursPlaytimePercent": 9.2,"avgPlaytimeAtReviewPositiveHours": 310.5,"avgPlaytimeAtReviewNegativeHours": 95.2,"languageBreakdown": [{ "language": "english", "count": 210 }],"earlyAccessSharePercent": 0,"refundSharePercent": 1.2,"freeKeySharePercent": 3.4,"scrapedAt": "2026-01-01T12:00:00.000Z"}
Monitoring status row (when Track changes between runs is enabled):
{"type": "monitorStatus","appId": "730","gameName": "Counter-Strike 2","monitorName": "my-cs2-monitor","isFirstRun": false,"newReviewsCount": 14,"previousLastSeenAt": "2026-01-05T00:00:00.000Z","newLastSeenAt": "2026-01-06T00:00:00.000Z","scrapedAt": "2026-01-06T01:00:00.000Z"}
If a game can't be found, a name doesn't resolve, or an input entry is invalid, you'll get a clear error row instead of a silent gap in your data:
{"type": "error","input": "999999999","error": "GAME_NOT_FOUND","message": "App 999999999 was not found (appdetails failed and no reviews were returned)","scrapedAt": "2026-01-01T12:00:00.000Z"}
Run report
Every run writes a RUN_REPORT record to the default key-value store (and
summarizes it in the run's status message): games processed, rows pushed by type,
errors by code, warnings (e.g. a search term that matched nothing, or a game with
zero reviews for the selected filters), and whether any output row was found missing
a required field.
Tips
- Most helpful sort: pages a limited top-helpful set within a day-range window rather than full history - use "Most recent" or "Last updated" to page through a game's complete review history.
- Date range works with any sort: unlike the old retired endpoint, Steam's current API applies date filtering server-side regardless of sort order.
- Language codes: use Steam's API language codes (e.g.
english,german,schinese,brazilian) orallfor every language. Languages accepts several at once. - Change tracking: use the same Monitor name across scheduled runs to keep monitoring the same games cheaply; use a new name to start a fresh monitor.
Pricing
This actor uses pay-per-result pricing: $0.50 per 1,000 results, with no start fee. A result is one review row, one game summary row, or one game insights row. Error rows and monitoring status rows are never charged. You can cap spending with the run's maximum cost setting, and the actor stops fetching further reviews as soon as that limit is reached.
FAQ
Is this legal? The actor only reads data that Steam already publishes publicly through its own official reviews API, store search API, and app details API - the same data shown on every game's public review page. It does not access private data, log in, or bypass any access controls.
Does it collect reviewer identities? No. Steam IDs and profile links are never collected or output - only the review content and the aggregate author stats Steam exposes publicly (playtime, review count).
What happens if a game ID is invalid or a name doesn't resolve? You'll get an
error row (GAME_NOT_FOUND, SEARCH_NO_MATCH, or INVALID_INPUT) for that entry
instead of a failed run - all other games in the same run are unaffected.
How are the insights calculated? Keyword counts are simple stopword-filtered word/bigram frequency counts over English-language reviews; every other insight field is a straightforward aggregate (percentages, averages, breakdowns) computed from the reviews already fetched in the run.
What are the limits? Steam's review API only returns reviews it has indexed for
the selected filters; very old or heavily filtered combinations (e.g. a rare
language with positive-only reviews) may return fewer results than the total review
count suggests. Insights are computed from the reviews fetched in the current run
(capped for performance on very large pulls), not from a game's entire review
history, unless Max reviews per game is set to 0.