Steam Reviews Scraper avatar

Steam Reviews Scraper

Pricing

Pay per event

Go to Apify Store
Steam Reviews Scraper

Steam Reviews Scraper

Collect public Steam reviews from multiple games with language, sentiment, and date filters-without exposing reviewer identities.

Pricing

Pay per event

Rating

0.0

(0)

Developer

OrbitData Labs

OrbitData Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Privacy-first bulk Steam review collection with predictable cost controls.

Collect public Steam reviews from one or many games using app IDs or Steam Store URLs. Filter by language, recommendation type, sorting, and date range, set a hard result or cost limit, and export clean review, game-summary, and error records from one run. No login, no Steam API key, no browser, and no proxy by default. You are charged only for successfully stored results — never for failed runs, error records or skipped duplicates. A game with zero matching reviews stores (and charges) only its summary record, if enabled — the summary itself carries the rating data.

Why this scraper

  • Full date-range filterdateFrom/dateTo work on the newest-first walk with inclusive day bounds, so "reviews between the last two updates" is a first-class query.
  • Multi-game batches — mix store URLs and app IDs in one run; one failing game never kills the others (it becomes an error record instead).
  • Privacy-minimal by default — no author Steam ID, username, profile URL, avatar or status is ever output. Anonymous statistics (playtime, games owned) are kept, and can be disabled too.
  • Honest billing — no actor-start fee; per-review and per-summary events are charged only after the record is stored in the dataset.

Input

FieldDefaultNotes
games (required)Steam store URLs (https://store.steampowered.com/app/1245620/...) or app IDs ("1245620"), mixed freely
maxReviewsPerGame1000per-game cap
maxTotalReviews10000whole-run cap
languages["all"]Steam language codes (english, koreana, japanese, …)
reviewTypeallall / positive / negative
sortByrecentrecent (newest first) or helpful
dateFrom, dateToYYYY-MM-DD, UTC, both inclusive. Requires sortBy: "recent"
purchaseTypeallall / steam / non_steam_purchase
includeGameSummarytrueone game_summary record per game
includePlaytimeStatstrueanonymous reviewer statistics on each review
debugLogfalseone diagnostic log line per fetched page (anonymized cursor hashes)
proxyConfigurationoffSteam usually needs no proxy; enable datacenter proxies only if you see blocking

Example 1 — simplest possible run

{ "games": ["https://store.steampowered.com/app/1245620/ELDEN_RING/"] }

Example 2 — multiple games, negative Korean/English reviews only

{
"games": ["1245620", "570"],
"languages": ["english", "koreana"],
"reviewType": "negative",
"maxReviewsPerGame": 500
}

Example 3 — reviews between two game updates

{
"games": ["1245620"],
"sortBy": "recent",
"dateFrom": "2026-06-01",
"dateTo": "2026-06-30"
}

Example 4 — daily rating tracking with minimal review collection

{
"games": ["1245620", "570", "730"],
"maxReviewsPerGame": 1,
"includeGameSummary": true
}

You pay for 1 review + 1 summary per game and get each game's current review score, totals and positive/negative counts in the game_summary records.

Output

All records go to the default dataset with a recordType discriminator: review, game_summary, error. To export only reviews as CSV, filter recordType = review in the export dialog (or in your integration).

review record (flat, CSV-friendly)

{
"recordType": "review",
"appId": 1245620,
"gameName": "ELDEN RING",
"reviewId": "1234500001",
"reviewText": "Synthetic sample review written for this documentation — it does not quote any real Steam user.",
"language": "english",
"votedUp": true,
"votesUp": 12,
"votesFunny": 0,
"weightedVoteScore": 0.65,
"commentCount": 0,
"steamPurchase": true,
"receivedForFree": false,
"writtenDuringEarlyAccess": false,
"refunded": false,
"primarilySteamDeck": false,
"createdAt": "2026-08-22T09:15:14.000Z",
"updatedAt": null,
"developerResponse": null,
"developerRespondedAt": null,
"playtimeForeverMinutes": 8123,
"playtimeAtReviewMinutes": 6210,
"playtimeLast2WeeksMinutes": 340,
"lastPlayedAt": "2026-08-20T18:02:11.000Z",
"authorNumGamesOwned": 42,
"authorNumReviews": 7
}

game_summary record

Per game: reviewScore, reviewScoreDesc, totalReviews, totalPositive, totalNegative (as reported by Steam for your applied filters — a languages filter changes the totals), plus collectedReviews, duplicatesSkipped, stoppedReason and the filters used.

error record

Per failed input: errorType (INVALID_INPUT, NOT_FOUND_OR_UNAVAILABLE, BLOCKED, HTTP_ERROR), message, httpStatus. Error records are never charged.

Pricing (pay per event)

EventPrice
Review stored$0.00065
Game summary stored$0.002
Actor startfree

Reviews cost $0.00065 each and stored game summaries cost $0.002 each. There is no start fee. Empty results and error records are not charged.

RunCost
100 reviews + 1 summary$0.067
1,000 reviews + 1 summary$0.652
10,000 reviews + 1 summary$6.502
100,000 reviews + 1 summary$65.002
10 games x 1,000 reviews + 10 summaries$6.52

Upper bound for any run: maxTotalReviews x $0.00065 + games x $0.002.

Set a maximum cost per run in the Apify UI; the actor stops gracefully at the limit and reports exactly how many results were stored and charged. If storage and billing ever disagree, the run reports an explicit WARNING in its status — never a silent success.

FAQ

Why is there no author information? This Actor intentionally excludes direct reviewer identifiers such as Steam ID, persona name, profile URL, avatar, and persona status. Public non-identifying review statistics, including playtime and purchase flags, may still be included when Steam returns them. reviewId is the review's own public identifier (needed for deduplication); it is not an author identifier, though the review it points to is public on Steam.

What do the summary totals mean? They are Steam's totals for your applied filters at scrape time — e.g. with languages: ["koreana"] you get Korean-review totals.

Are review bombs included? Yes — off-topic review activity is included (filter_offtopic_activity=0), because complete data matters for analysis. Deduplication is by reviewId.

Which games work? Anything with public reviews — including delisted games that still have review pages (their gameName may be null). Age-gated games work without cookies. Invalid IDs and games with no data produce error records, not charges.

Limits & fairness Requests are rate-limited (~2.5 req/s max) with exponential backoff on errors; sustained blocking aborts the run gracefully with everything collected so far intact. You are responsible for complying with Steam's Terms of Service, GDPR and applicable laws when using extracted data.