Steam Reviews Scraper
Pricing
from $0.40 / 1,000 reviews
Steam Reviews Scraper
Scrape Steam reviews and store details for any game. Reviews carry the text, thumbs up or down, helpfulness votes, both playtime figures and the language. Game records carry name, release date, developers, publishers, genres, platforms, price with currency and Metacritic score.
Pricing
from $0.40 / 1,000 reviews
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Steam Reviews and Game Details Scraper
Collects user reviews and store listings from Steam for any app, in one run. For each app you ask for, the actor optionally emits the game's store details first and then walks its reviews, so a single dataset carries both what a game is and what players say about it.
No Steam account, API key or login is needed. Both endpoints this actor reads are public.
What you get
Every record carries a type field, which is either game or review.
type: "review"
| Field | Meaning |
|---|---|
recommendation_id | Steam's own ID for the review. Unique, and what de-duplication is keyed on. |
app_id | The app the review is about. |
review | The review text. |
voted_up | true for Recommended, false for Not Recommended. |
language | Steam language code, e.g. english, schinese. |
votes_up, votes_funny | Helpful and funny vote counts. |
weighted_vote_score | Steam's helpfulness score, 0-1. Always a number here; Steam itself sends it as a string on some reviews and a float on others. |
comment_count | Comments on the review. |
timestamp_created, timestamp_updated | Unix seconds. |
steam_purchase | true if bought on Steam, false if a key was activated elsewhere. |
received_for_free, refunded, written_during_early_access, primarily_steam_deck | Steam's own flags. |
author_steamid | The reviewer's 64-bit SteamID. |
author_playtime_at_review_minutes | Playtime in minutes when the review was written. |
author_playtime_forever_minutes, author_playtime_last_two_weeks_minutes | Playtime in minutes. |
author_num_games_owned, author_num_reviews, author_last_played | Reviewer profile figures. |
type: "game"
| Field | Meaning |
|---|---|
app_id, name | Identity. |
app_type | game, dlc, demo, music, video, hardware or mod. |
is_free | Free-to-play flag. |
release_date, coming_soon | Release date as Steam formats it, and whether it is still unreleased. |
developers, publishers | Lists of names. |
genres, categories | Lists of labels, e.g. Action, Multi-player. |
platforms | Any of windows, mac, linux. |
price_final, price_initial | Price in the smallest currency unit - 3999 means $39.99. |
price_currency | ISO code the price is quoted in. See the note on countryCode below. |
price_discount_percent, price_formatted | Current discount, and the price as Steam displays it. |
metacritic_score, metacritic_url | Metacritic rating, when the app has one. |
recommendations_total | Steam's total review count for the app. |
required_age, short_description, website, header_image, supported_languages | Store listing extras. |
Fields that can be missing, and why they are null and not 0
Steam does not report these for every app. Where it does not, the field is
null. A 0 would read as a measurement - "this game costs nothing", "this
game scored zero on Metacritic" - and those are different claims from "Steam
did not say".
price_*isnullfor free-to-play games (Steam sends no price block at all), for unreleased games, and for games not sold in the country you asked for.metacritic_scoreandmetacritic_urlarenullfor most apps. Only a minority have a Metacritic entry.recommendations_totalisnullfor apps with too few reviews for Steam to publish a total.website,required_ageand the playtime fields are absent on some records and staynull.
Pricing currency depends on where the request comes from
Steam's details endpoint quotes prices in the currency of whichever address the
request leaves from. With a rotating residential proxy that means the same game
can come back in USD on one run and MXN on the next. The countryCode input
pins it - it defaults to US, and price_currency always states what was
actually returned.
Looking games up by name
Set searchTerms and the actor resolves each name to an app ID through Steam's
own store search - the same endpoint the store's search box calls, which needs
no credentials. It is a fuzzy relevance search, not an exact lookup: it
takes the top-ranked match, so searching witcher 3 can land on the base game
or on a DLC depending on how Steam ranks them that day. An exact appIds entry
is always the more precise input, and names that resolve to nothing are logged
and skipped rather than guessed at.
Filters
language, reviewType and purchaseType were each verified against the live
endpoint to actually change the result rather than being silently ignored. One
caveat on purchaseType: free-to-play titles have no product-key activations,
so every review is a Steam purchase and the filter appears to do nothing there.
It works normally on paid games.
Reviews are read in recent order rather than Steam's default relevance
ordering, because relevance is not a stable sort between requests and paging
through it revisits some reviews while skipping others.
Cost and de-duplication
You are charged once per record actually delivered to the dataset: one
item-scraped per game and one review-scraped per review, both after the
record is pushed. Reviews are de-duplicated on recommendation_id before
charging, so a review Steam serves on two pages is billed once.
A run that legitimately finds nothing - an app with no reviews matching your filters - pushes nothing and charges nothing beyond the actor start fee.