Steam Reviews Scraper avatar

Steam Reviews Scraper

Pricing

$0.50 / 1,000 result items

Go to Apify Store
Steam Reviews Scraper

Steam Reviews Scraper

Scrape Steam player reviews and game store data to JSON/CSV: review text, playtime, recommended/not recommended, helpfulness votes, purchase type, plus prices, genres, developers and review-score summaries.

Pricing

$0.50 / 1,000 result items

Rating

0.0

(0)

Developer

Fetch Smith

Fetch Smith

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 minutes ago

Last modified

Share

Scrape Steam player reviews and Steam store data into JSON, CSV or Excel — no login, no browser, no proxy needed.

Give it Steam store URLs, numeric App IDs, or just game names to search for. You get every review with its full text, the reviewer's playtime, whether they recommend the game, helpfulness votes, whether it was a real Steam purchase, and (optionally) the game's name, developer, publisher, genres and release date attached to every row.

Pay per result: $0.0005 per review or game record. No start fee — a run that returns nothing costs nothing.

What you can do with it

  • Track sentiment after a patch or a price change — pull reviews sorted by most recent, filter to negative, and diff week over week.
  • Find bug reports in the wild — set keyword to crash, stutter, controller or refund and get only the reviews that mention it.
  • Filter out drive-by reviewsminPlaytimeHours: 10 keeps only reviewers who actually played the game.
  • Competitive researchdataType: "games" returns price, discount, genres, developer, Metacritic score, the full review-score summary (total positive/negative, % positive) and, optionally, the live concurrent player count.
  • Localised researchlanguage: "schinese", "russian", "brazilian" … or "all" for every language at once.
  • Feed an LLM / dataset pipeline — clean flat rows, stable reviewId, ISO-8601 timestamps.

Input

FieldTypeDefaultDescription
dataTypestringreviewsreviews = player reviews; games = store record for each game
appsarraySteam store URLs (https://store.steampowered.com/app/1145360/Hades/) or numeric App IDs (1145360)
searchTermsarrayFind games by name instead of / as well as URLs
maxReviewsPerAppinteger200Reviews per game before moving to the next one (max 5000)
maxResultsinteger2000Hard cap on rows pushed — also caps what you are charged
languagestringenglishSteam language code, or all
reviewTypestringallpositive / negative to keep only thumbs-up / thumbs-down
purchaseTypestringallsteam excludes key activations and free weekends
sortBystringrecentrecent, updated, or all (Steam's helpfulness ranking)
dayRangeintegerWith sortBy: "all", restrict to the last N days (1–365)
minPlaytimeHoursintegerKeep only reviewers with at least this many hours in the game
keywordstringKeep only reviews whose text contains this word/phrase
countrystringusTwo-letter code for store prices and availability
includeGameInfobooleantrueAttach game name/developer/publisher/genres/release date to every review
includePlayerCountbooleanfalsegames mode: also fetch the live concurrent player count
searchLimitinteger10Games taken from each search term

Example input

{
"dataType": "reviews",
"apps": ["https://store.steampowered.com/app/1145360/Hades/"],
"maxReviewsPerApp": 200,
"language": "english",
"reviewType": "negative",
"minPlaytimeHours": 5,
"keyword": "crash"
}

Output

Review row (dataType: "reviews")

{
"type": "review",
"appId": 1145360,
"reviewId": "234888482",
"review": "Best roguelike I have ever played, and the story actually lands.",
"language": "english",
"recommended": true,
"createdAt": "2026-09-10T03:35:39.000Z",
"updatedAt": "2026-09-10T03:37:38.000Z",
"votesUp": 0,
"votesFunny": 0,
"weightedVoteScore": 0.5,
"commentCount": 0,
"steamPurchase": true,
"receivedForFree": false,
"writtenDuringEarlyAccess": false,
"refunded": false,
"playtimeForeverHours": 3.9,
"playtimeAtReviewHours": 3.9,
"playtimeLastTwoWeeksHours": 3.7,
"authorSteamId": "76561197974061804",
"authorName": "BobbyRunout",
"authorProfileUrl": "https://steamcommunity.com/id/BobbyRunout/",
"authorNumGamesOwned": 1180,
"authorNumReviews": 100,
"reviewUrl": "https://steamcommunity.com/profiles/76561197974061804/recommended/1145360/",
"gameName": "Hades",
"developers": ["Supergiant Games"],
"publishers": ["Supergiant Games"],
"genres": ["Action", "Indie", "RPG"],
"releaseDate": "Sep 17, 2020",
"storeUrl": "https://store.steampowered.com/app/1145360/",
"scrapedAt": "2026-09-10T06:03:39.139Z"
}

Game row (dataType: "games")

{
"type": "game",
"appId": 367520,
"name": "Hollow Knight",
"appType": "game",
"storeUrl": "https://store.steampowered.com/app/367520/",
"isFree": false,
"priceCurrency": "GBP",
"price": 12.79,
"priceInitial": 12.79,
"discountPercent": 0,
"releaseDate": "24 Feb, 2017",
"developers": ["Team Cherry"],
"publishers": ["Team Cherry"],
"genres": ["Action", "Adventure", "Indie"],
"platforms": ["windows", "mac", "linux"],
"metacriticScore": 90,
"reviewScoreDesc": "Overwhelmingly Positive",
"totalReviews": 560648,
"totalPositive": 543211,
"totalNegative": 17437,
"positivePercent": 96.9,
"currentPlayers": 4132,
"country": "gb"
}

FAQ

Do I need a Steam API key or a proxy? No. This Actor only reads Steam's public store endpoints over plain HTTP. No login, no key, no residential proxy, so runs are fast and cheap.

Can I get all reviews of a huge game? Yes — the Actor paginates with Steam's review cursor. Set maxReviewsPerApp (up to 5000 per game) and maxResults for the overall cap. Remember you are charged per row returned, so set both deliberately.

Why did I get fewer reviews than maxReviewsPerApp? Either the game genuinely has fewer reviews in that language/filter combination, or your keyword / minPlaytimeHours filters removed the rest. Filtered-out reviews are not charged. The run's status message says which case it was.

Does dayRange work with the "most recent" sort? No — Steam only honours a day range in its helpfulness ranking, so set sortBy: "all" when you use dayRange. The other sorts are already chronological, so filter by createdAt on your side instead.

I set sortBy: "all" and got way fewer reviews than expected — why? Steam silently caps its helpfulness ranking to the last 30 days if you don't also set dayRange. For a true all-time "most helpful" pull, set dayRange: 365 explicitly alongside sortBy: "all".

My search term matched a soundtrack or DLC, not the game — is that a bug? No, that's Steam's own search behaviour: storesearch returns soundtracks and some DLC as regular type: "app" results alongside the base game. If you're using searchTerms, check the name/appId in your results, or switch to apps with the exact App ID to avoid ambiguity.

Which languages can I ask for? Any Steam language code: english, schinese, tchinese, japanese, koreana, russian, german, french, spanish, latam, brazilian, polish, turkish, italian, thai, vietnamese, … or all.

What happens if a game is delisted or region-locked? The run finishes successfully with a clear status message naming the App IDs Steam returned nothing for, instead of failing. You are only charged for rows you actually receive.


Source code: https://github.com/Fetchsmith/fetchsmith/tree/main/actors/steam-reviews-scraper More tools: fetchsmith.com · Built and maintained with AI assistance.