Steam Game Reviews Scraper avatar

Steam Game Reviews Scraper

Pricing

from $6.80 / 1,000 results

Go to Apify Store
Steam Game Reviews Scraper

Steam Game Reviews Scraper

Scrape Steam game reviews by app ID or game name. Filter by review type, language, purchase type and recency, and export author, playtime, review text, votes, weighted score, timestamps and a per-app review summary. Export to JSON, CSV or Excel.

Pricing

from $6.80 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Steam Game Reviews Scraper

Steam Game Reviews Scraper

Here is one real result, with every field the actor returns:

{
"appId": "730",
"appName": "Counter-Strike 2",
"recommendationId": "232505657",
"authorSteamId": "76561199327340135",
"authorNumGamesOwned": 7,
"authorNumReviews": 3,
"authorPlaytimeForeverMin": 937,
"authorPlaytimeAtReviewMin": 937,
"authorPlaytimeLastTwoWeeksMin": 937,
"authorLastPlayed": "2026-08-10T11:32:26.000Z",
"reviewText": "Even kids love this game.",
"language": "english",
"votedUp": true,
"votesHelpful": 0,
"votesFunny": 0,
"weightedVoteScore": 0.5,
"commentCount": 0,
"steamPurchase": true,
"receivedForFree": false,
"writtenDuringEarlyAccess": false,
"refunded": false,
"primarilySteamDeck": false,
"timestampCreated": "2026-08-10T13:44:02.000Z",
"timestampUpdated": "2026-08-10T13:44:02.000Z",
"developerResponse": null,
"developerResponseDate": null,
"reviewUrl": "https://steamcommunity.com/profiles/76561199327340135/recommended/730/",
"summaryReviewScore": 8,
"summaryReviewScoreDesc": "Very Positive",
"summaryTotalPositive": 2231526,
"summaryTotalNegative": 358808,
"summaryTotalReviews": 2590334,
"searchTerm": null,
"source": "Steam",
"observedAt": "2026-08-10T14:36:39.641Z",
"error": null
}

The most complete Steam game reviews scraper available. It returns every field a Steam review exposes, including full review text, thumbs up/down, helpful and funny votes, the author's playtime and library stats, purchase and refund flags, developer responses, and the game's overall review-score summary, with filters for type, language, purchase, date, playtime and developer replies.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor collects Steam game reviews for the app IDs (or game names) you pass and writes one normalized record per review to the run's dataset. Each record carries the full review text, the recommendation (thumbs up/down), helpful and funny votes, the weighted vote score, the author's Steam id and playtime and library stats, purchase, free-copy, early-access, refund and Steam Deck flags, creation and update timestamps, and any developer response. Every record also carries the game's overall review-score summary so you get sentiment context without a second call.

Filters let you keep positive or negative reviews only, one language or all, a purchase type, a date range, a playtime filter, only reviews with a developer response, and optionally include off-topic review-bombing activity that Steam hides by default.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 most recent English reviews for Counter-Strike 2 (app ID 730).

{
"appIds": ["730"],
"reviewType": "all",
"language": "english",
"sortBy": "recent",
"maxReviews": 10
}

Provide one or more numeric app IDs in appIds, or use searchTerms to look up games by name. Add several app IDs to collect reviews for multiple games in one run.

Input reference

FieldTypeRequiredDefaultDescription
appIdsstring[]no["730"]One or more numeric Steam app IDs, for example 730 for Counter-Strike 2. Add several to cover multiple games in one run.
searchTermsstring[]no(empty)Optional. Search Steam by game name instead of app id; the top matching game is used for each term.
reviewTypeenumnoallall, positive (thumbs up), or negative (thumbs down).
languagestringnoenglishReview language (for example english, schinese, spanish) or all for every language.
purchaseTypeenumnoallall, steam (purchased on Steam), or non_steam_purchase.
sortByenumnorecentrecent, updated (recently updated), or helpful (most helpful within the day range).
dayRangeintegerno(none)When sorting by helpful, only consider reviews from the last N days (1 to 365).
playedFilterenumnoanyany, played (has playtime at review), or notPlayed (no recorded playtime).
reviewsFromDatestringno(empty)Only keep reviews created on or after this date, for example 2025-01-01.
reviewsToDatestringno(empty)Only keep reviews created on or before this date, for example 2025-12-31.
onlyWithDeveloperResponsebooleannofalseOnly keep reviews the developer/publisher has replied to.
includeReviewBombingbooleannofalseInclude off-topic review-bombing activity that Steam hides by default.
maxReviewsintegerno40Maximum number of reviews to collect across the whole run (spread across all apps). Free Apify plans are capped at 10 per run.

Output reference

One dataset item per review. Types: string, integer, number, boolean, or null when the source value is absent.

FieldTypeDescription
appIdstringSteam app id of the game.
appNamestringGame name.
recommendationIdstringUnique id of the review.
authorSteamIdstringSteamID64 of the review author.
authorNumGamesOwnedintegerNumber of games the author owns.
authorNumReviewsintegerNumber of reviews the author has written.
authorPlaytimeForeverMinintegerAuthor total playtime for this game, in minutes.
authorPlaytimeAtReviewMinintegerAuthor playtime for this game at the time of the review, in minutes.
authorPlaytimeLastTwoWeeksMinintegerAuthor playtime in the last two weeks, in minutes.
authorLastPlayedstringISO 8601 timestamp the author last played, or null.
reviewTextstringFull review text.
languagestringReview language.
votedUpbooleantrue for a positive (thumbs up) review, false for negative.
votesHelpfulintegerNumber of helpful votes.
votesFunnyintegerNumber of funny votes.
weightedVoteScorenumberSteam weighted helpfulness score (0 to 1).
commentCountintegerNumber of comments on the review.
steamPurchasebooleantrue when the copy was purchased on Steam.
receivedForFreebooleantrue when the reviewer received the game for free.
writtenDuringEarlyAccessbooleantrue when the review was written during early access.
refundedbooleantrue when the reviewer later refunded.
primarilySteamDeckbooleantrue when the review was primarily played on Steam Deck.
timestampCreatedstringISO 8601 timestamp the review was created.
timestampUpdatedstringISO 8601 timestamp the review was last updated.
developerResponsestringDeveloper/publisher reply text, or null.
developerResponseDatestringISO 8601 date of the developer reply, or null.
reviewUrlstringPublic URL of the review.
summaryReviewScoreintegerGame overall review score (0 to 9).
summaryReviewScoreDescstringGame overall review score label, for example Very Positive.
summaryTotalPositiveintegerTotal positive reviews for the game.
summaryTotalNegativeintegerTotal negative reviews for the game.
summaryTotalReviewsintegerTotal reviews for the game.
searchTermstringThe searchTerms value that matched this game, or null.
sourcestringData source label (Steam).
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a live run (input {"appIds": ["730"], "language": "english", "sortBy": "recent", "maxReviews": 10}):

{
"appId": "730",
"appName": "Counter-Strike 2",
"recommendationId": "232505657",
"authorSteamId": "76561199327340135",
"authorNumGamesOwned": 7,
"authorNumReviews": 3,
"authorPlaytimeForeverMin": 937,
"authorPlaytimeAtReviewMin": 937,
"reviewText": "Even kids love this game.",
"language": "english",
"votedUp": true,
"votesHelpful": 0,
"votesFunny": 0,
"weightedVoteScore": 0.5,
"steamPurchase": true,
"receivedForFree": false,
"refunded": false,
"primarilySteamDeck": false,
"timestampCreated": "2026-08-10T13:44:02.000Z",
"developerResponse": null,
"reviewUrl": "https://steamcommunity.com/profiles/76561199327340135/recommended/730/",
"summaryReviewScore": 8,
"summaryReviewScoreDesc": "Very Positive",
"summaryTotalPositive": 2231526,
"summaryTotalNegative": 358808,
"summaryTotalReviews": 2590334,
"source": "Steam",
"observedAt": "2026-08-10T14:36:39.641Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~steam-game-reviews-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"appIds":["730"],"reviewType":"negative","language":"english","maxReviews":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~steam-game-reviews-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchTerms":["Elden Ring"],"sortBy":"helpful","dayRange":30,"maxReviews":100}'

Apify CLI:

apify call scrapers_lat/steam-game-reviews-scraper \
--input '{"appIds":["730"],"onlyWithDeveloperResponse":true}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per review returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 reviews per run. Upgrade for higher maxReviews.

FAQ and troubleshooting

How do I find a game's app ID? It is the number in the store URL, for example 730 in store.steampowered.com/app/730. Or pass the game name in searchTerms and the actor resolves the top match.

Can I get only negative reviews? Yes. Set reviewType to negative. Use positive for thumbs-up only.

How do I get the most useful reviews? Set sortBy to helpful and optionally dayRange to focus on recent, upvoted reviews.

What is weightedVoteScore? Steam's helpfulness score for the review, from 0 to 1. Higher means the community found it more helpful.

Why is developerResponse null? The developer has not replied to that review. Set onlyWithDeveloperResponse to true to keep only reviews that have a reply.

Is this an official Steam or Valve tool? No. This actor is independent and has no affiliation with Valve or Steam. It reads only publicly available review data. Use the results in accordance with the source's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Valve or Steam. Accesses only publicly available review data. Use the results in accordance with the source's terms.