Steam Reviews Scraper · Game Reviews, Ratings & Playtime avatar

Steam Reviews Scraper · Game Reviews, Ratings & Playtime

Pricing

from $1.30 / 1,000 steam game review returneds

Go to Apify Store
Steam Reviews Scraper · Game Reviews, Ratings & Playtime

Steam Reviews Scraper · Game Reviews, Ratings & Playtime

Scrape Steam game reviews, ratings, playtime, helpfulness votes, and purchase types across any Steam App ID. Fast HTTP scraper, no login required.

Pricing

from $1.30 / 1,000 steam game review returneds

Rating

0.0

(0)

Developer

Tarek Etman

Tarek Etman

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

reapX — public sources in, addressable records out

Steam Reviews Scraper · Game Reviews, Ratings & Playtime

Extract user reviews, star ratings, playtime hours, helpfulness votes, and purchase verification metrics from any game on Steam. The Steam Reviews Scraper provides structured data from Steam's official review feeds without requiring user login or Steam API credentials.

Maintained by reapX. Every row cites the Apify run that produced it — nothing is inferred, modelled or filled in, and a field absent from the source is absent from the row. The extracted archive for this source is browsable at reapx.dev/data/steam-reviews-scraper/ and mirrored as an open dataset on Hugging Face and Kaggle. Questions: reapxdev@proton.me

Maintained by reapX. Public source citation guarantee: Steam App Reviews API.


Features

  • 🎮 Any Steam App ID or Store URL: Extract reviews for any game, application, or software listed on Steam.
  • ⏱️ Detailed Playtime Metrics: Capture total hours played (playtimeForeverHours), hours played at time of review (playtimeAtReviewHours), and recent 2-week playtime (playtimeLastTwoWeeksHours).
  • 👍 Helpfulness & Sentiment Scoring: Include weightedVoteScore, votesUp (helpful), votesFunny, and recommendation status (votedUp).
  • 🛒 Purchase & Platform Verification: Track whether the game was purchased directly on Steam (steamPurchase), received for free (receivedForFree), or played primarily on Steam Deck (primarilySteamDeck).
  • 🌐 Global Language Filtering: Fetch reviews in English, Simplified Chinese, German, Spanish, French, Japanese, or all supported Steam languages.
  • Fast & Lightweight HTTP Scraper: Built using direct async HTTP requests without expensive headless browsers.

⬇️ Input

The actor accepts a JSON input configuration specifying target Steam App IDs, review limits, language, purchase method, and sorting options.

Input Parameters

FieldTypeDefaultDescription
appIdsArray["1086940", "570", "730"]Array of Steam App IDs or Store URLs to scrape reviews for (e.g. Baldur's Gate 3, Dota 2, CS2).
maxReviewsPerAppInteger100Maximum number of reviews to extract per game (1 to 10,000).
maxTotalReviewsInteger500Global cap on total review items collected across all processed App IDs.
reviewTypeString"all"Filter by recommendation outcome: "all", "positive" (recommended), or "negative".
filterString"all"Review sorting mode: "all" (most helpful / weighted), "recent", or "updated".
languageString"all"Language code for reviews (e.g. "english", "spanish", "german", or "all").
purchaseTypeString"all"Filter by purchase type: "all", "steam" (direct store purchase), or "non_steam_purchase".

Example Input JSON

{
"appIds": [
"1086940",
"1245620",
"292030"
],
"maxReviewsPerApp": 100,
"maxTotalReviews": 300,
"reviewType": "positive",
"filter": "all",
"language": "english",
"purchaseType": "steam"
}

⬆️ Output

Scraped items are pushed directly to the run's default dataset. Each row represents a single user review aggregated under its game's primary appId.

Output Fields Reference

FieldTypeExampleDescription
appIdString"1086940"Unique Steam App ID for the game. Primary identifier.
appNameString"Baldur's Gate 3"Canonical game title.
reviewIdString"230513815"Unique Steam recommendation / review ID.
authorSteamIdString"76561199067288820"64-bit Steam ID of the reviewer.
authorPersonaNameString"Gamer123"Steam display name / persona of author.
authorProfileUrlString"https://steamcommunity.com/id/gamer123/"Direct link to author's Steam profile.
authorGamesOwnedInteger184Total Steam games owned by author.
authorNumReviewsInteger39Total reviews written by author across Steam.
playtimeForeverHoursNumber123.5Total hours played in this game.
playtimeAtReviewHoursNumber89.8Hours played at the moment review was posted.
playtimeLastTwoWeeksHoursNumber10.2Hours played in past fortnight.
languageString"english"ISO / Steam language code.
reviewTextString"Outstanding RPG with impressive world building..."Full text of user review.
timestampCreatedString"2026-08-01T12:00:00Z"ISO 8601 creation timestamp.
timestampUpdatedString"2026-08-01T12:00:00Z"ISO 8601 last updated timestamp.
votedUpBooleantruetrue for positive (thumbs up), false for negative.
votesUpInteger42Count of community helpfulness votes.
votesFunnyInteger5Count of funny votes.
weightedVoteScoreNumber0.85Steam helpfulness score algorithm (0.0 - 1.0).
commentCountInteger3Number of comments on this review.
steamPurchaseBooleantruetrue if bought directly via Steam Store.
receivedForFreeBooleanfalsetrue if reviewer received product for free.
writtenDuringEarlyAccessBooleanfalsetrue if written during Early Access period.
primarilySteamDeckBooleanfalsetrue if played primarily on Steam Deck.

Sample Output Record

{
"appId": "1086940",
"appName": "Baldur's Gate 3",
"reviewId": "230513815",
"authorSteamId": "76561199067288820",
"authorPersonaName": "whenizzywasthere~",
"authorProfileUrl": "https://steamcommunity.com/profiles/76561199067288820",
"authorGamesOwned": 184,
"authorNumReviews": 39,
"playtimeForeverHours": 123.5,
"playtimeAtReviewHours": 89.8,
"playtimeLastTwoWeeksHours": 10.2,
"language": "english",
"reviewText": "An incredible RPG experience that sets new standards for choice and storytelling.",
"timestampCreated": "2026-08-01T12:00:00Z",
"timestampUpdated": "2026-08-01T12:00:00Z",
"votedUp": true,
"votesUp": 625,
"votesFunny": 1286,
"weightedVoteScore": 0.9135,
"commentCount": 0,
"steamPurchase": true,
"receivedForFree": false,
"writtenDuringEarlyAccess": false,
"primarilySteamDeck": false
}

How it works

  1. Input Parsing & Validation: The scraper cleans provided Steam App IDs or URLs and deduplicates input parameters.
  2. App Title Resolution: Resolves canonical game names via official Steam Store endpoints or internal high-speed cache.
  3. Cursor-Based Feed Pagination: Streams review pages sequentially using Steam's cursor token system for complete dataset extraction.
  4. Data Normalization: Converts raw Steam timestamps, playtime minutes, and review metadata into clean, standardized ISO schemas.
  5. Streaming Output: Emits datasets per event row in real-time to ensure zero data loss during long-running tasks.

❓ FAQ

Where do I find a game's Steam App ID?

Look at the URL of any game's page on the Steam Store: https://store.steampowered.com/app/1086940/Baldurs_Gate_3/. The number 1086940 is the App ID. You can also paste the full URL directly into appIds.

How many reviews can I scrape?

You can set maxReviewsPerApp up to 10,000 per game. For large batch jobs covering dozens of games, set maxTotalReviews to match your budget cap.

Do I need a Steam account or API key?

No. The scraper accesses public Steam review feeds and requires no login or API keys.

Can I filter by Steam Deck reviews?

Yes! Each output record contains the primarilySteamDeck boolean field indicating whether the reviewer logged most of their playtime on a Steam Deck handheld.


💬 Your feedback

Have suggestions, feature requests, or custom scraping requirements? We actively maintain this scraper. Reach out via email or open an issue on the repository.


Disclaimer: Unofficial - not affiliated with Valve or Steam. Collects public data only. reapx. Contact reapxdev@proton.me.

🧪 Example input

A real, runnable configuration — this is an actual input this Actor has run with.

{
"appIds": [
"1086940",
"1245620",
"292030",
"1091500",
"489830",
"377160",
"582010"
],
"maxReviewsPerApp": 50,
"maxTotalReviews": 350
}

📄 Sample output

One real row from a real run of this Actor, unedited.

{
"appId": "1086940",
"appName": "Baldur's Gate 3",
"reviewId": "229459391",
"authorSteamId": "76561199572529646",
"authorPersonaName": "aadr1",
"authorProfileUrl": "https://steamcommunity.com/profiles/76561199572529646/",
"authorGamesOwned": 0,
"authorNumReviews": 1,
"playtimeForeverHours": 1138.6,
"playtimeAtReviewHours": 1118.0,
"playtimeLastTwoWeeksHours": 3.4,
"language": "english",
"reviewText": "Just left character creation. Excited to see what the game has in store!",
"timestampCreated": "2026-07-03T00:04:11Z",
"timestampUpdated": "2026-07-03T00:04:11Z",
"votedUp": true,
"votesUp": 625,
"votesFunny": 1287,
"weightedVoteScore": 0.9135,
"commentCount": 0,
"steamPurchase": true,
"receivedForFree": false,
"writtenDuringEarlyAccess": false,
"primarilySteamDeck": false
}

⚠️ Run outcomes and error handling

This Actor reports what happened in the run's status message, and it always keeps whatever it collected. These are the outcomes you can get and what each one means.

OutcomeWhat it means
SuccessRows were returned and you were charged steam-review at $0.002 per row.
No matchesThe source returned nothing for your filters. Nothing is charged. Widen the date window or drop a filter.

What is guaranteed either way

  • Every row is pushed as it is built, not buffered to the end of the run. Anything that buffers output loses everything to a timeout, a block or a migration; this does not.
  • A field absent from the source is absent from the row. Nothing is inferred, modelled or filled in to make a row look complete.