Steam Reviews Scraper avatar

Steam Reviews Scraper

Pricing

from $0.25 / 1,000 reviews

Go to Apify Store
Steam Reviews Scraper

Steam Reviews Scraper

Collect public Steam game reviews by App ID, Steam store URL, or game name. Filter by language, recommendation, purchase status, review order, dates, and off-topic activity. Export normalized review rows with links, engagement, game details, and reviewer context when available.

Pricing

from $0.25 / 1,000 reviews

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

🎮 Steam reviews for game research

Use this Actor if you are a game developer, publisher, researcher, journalist, or data analyst who needs public Steam review data. Each saved row represents a public Steam review with review text, recommendation outcome, source links, engagement, and game details. Reviewer context and developer responses appear when Steam provides them, giving you structured feedback for comparison and analysis.

Use cases

🧾 Structured Steam review rows

What you get

Every row has a stable review ID and direct review link, review text, recommendation outcome, source language, creation and update dates, engagement counts, and game identity. Steam review context, reviewer details, and developer responses appear when the source provides them. Game details can include genres, developers, publishers, release date, free-to-play status, and review totals and label. Optional source values stay unavailable when Steam does not provide them.

▶️ Collect reviews from selected games

How to run

  1. Choose one discovery method: Steam App IDs, Steam store URLs, or game names.
  2. Add one or more values only to the section for that method. Do not mix discovery methods in one run.
  3. Choose a language, recommendation setting, purchase status, review order, date range, and whether to include off-topic activity.
  4. Set a positive maxReviewsPerGame value when you want a per-game limit. The schema has no fixed upper bound. Leave it empty to get all publicly available reviews until the source is exhausted.
  5. Start the run and open the dataset link in the output.

⚙️ Input

Use one discovery method per run. Values in sections for other discovery methods are ignored. Date fields use YYYY-MM-DD and define an inclusive source review date range.

Input fields

FieldTypeWhat it does
discoveryMethodselectChooses appIds, storeUrls, or gameNames. The form starts with appIds, and only the selected method's values are used.
appIdsarray of stringsAdd at least one digit-only Steam App ID, such as 730.
storeUrlsarray of objectsAdd at least one object with a public Steam store /app/ URL in url.
gameNamesarray of stringsAdd at least one game name. Steam uses one best match for each submitted name.
languageselectChoose one listed Steam language or all. The default is all, and each row keeps its source language.
reviewTypeselectChoose all reviews, recommended reviews, or not-recommended reviews. The default is all.
purchaseTypeselectChoose all reviews, Steam purchases, or non-Steam purchases. The default is all.
reviewOrderselectChoose recent, recently updated, or most helpful reviews. The default is recent.
fromDatestringOptional inclusive start date for source reviews. Use YYYY-MM-DD.
toDatestringOptional inclusive end date for source reviews. Use YYYY-MM-DD.
includeOfftopicActivitybooleanInclude Steam activity marked as off-topic when this is on. The default is off.
maxReviewsPerGameintegerOptional positive limit for reviews from each game. The schema has no fixed upper bound. Leave it empty to get all publicly available reviews until the source is exhausted. The form pre-fills 100.

Successful default input

This example is copied from a successful default-input run on the current beta build.

{
"discoveryMethod": "appIds",
"appIds": [
"730"
],
"language": "all",
"reviewType": "all",
"purchaseType": "all",
"reviewOrder": "recent",
"includeOfftopicActivity": false,
"maxReviewsPerGame": 100
}

🧾 Output

Run output

FieldTypeWhat it does
datasetURL stringOpens the normalized Steam review rows in the default dataset.

Review row fields

FieldTypeWhat it does
reviewIdstringStable Steam ID for the review.
reviewUrlURL stringDirect public link to the review.
reviewTextstringText written by the Steam user.
recommendedbooleanWhether the user recommends the game.
languagestringLanguage selected by the user for the review.
createdAtISO 8601 date-time stringDate and time when the review was created.
updatedAtISO 8601 date-time stringDate and time when the review was last updated.
engagementobjectVote and comment counts recorded by Steam.
engagement.helpfulVotesintegerNumber of users who marked the review helpful.
engagement.funnyVotesintegerNumber of users who marked the review funny.
engagement.weightedHelpfulnessnumberSteam's weighted helpfulness score for the review.
engagement.commentCountintegerNumber of comments on the review.
reviewerobject, optionalPublic reviewer details when available.
reviewer.steamIdstringStable public Steam ID for the reviewer.
reviewer.displayNamestring, optionalPublic Steam display name shown for the reviewer.
reviewer.profileUrlURL string, optionalDirect public link to the reviewer's Steam profile.
reviewer.avatarUrlURL string, optionalPublic URL of the reviewer's Steam avatar.
reviewer.gamesOwnedinteger, optionalNumber of games Steam reports for the reviewer's account.
reviewer.reviewCountinteger, optionalNumber of reviews Steam reports for the reviewer's account.
reviewer.playtimeAtReviewMinutesinteger, optionalMinutes played before the review was posted.
reviewer.playtimeMinutesinteger, optionalTotal minutes played for the game when Steam reports it.
reviewer.recentPlaytimeMinutesinteger, optionalMinutes played in the recent period reported by Steam.
reviewContextobject, optionalPurchase and access details supplied by Steam.
reviewContext.steamPurchasebooleanWhether Steam marks the game as purchased on Steam.
reviewContext.receivedForFreebooleanWhether Steam marks the game as received for free.
reviewContext.earlyAccessbooleanWhether Steam marks the review as written during early access.
reviewContext.steamDeckbooleanWhether Steam marks the review as written on Steam Deck.
reviewContext.refundedboolean, optionalWhether Steam reports that the purchase was refunded.
developerResponseobject, optionalOfficial developer response shown with the review when one is present.
developerResponse.textstringText of the official developer response.
developerResponse.createdAtISO 8601 date-time stringDate and time when the developer response was posted.
gameobjectSteam game associated with the review.
game.appIdintegerSteam App ID for the game.
game.namestringPublic Steam name of the game.
game.storeUrlURL stringDirect public Steam store link for the game.
game.genresarray of strings, optionalSteam genres listed for the game.
game.developersarray of strings, optionalDevelopers listed by Steam for the game.
game.publishersarray of strings, optionalPublishers listed by Steam for the game.
game.releaseDatestring, optionalRelease date supplied by Steam for the game.
game.isFreeToPlayboolean, optionalWhether Steam marks the game as free to play.
game.reviewSummaryobject, optionalSteam review totals and rating for the game.
game.reviewSummary.positiveReviewsintegerNumber of positive reviews reported by Steam.
game.reviewSummary.negativeReviewsintegerNumber of negative reviews reported by Steam.
game.reviewSummary.scoreintegerSteam review score for the game.
game.reviewSummary.labelstringSteam text label for the game's review score.

Example review row

This complete row is copied from a successful current-beta run. Optional fields shown here were provided by Steam.

{
"reviewId": "223696996",
"reviewUrl": "https://steamcommunity.com/profiles/76561198934704395/recommended/1366540/?recommendationid=223696996",
"reviewText": "很好的游戏,使我时间大把消耗。游戏好玩,但对于我这个偏向于建造的玩家而言,求求你出个功能把黑雾模式关了,我不太想花心思在对付黑雾上,好不容易建一个星际运输线结果被黑雾打没了太受挫,我能理解其他玩家想要更多的挑战,但是也请理解理解我这样的。我很喜欢之前那种纯建造的感觉,看着自己的球一点点成型,很有成就感的说,所以请出一个黑雾的开关功能。",
"recommended": true,
"language": "schinese",
"createdAt": "2026-04-20T11:50:55.000Z",
"updatedAt": "2026-04-20T11:50:55.000Z",
"engagement": {
"helpfulVotes": 55,
"funnyVotes": 10,
"weightedHelpfulness": 0.8308402895927429,
"commentCount": 0
},
"reviewer": {
"steamId": "76561198934704395",
"profileUrl": "https://steamcommunity.com/profiles/76561198934704395/",
"displayName": "李狗蛋",
"gamesOwned": 23,
"reviewCount": 1,
"playtimeAtReviewMinutes": 1074,
"playtimeMinutes": 17033,
"recentPlaytimeMinutes": 701
},
"game": {
"appId": 1366540,
"name": "Dyson Sphere Program",
"storeUrl": "https://store.steampowered.com/app/1366540/",
"genres": [
"Indie",
"Simulation",
"Strategy",
"Early Access"
],
"developers": [
"Youthcat Studio"
],
"publishers": [
"Gamirror Games"
],
"releaseDate": "Jan 20, 2021",
"isFreeToPlay": false,
"reviewSummary": {
"positiveReviews": 89354,
"negativeReviews": 2365,
"score": 9,
"label": "Overwhelmingly Positive"
}
},
"reviewContext": {
"steamPurchase": true,
"receivedForFree": false,
"earlyAccess": true,
"steamDeck": false,
"refunded": false
},
"developerResponse": {
"text": "感谢反馈,非常理解您的挫败感。\n其实游戏已支持关黑雾或设成活靶子:\n\n新开档:不勾选“黑雾” 或 选“活靶子”难度(黑雾不攻击)。\n\n已有存档:回母星系找 “黑雾通讯器”,直接改成活靶子即可。\n\n这样就能安心纯建造了,祝您玩得开心!",
"createdAt": "2026-04-27T11:34:01.000Z"
}
}

💳 Pricing

Billing event

Each saved public Steam review uses one steam-review-extracted event. The buyer-facing event is called Review in the pricing panel. The current pricing file uses tiered per-event prices and has no separate one-time start event. Check the live pricing panel for the price on your Apify plan.

🔌 Integrations

Dataset access

Open the dataset link in the run output to browse the rows. You can export the dataset as JSON or CSV, or read it through the Apify API.

Video guide

❓ FAQ

How do I choose a game?

Choose one discovery method and enter App IDs, public Steam store URLs, or game names in its matching section.

Can I mix App IDs, store URLs, and game names?

No. Select one discovery method per run. Values in other discovery sections are ignored.

What happens when I submit a game name?

Steam uses one best match for each submitted game name. Use an App ID or store URL when you need to point to a specific game.

What does leaving Max reviews per game empty do?

It returns all publicly available reviews until the source is exhausted for each selected game. A positive value limits reviews from each game.

How do date filters work?

Enter fromDate and toDate as YYYY-MM-DD values. The selected range is inclusive of the source review dates.

What does the All languages choice do?

It requests reviews across the available Steam language scope. Each saved row still shows its source language in language.

Why can reviewer, context, or developer response fields be missing?

Steam does not provide every optional field for every review. The Actor keeps source values when available and does not invent missing data.

Do I need Steam credentials?

No buyer-supplied Steam credentials are needed. The Actor reads publicly available Steam review data.

How can I read or export the rows?

Open the dataset link in the run output, export the rows as JSON or CSV, or read them through the Apify API.

📝 Changelog

v0.0 (16-09-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré