Stream Reviews Scraper avatar

Stream Reviews Scraper

Pricing

from $0.95 / 1,000 reviews

Go to Apify Store
Stream Reviews Scraper

Stream Reviews Scraper

Scrape reviews from any Steam game to JSON, CSV or Excel. Get review text, rating, playtime, votes, awards and reviewer profiles, plus game price, tags and developer — no login or API key. Supports 29 languages, age-gated titles and incremental daily run

Pricing

from $0.95 / 1,000 reviews

Rating

0.0

(0)

Developer

Reviewly

Reviewly

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Steam Reviews Scraper — Export Steam Game Reviews to JSON, CSV & Excel

Scrape every public review from any game on Steam in seconds — no login, no API key, no coding. Paste a Steam URL or App ID, press Start, and download clean, structured review data.

  • Fast — around 750 reviews per minute, per game
  • 🔓 No Steam account needed — age gates and mature-content walls are handled automatically
  • 🌍 29 languages — filter reviews by language, or grab them all
  • 📊 35+ data points per review and per game, ready for analysis
  • 💾 Export anywhere — JSON, CSV, Excel, XML, or straight into your app via API

📌 What This Actor Does

This Apify Actor is a Steam review scraper. Give it a Steam game — as a store link, a community link, or just the numeric App ID — and it collects that game's public user reviews along with the game's store metadata.

For every review you get the verdict (Recommended or Not Recommended), the full review text, the reviewer's total playtime, how many people found it helpful or funny, community awards, comment count, and the reviewer's public profile. For every game you get the name, developer, publisher, release date, price, tags, and the overall review score.

Who it's for

You areYou use it to
Game developer / publisherRead what players actually say about your game or your competitors'
Market researcher / analystMeasure sentiment across genres, studios, or a launch window
Data scientist / ML engineerBuild labelled sentiment datasets with real playtime signals
Community / marketing managerTrack review trends, spot complaints early, find quotable praise
Journalist / content creatorSource real player opinions with links back to the original review
Student / academicResearch player behaviour with reproducible, citable data

No programming is required. If you can copy a link, you can run this Actor.


✨ Key Features

  • Two ways to enter games — paste Steam URLs or plain App IDs. Mix both if you like; a game entered twice is only scraped once.
  • Bulk scraping — queue as many games as you want in a single run.
  • Automatic age-gate bypass — mature and age-restricted games (The Witcher 3, Cyberpunk 2077, PUBG) work exactly like any other, with no cookies or logins to configure.
  • 8 sorting modes — most helpful, most recent, funniest, or trending over day / week / month / 6 months / year.
  • Filter by language — pick one of 29 review languages, or collect every language at once.
  • Incremental runs — set a target date and re-run daily to pull only what's new, instead of re-scraping everything.
  • Full reviewer profiles — display name, Steam ID (64-bit), profile URL, avatar, and games owned.
  • Clean, typed output — real numbers for votes and playtime, ISO dates, booleans for the verdict. No string-parsing on your end.
  • Honest nulls — a field Steam doesn't publish comes back null, never a guess or an empty string.
  • Proxy support — optional Apify Proxy integration for large or repeated runs.

🧠 Why This Actor Is Different

It reads Steam's real pagination, so nothing gets skipped. Steam serves reviews through a cursor-based endpoint rather than numbered pages. This Actor follows that cursor exactly and stops only when Steam signals the true end of the list — so you don't get duplicates, and you don't silently lose the tail of the results.

Age-restricted games just work. Steam blocks a large share of its biggest titles behind an age check and a mature-content warning. That warning returns a normal-looking 200 OK page containing zero reviews — scrapers that check status codes think they succeeded and return nothing. This Actor detects it properly and gets the real data.

Stable review IDs. Steam doesn't put a review ID on the review card itself. This Actor recovers the real recommendationid for every review, so you can deduplicate reliably across runs and link straight back to the source review.

Correct dates. Steam omits the year on reviews posted in the current year. Naïve scrapers record those as the wrong year, or drop them. Here every review gets a proper ISO YYYY-MM-DD date.

Lightweight and quick. No headless browser is used, so runs start instantly and consume far fewer platform resources than browser-based scrapers — which means lower cost per review for you.


⚙️ Input Configuration

FieldTypeDefaultDescription
startUrlsArraySteam store or community URLs
appIdsArraySteam numeric App IDs, one per line
maxReviewsInteger100Max reviews per game. 0 = unlimited
reviewFilterStringtopratedSort order (see below)
reviewLanguageStringdefaultReview language. default = all languages
targetDateStringSkip reviews older than this date (YYYY-MM-DD)
includeGameInfoBooleantrueAlso fetch game metadata from the store page
proxyConfigurationObjectOptional proxy settings

Choosing games: URLs or App IDs

Fill in either field — or both. At least one is required.

The App ID is the number in any Steam store link: store.steampowered.com/app/292030/

// Option A — just App IDs (simplest)
{ "appIds": ["292030", "440", "578080"] }
// Option B — just URLs
{ "startUrls": ["https://store.steampowered.com/app/292030/"] }
// Option C — mix them freely
{ "startUrls": ["https://store.steampowered.com/app/292030/"], "appIds": ["440"] }

Every Steam link shape is accepted:

https://store.steampowered.com/app/292030/
https://store.steampowered.com/app/292030/The_Witcher_3_Wild_Hunt/
https://steamcommunity.com/app/292030/reviews/
https://store.steampowered.com/agecheck/app/292030/

Sorting options (reviewFilter)

ValueReturns
topratedMost helpful reviews of all time (default)
mostrecentNewest reviews first
funnyReviews voted funniest
trenddayTrending in the last 24 hours
trendweekTrending this week
trendmonthTrending this month
trendsixmonthsTrending over 6 months
trendyearTrending this year

Languages (reviewLanguage)

default (all) plus: English, French, German, Spanish (Spain & Latin America), Italian, Portuguese (& Brazil), Russian, Polish, Turkish, Dutch, Danish, Swedish, Norwegian, Finnish, Czech, Hungarian, Romanian, Bulgarian, Greek, Ukrainian, Japanese, Korean, Simplified Chinese, Traditional Chinese, Thai, Vietnamese, Indonesian.

💡 Tips for best results

  • Start small. Run with maxReviews: 20 first to confirm you're getting what you expect, then scale up.
  • For sentiment analysis, use toprated — these are the reviews the community actually reads and votes on.
  • For monitoring a launch or an update, use mostrecent.
  • targetDate only cuts a run short under mostrecent, because that's the only date-sorted option. Under other sorts it filters rows but still walks the full list.
  • Turn off includeGameInfo if you only need review text — it saves one request per game.
  • Set maxReviews: 0 only when you genuinely want everything; popular games have hundreds of thousands of reviews.

Example input

{
"appIds": ["292030", "1091500"],
"maxReviews": 500,
"reviewFilter": "mostrecent",
"reviewLanguage": "english",
"targetDate": "2025-01-01",
"includeGameInfo": true
}

📤 Output Format

The Actor produces one dataset record per game, with that game's reviews nested inside it. Download as JSON, CSV, Excel, or XML, or pull it through the Apify API.

Sample output

{
"appId": "292030",
"url": "https://steamcommunity.com/app/292030/reviews/",
"name": "The Witcher 3: Wild Hunt - Complete Edition",
"developer": "CD PROJEKT RED",
"publisher": "CD PROJEKT RED",
"releaseDate": "18 May, 2015",
"description": "You are Geralt of Rivia, mercenary monster slayer...",
"reviewSummary": "Very Positive",
"totalReviews": 241730,
"positivePercent": 96,
"price": "$34.99 USD",
"priceCents": 3499,
"tags": ["Open World", "RPG", "Story Rich", "Atmospheric"],
"headerImage": "https://shared.fastly.steamstatic.com/.../header.jpg",
"reviewsScraped": 1,
"reviews": [
{
"reviewId": "87999031",
"url": "https://steamcommunity.com/profiles/76561199061226139/recommended/292030/",
"appId": "292030",
"recommended": true,
"voteTitle": "Recommended",
"text": "Imagine you're working in a 9-5 corporate job...",
"postedAt": "2021-03-06",
"postedRaw": "March 6, 2021",
"playtimeHours": 120.1,
"helpfulVotes": 5034,
"funnyVotes": 110,
"awardCount": 661,
"awards": [{ "reactionId": 18, "count": 207 }],
"commentCount": 84,
"earlyAccess": false,
"receivedForFree": false,
"author": {
"name": "Dio1991",
"profileUrl": "https://steamcommunity.com/profiles/76561199061226139/",
"steamId": "76561199061226139",
"accountId": "1100960411",
"avatar": "https://avatars.fastly.steamstatic.com/cde80f50ba....jpg",
"productsInAccount": 460
}
}
]
}

Game fields

FieldTypeDescription
appIdStringSteam App ID
urlStringLink to the game's review page
nameStringGame title
developerStringDeveloper studio
publisherStringPublisher
releaseDateStringRelease date as shown on Steam
descriptionStringShort store description
reviewSummaryStringSteam's verdict, e.g. "Very Positive"
totalReviewsNumberTotal reviews the game has on Steam
positivePercentNumberPercentage of all reviews that are positive
priceStringDisplayed price, e.g. "$34.99 USD" or "Free To Play"
priceCentsNumberPrice in cents (0 for free-to-play)
tagsArrayCommunity tags
headerImageStringGame header image URL
reviewsScrapedNumberHow many reviews this run collected
reviewsArrayThe reviews (below)

Review fields

FieldTypeDescription
reviewIdStringSteam's stable review ID — use this to deduplicate
urlStringDirect link to the review on Steam
recommendedBooleantrue = Recommended, false = Not Recommended
voteTitleStringThe verdict as text
textStringFull review text, paragraph breaks preserved
postedAtStringPost date, ISO YYYY-MM-DD
postedRawStringDate exactly as Steam displayed it
playtimeHoursNumberReviewer's total playtime, in hours
helpfulVotesNumberPeople who found it helpful
funnyVotesNumberPeople who found it funny
awardCountNumberTotal community awards
awardsArrayAward breakdown: reactionId + count
commentCountNumberComments on the review
earlyAccessBooleanWritten during Early Access
receivedForFreeBooleanReviewer got the product free
author.nameStringDisplay name
author.profileUrlStringSteam profile URL
author.steamIdString64-bit Steam ID
author.accountIdString32-bit account ID
author.avatarStringAvatar image URL
author.productsInAccountNumberGames owned (null if the profile is private)

▶️ How to Use

Step 1 — Open the Actor

Click Try for free on the Apify Store page. You'll need a free Apify account.

Step 2 — Add your games

In the Start URLs field, paste a Steam store link. Or in App IDs, type the game's number (e.g. 292030). Add as many as you want.

Step 3 — Set how many reviews

Set Max reviews per game. Start with 20100 for a first test. Use 0 for everything.

Step 4 — Pick a sort order

Most helpful for quality opinions, Most recent for monitoring. Optionally set a language.

Step 5 — Run it

Click Start. Progress appears live in the log.

Step 6 — Download

Open the Dataset tab and export as CSV, Excel, JSON, or XML — or fetch it from the Apify API.

Common workflows

One-off research export

{ "appIds": ["292030"], "maxReviews": 0, "reviewFilter": "toprated" }

Daily monitoring (only new reviews) — schedule this and move targetDate forward each run:

{ "appIds": ["292030"], "maxReviews": 0, "reviewFilter": "mostrecent", "targetDate": "2025-06-01" }

Competitor comparison

{ "appIds": ["292030", "1091500", "1245620"], "maxReviews": 300, "reviewFilter": "toprated" }

📈 Use Cases

1. Competitor and market research

Pull the top reviews for every major game in your genre and find out what players consistently praise and complain about — before you commit to a roadmap.

2. Player sentiment tracking after a release

Schedule a daily mostrecent run with a rolling targetDate. Watch sentiment shift hour by hour after a patch, a price change, or a controversy, and catch problems while they're still fixable.

3. Training data for sentiment analysis

Each review ships with a human-labelled verdict (recommended) plus playtime and helpfulness votes. That's a high-quality, pre-labelled dataset for fine-tuning a sentiment model — far cleaner than scraped social media text.

4. Marketing and community content

Filter for high helpfulVotes and recommended: true to surface your best quotable praise, each with a link back to the original review for attribution.

5. Localisation and regional strategy

Run the same game across several reviewLanguage values and compare sentiment by market. A game loved in English and disliked in Simplified Chinese usually has a localisation or pricing problem worth finding.

6. Academic and journalistic research

Reproducible, citable player-opinion data with stable IDs and source links — suitable for publication and peer review.


🛠️ Advanced Tips

Performance and throughput

Steam serves a maximum of 10 reviews per request and this limit cannot be raised — so total time scales linearly with review count. Measured on a single game:

ReviewsRequestsTime
505~5 seconds
25025~20 seconds
50050~38 seconds
5,000500~6–7 minutes

That's roughly 750 reviews per minute. Budget accordingly for very popular games — a title with 240,000 reviews takes several hours to scrape completely.

Keeping costs down

  • Cap maxReviews instead of using 0. The most helpful 500 reviews usually tell you more than all 200,000.
  • Set includeGameInfo: false when you only need review text.
  • Use targetDate with mostrecent for repeat runs so you never pay to re-scrape the same reviews.

Proxy usage

Proxies are optional. For small and medium runs the Actor works fine without one. For very large or frequently repeated runs, enable Apify Proxy to avoid per-IP rate limiting:

{ "proxyConfiguration": { "useApifyProxy": true } }

Datacenter proxies are sufficient — residential proxies are not required.

Scaling to many games

Put every App ID into one run rather than starting many runs. The Actor processes games sequentially, deduplicates them, and keeps going if one game fails.

Automation

Use Apify Schedules to run this daily or weekly, and Webhooks to push new reviews straight into your database, Google Sheets, or Slack when a run finishes.


❓ FAQ & Troubleshooting

Do I need a Steam account or API key? No. The Actor only reads publicly visible reviews. There is nothing to log into and no key to configure.

Does it work with age-restricted or mature games? Yes. Age checks and mature-content warnings are handled automatically. Games like The Witcher 3, Cyberpunk 2077 and PUBG work exactly like any other.

Where do I find a game's App ID? It's the number in the store URL: store.steampowered.com/app/292030/. You can also paste the whole URL and skip the lookup.

I got fewer reviews than I asked for. The game has fewer reviews than your maxReviews, or your reviewLanguage / targetDate filtered the rest out. Set reviewLanguage: "default" and clear targetDate to check.

Why is productsInAccount sometimes null? Steam hides the games-owned count on private profiles. null means Steam didn't publish it — it isn't a scraping error.

Why aren't the results sorted by helpfulVotes? toprated uses Steam's own weighted helpfulness score, which factors in the helpful-to-unhelpful ratio and recency — not the raw vote count. The order matches what you see on Steam. Sort by helpfulVotes yourself if you need a strict ranking.

Can I get reviews between two specific dates? Use reviewFilter: "mostrecent" with targetDate as your start date, then filter the output for the end date.

Can I scrape review comments or replies? Not currently — you get the comment count per review, not the comment threads.

Is the review text complete or truncated? Complete. Full text with paragraph breaks preserved, including reviews that Steam collapses behind a "Read more" link.

How do I avoid duplicates across scheduled runs? Deduplicate on reviewId — it's Steam's own stable identifier and never changes.

One game failed. Did the whole run fail? No. Unrecognisable entries are reported in the log and skipped, and the run continues with the remaining games.

Is this legal? The Actor collects only publicly available data — no login, no private profiles, no personal data beyond the public display names Steam already shows. You are responsible for using the data in line with Steam's terms and applicable law in your jurisdiction.


📞 Support

Questions, bug reports, or a field you'd like added?

When reporting a problem, please include the run ID and the input you used — it makes diagnosis much faster.

Feature requests are welcome. If you need a field this Actor doesn't return yet, get in touch.


Steam review scraper · scrape Steam reviews · Steam data extraction · game review scraping · Apify Actor · web scraping · Steam API alternative · player sentiment analysis · game market research · Steam user reviews export · video game data scraping