Steam Reviews Scraper avatar

Steam Reviews Scraper

Pricing

from $0.40 / 1,000 reviews

Go to Apify Store
Steam Reviews Scraper

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

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

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"

FieldMeaning
recommendation_idSteam's own ID for the review. Unique, and what de-duplication is keyed on.
app_idThe app the review is about.
reviewThe review text.
voted_uptrue for Recommended, false for Not Recommended.
languageSteam language code, e.g. english, schinese.
votes_up, votes_funnyHelpful and funny vote counts.
weighted_vote_scoreSteam'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_countComments on the review.
timestamp_created, timestamp_updatedUnix seconds.
steam_purchasetrue if bought on Steam, false if a key was activated elsewhere.
received_for_free, refunded, written_during_early_access, primarily_steam_deckSteam's own flags.
author_steamidThe reviewer's 64-bit SteamID.
author_playtime_at_review_minutesPlaytime in minutes when the review was written.
author_playtime_forever_minutes, author_playtime_last_two_weeks_minutesPlaytime in minutes.
author_num_games_owned, author_num_reviews, author_last_playedReviewer profile figures.

type: "game"

FieldMeaning
app_id, nameIdentity.
app_typegame, dlc, demo, music, video, hardware or mod.
is_freeFree-to-play flag.
release_date, coming_soonRelease date as Steam formats it, and whether it is still unreleased.
developers, publishersLists of names.
genres, categoriesLists of labels, e.g. Action, Multi-player.
platformsAny of windows, mac, linux.
price_final, price_initialPrice in the smallest currency unit - 3999 means $39.99.
price_currencyISO code the price is quoted in. See the note on countryCode below.
price_discount_percent, price_formattedCurrent discount, and the price as Steam displays it.
metacritic_score, metacritic_urlMetacritic rating, when the app has one.
recommendations_totalSteam's total review count for the app.
required_age, short_description, website, header_image, supported_languagesStore 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_* is null for 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_score and metacritic_url are null for most apps. Only a minority have a Metacritic entry.
  • recommendations_total is null for apps with too few reviews for Steam to publish a total.
  • website, required_age and the playtime fields are absent on some records and stay null.

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.