Steam Game Reviews Scraper avatar

Steam Game Reviews Scraper

Pricing

from $0.70 / 1,000 dataset items

Go to Apify Store
Steam Game Reviews Scraper

Steam Game Reviews Scraper

Scrape Steam player reviews by App ID. Returns review text, recommendation, playtime, helpful votes, language, purchase type and timestamps for sentiment analysis and competitor research on PC game titles.

Pricing

from $0.70 / 1,000 dataset items

Rating

0.0

(0)

Developer

vøiddo

vøiddo

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Steam Game Reviews Scraper: Player Reviews, Playtime and Helpful Votes

Pull player reviews for any Steam game by App ID or Steam URL: recommended or not, review text, date, hours played, helpful and funny votes, awards and comments. Newest first or most helpful first, in every language or one. No login, no API key, no Steam account.

What you get

{
"appid": "1086940",
"app_name": "Baldur's Gate 3",
"recommendationid": "146197289",
"voted_up": true,
"review_text": "my work is really cutting into my Baldur's Gate 3 time. should i quit?",
"date_posted": "2023-09-12",
"hours_on_record": 463.4,
"votes_up": 8054,
"votes_funny": 3202,
"awards": 409,
"comment_count": 0,
"author_num_games_owned": null,
"written_during_early_access": false,
"language_filter": "english",
"sort": "mostHelpful",
"url": "https://steamcommunity.com/app/1086940/reviews/?browsefilter=toprated&filterLanguage=english"
}

voted_up is true for "Recommended" and false for "Not Recommended". hours_on_record is the reviewer's playtime in the game as Steam shows it. author_num_games_owned is filled when the reviewer's profile shows its game count, and null otherwise. Reviewer names, profile links and Steam ids are never included; e-mail addresses and phone numbers inside review text are replaced with [email removed] / [phone removed].

How to use

Input.

{
"appid": ["730", "570", "1086940"],
"sortBy": "mostRecent",
"language": "all",
"maxReviewsPerApp": 100
}

appid: numeric Steam App IDs or Steam game URLs. The ID is the number in the store URL, store.steampowered.com/app/730/ gives 730.

GameApp ID
Counter-Strike 2730
Dota 2570
Baldur's Gate 31086940
Lethal Company1966720
Hades II1145350

sortBy: mostRecent (default) gives the newest reviews first; mostHelpful gives the reviews players rated most helpful first.

language: all (default) or one Steam language, for example english, german, schinese, brazilian, japanese.

maxReviewsPerApp: reviews per game, 10 per page, up to 5,000. A game with fewer reviews for the chosen filters gives what it has.

An App ID without a Steam Community page is skipped and named in the run's OUTPUT record. Schedule it daily with mostRecent to follow a game's sentiment after a patch, a sale or a price change.

Pricing

Pay per event. Price per 1,000 events:

EventBase priceBronzeSilverGold
Dataset item$1.00$0.90$0.80$0.70

Bronze, Silver and Gold are the discounts Apify gives users of its paid plans. The Pricing tab always shows the current prices.

Buyer

  • Indie developers tracking player sentiment for their own title and direct competitors before a patch or price change.
  • Publishers and investors comparing review velocity, helpful votes and playtime across a genre basket.
  • Market research teams running multilingual sentiment pipelines on review_text, one language at a time with language.
  • Gaming journalists and analysts reading review floods after a controversy or a major update.
  • Localization teams sampling feedback in one language without browsing the Store by hand.

Run it through the API

Python, with the apify-client package:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("v0iddo/steam-game-reviews").call(run_input={"appid": ["730", "570", "1086940"], "maxReviewsPerApp": 20})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript, with the apify-client package:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('v0iddo/steam-game-reviews').call({"appid": ["730", "570", "1086940"], "maxReviewsPerApp": 20});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

One HTTP call that waits for the run and returns the rows (for runs that finish within 5 minutes):

curl -X POST "https://api.apify.com/v2/acts/v0iddo~steam-game-reviews/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"appid": ["730", "570", "1086940"], "maxReviewsPerApp": 20}'

Use it from an agent (MCP)

Claude, Cursor, VS Code and other MCP clients can call this actor as a tool through the Apify MCP server. Add it to the client's MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=v0iddo/steam-game-reviews",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}

FAQ

Do I need an account, cookies or an API key?

No. The actor reads public data without logging in. You only need an Apify account to start it.

How many results can one run return?

Set Reviews per game (up to 5,000) to the number you need. Large jobs can also be split into several runs or scheduled.

How am I charged?

Pay per event, at the prices on the Pricing tab for your Apify plan (the Pricing section of this page lists them). The platform usage of the run is included in those prices, and your spending limit for a run is always respected.

Why did my run return no results?

The status message and the log of the run say why: usually nothing matched the input, or the source did not answer for a moment. Check the input against the example above and run it again.

Can I run it on a schedule?

Yes. Save your input as a task and add a schedule in the Apify Console (daily, hourly or with a cron expression). Each run gets its own dataset, so you keep a history.

Which formats can I export?

JSON, CSV, Excel, XML, HTML table and RSS from the Output tab or the API. Integrations send the rows to Google Sheets, Slack, Make, Zapier, n8n or a webhook.

Is collecting this data allowed?

The actor collects data that the source publishes openly, without a login. Public data can still be personal data under laws such as the GDPR, and sources have their own terms: make sure your use of the data follows the rules that apply to you.

What happens when the source changes?

An automated test runs the actor every day on the example input and checks the rows, not only that the run finished. When a check fails, the actor is repaired and rebuilt; the build history on this page shows each update.

Something is missing or wrong. Where do I report it?

Open an issue on the Issues tab of this actor with the run link. Requests for a new field are welcome too.

Source

The game's public review pages on the Steam Community, https://steamcommunity.com/app/<APPID>/reviews/, and the page's own "more reviews" address for the next pages, which the robots.txt of steamcommunity.com allows. For a game Steam marks as mature content the actor sends the same preference the page's "View Page" button stores. It paces 0.7 s between pages.