Steam Reviews Scraper - Playtime, Votes & Sentiment
Pricing
from $1.60 / 1,000 scraped reviews
Steam Reviews Scraper - Playtime, Votes & Sentiment
Scrape Steam game reviews: recommended or not, full text, helpful and funny votes, and the author's playtime AT THE TIME OF REVIEW in hours. Filter by language, sentiment and sort. Bulk apps, no API key. $0.002 per review.
Pricing
from $1.60 / 1,000 scraped reviews
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
Steam Reviews Scraper — Playtime, Votes & Sentiment
Scrape reviews for any Steam game: recommended or not, the full review text, helpful and funny votes, and — the field that actually matters — how many hours the author had played at the moment they wrote it.
No API key, no login. $0.002 per review — an app with no matching reviews is recorded and not charged.
Input
{ "appId": "570", "maxReviews": 200, "language": "english" }
Bulk, negative reviews only, by store URL:
{"appIds": ["570", "https://store.steampowered.com/app/440/Team_Fortress_2/"],"reviewType": "negative","sort": "recent","maxReviews": 500}
| Field | Type | Notes |
|---|---|---|
appId | string | App id, or any store.steampowered.com/app/... URL. |
appIds | string[] | Up to 10 apps per run. |
maxReviews | integer | 1–1000 per app. You are charged per review returned. |
language | string | Steam language name — english, german, schinese, or all. |
sort | enum | recent, updated, all (Steam's helpfulness ranking). |
reviewType | enum | all, positive, negative. |
Output
{"ok": true,"appId": "570","totalReviews": 838200,"reviewScoreDesc": "Very Positive","recommendationId": "232971383","recommended": false,"review": "…","createdAt": "2026-08-14T18:05:33.000Z","helpfulVotes": 1030,"funnyVotes": 387,"helpfulnessScore": 0.9164,"steamPurchase": true,"receivedForFree": false,"onSteamDeck": false,"authorName": "…","authorPlaytimeHours": 7724.5,"authorPlaytimeAtReviewHours": 7680.8,"authorGamesOwned": 5,"authorReviewCount": 1}
What it gets right
- ⭐ Playtime at the time of review. Steam stores it and almost nothing surfaces it. It is the single number that separates a considered 400-hour review from a refund-window rant, and it is returned in hours — Steam's own unit is minutes, which nobody thinks in.
- ⭐ Totals are always present. Steam silently drops
total_reviews, the positive/negative split and the score label from its summary wheneverreview_typeis notall— measured. Those totals are what make a sample mean anything (42 negative reviews reads very differently against 800 than against 838,200), so they are fetched in their own request rather than reported as null. helpfulnessScoreis a number. Steam sends it as a string; a score you cannot sort is not a score.- Dates are ISO. Steam sends epoch seconds; read as milliseconds they land in 1970, and the spec asserts nothing predates Steam itself.
- Cursor paging is de-duplicated. Steam repeats its cursor at the end of a result set, so a naive pager loops and re-bills the same reviews. This stops on a repeated cursor and on a page that adds nothing new.
- Store URLs are resolved to app ids, so pasting a link works.
Pricing
$0.002 per review returned. 100 reviews is 20 cents. An app with no reviews under your filters
produces a reviewCount: 0 record and is not charged.
Limits
- 10 apps per run, up to 1000 reviews each.
- Reviews only. Not store metadata, prices, or player counts.
languageuses Steam's own names (english,schinese), not ISO codes.- Bundles and DLC pages are not review-bearing app ids; those return a clear error.
FAQ
Do I need a Steam API key? No — the review endpoint is public.
Can I get every review of a huge game? Up to 1000 per run; run again with a different sort
or language for more.
Why is authorPlaytimeAtReviewHours sometimes null? Steam does not record it on older
reviews.
Changelog
- 0.1 (2026-09-10) — first release. Playtime-at-review in hours, totals fetched independently of filters, numeric helpfulness score, de-duplicated cursor paging, store-URL resolution.