Steam Reviews Scraper — Exact Date Windows, No Key
Pricing
from $1.00 / 1,000 review scrapeds
Steam Reviews Scraper — Exact Date Windows, No Key
Scrape reviews for any Steam game by app id. Filter by language, positive/negative, purchase type and an exact date range. No API key, no login.
Pricing
from $1.00 / 1,000 review scrapeds
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape reviews for any game on Steam. Give it an app id or a store URL and get back the review text, the verdict, the vote counts, and a full author block — playtime, games owned, review history, Steam profile. No API key, no login, no cookies.
Ask for a date range and get that date range. Steam's own day_range filter leaks badly — asking
for 3 days returned reviews up to 3,515 days old, and a 30-day request let 33 of 60 through from
outside the window — so this scraper does not use it at all. It walks reviews newest-first and
enforces your window itself. Anything outside is never delivered and never charged, and the run log
says how many were trimmed.
What you can filter on
| Field | Type | Default | Notes |
|---|---|---|---|
appIds | array | — (required) | Numeric ids (570) or store URLs (…/app/292030/…). Several games per run |
maxItems | integer | 1000 | Hard cap across the whole run |
language | select | all | Steam language code, or every language |
reviewType | select | all | Positive only, negative only, or both |
purchaseType | select | all | Bought on Steam, activated from a key, or either |
onlyReviewsAfter | date | — | Start of the window, e.g. 2026-01-01 |
onlyReviewsBefore | date | — | End of the window; a bare date includes that whole day |
includeOffTopic | boolean | false | Include bursts Steam classes as off-topic review bombing |
All of these are verified live, not assumed. On The Witcher 3: negative returned 200 rows with none
recommended, positive + german returned 100 with all recommended and all German, and
non_steam_purchase returned 100 with none marked as a Steam purchase.
One caveat worth knowing. purchaseType only separates anything on a paid game. Every
acquisition of a free-to-play title counts as a Steam purchase, so on something like Dota 2 all three
settings return identical rows. That is Steam's behaviour, not a bug here.
A second one. Steam serves reviews newest-first, so a window well in the past means paging down through everything newer to reach it — a window from three weeks ago took 16 pages to fill 300 rows, where a recent one fills immediately. The upside of walking in order is that the crawl knows when it is finished: asking for a two-day window with a cap of 5,000 stopped after 6 pages and 191 reviews rather than running to the cap. The log reports both the pages walked and the rows trimmed.
What you get per review
Review: id, permalink, text, language, recommended or not, created and updated timestamps.
Engagement: helpful votes, funny votes, Steam's weighted vote score, comment count.
Context flags: bought on Steam, received free, written during early access, played mainly on Steam Deck, refunded.
Author: Steam id, display name, profile URL, avatar, games owned, reviews written, and playtime — at the time of the review, lifetime, and last two weeks — reported in hours rather than Steam's raw minutes.
Example input
{"appIds": ["292030"],"maxItems": 500,"language": "english","reviewType": "negative","onlyReviewsAfter": "2026-06-01","onlyReviewsBefore": "2026-08-31"}
Notes
- Steam's public review endpoint is used directly, so runs are fast and need no proxy.
- Reviews are deduplicated by
recommendationidwithin a run. - Cursor pagination stops when Steam stops advancing the cursor, rather than spinning on the last page.
- A run that finds nothing says why in its status rather than returning a silent empty dataset.