# Steam Reviews Scraper & Patch Impact Report (`steadywren/steam-reviews-scraper`) Actor

Steam reviews scraper: reviews of any Steam game at $0.50 per 1,000, a game report ($0.002): patch impact, update cadence, sentiment history, reply rate, genre benchmark. AI add-ons (why a patch hurt, reply drafts, translation) free until 2026-11-18 (beta), then $0.03 report, $0.003 draft.

- **URL**: https://apify.com/steadywren/steam-reviews-scraper.md
- **Developed by:** [Steadywren](https://apify.com/steadywren) (community)
- **Categories:** Developer tools, SEO tools, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Steam Reviews Scraper & Patch Impact Report

Steam reviews of any game (recommended or not, playtime, votes, text) plus a game report for studios, investors and
market research: what each patch did to the reviews, update cadence and abandonment risk, a growing sentiment history,
developer replies and a genre benchmark. $0.50 per 1,000 reviews.

![Steam Reviews Scraper & Patch Impact Report - example output](https://steadywren.com/assets/screens/steam-reviews-scraper.png)

### What you get

- **Reviews** (main table): recommended or not, hours on record, posting day, helpful and funny votes, Early Access
  review, product received for free, developer has responded, text, and a stable `reviewId`. Filters: language
  (Steam's 29 languages or all), most recent or most helpful, reviews since a date, only new reviews since your last
  run. Reviewer names, avatars and profile links are never collected.
- **Patch Impact Scorecard**: for every patch post in the game's official news feed (the newest 10) - positive share
  N days before vs after, review volume change, a significance test, a verdict (`backlash`, `boost`, `neutral`,
  `too-few-reviews`) and the complaint topics that grew after the patch.
- **Update cadence and abandonment risk**: days since the last patch, median days between patches, `active` /
  `slowing` / `dormant`, and a risk flag when a game goes quiet while players still review it, or stalls in Early
  Access.
- **Daily sentiment history that grows**: Steam shows daily up/down counts only for the last 30 days. Every run saves
  them in your account, so a scheduled run builds an exact daily curve (up to the last 730 days your runs have seen)
  - and older patches keep their daily precision.
- **Developer replies and genre benchmark**: reply rate, reply rate on negative reviews and median reply hours; the
  game's positive-share percentile and review-count rank among the top 25 games of its most voted tag; optionally
  the update status of the top 10 peers.
- **Store data and alerts in the game report** (one per game, in its own **Game reports** table of the Output tab):
  developers, publishers, release date, price, genres, top 10 tags, Metacritic score, Early Access, all-time and
  last-30-days review totals and positive share, `topComplaints` and `complaintSpikes` (`crash`, `bugs`,
  `performance`, `optimization`, `servers`, `content`, `value`, `billing`, `login`, `ads`, `ui`,
  `feature_request`), and `alerts` such as `Recent reviews 78% positive vs 93% all time`.
- **AI that reads the patch notes** (optional): for each patch flagged `backlash`, the AI names the likely cause, with
  quotes from the negative reviews written after it. Plus AI insight reports, reply drafts and English translation -
  see [AI add-ons](#ai-add-ons-optional).
- **Robots.txt friendly**: reads only public Steam pages that Steam's robots.txt allows - not `api.steampowered.com`,
  which robots.txt closes to crawlers.

### Sample output

#### Game report

Valheim, run on 2026-11-03 (trimmed):

```json
{
    "type": "game",
    "appId": "892970",
    "gameName": "Valheim",
    "developers": ["Iron Gate AB"],
    "releaseDate": "Sep 9, 2026",
    "price": 29.99,
    "currency": "USD",
    "tags": ["Open World Survival Craft", "Survival", "Online Co-Op", "Open World", "Multiplayer"],
    "totalReviews": 500225,
    "positiveShare": 0.9303,
    "recentReviews": 5627,
    "recentPositiveShare": 0.7773,
    "patchImpact": [
        { "title": "Patch 1.0.21", "publishedAt": "2026-10-28T13:11:25.000Z", "precision": "daily", "reviewsBefore": 1060, "reviewsAfter": 661, "positiveShareChange": 3.3, "significant": false, "verdict": "neutral" },
        { "title": "Patch 1.0.20", "publishedAt": "2026-10-15T08:58:17.000Z", "precision": "daily", "reviewsBefore": 1673, "reviewsAfter": 1325, "positiveShareChange": -2.2, "significant": false, "verdict": "neutral" }
    ],
    "updateCadence": { "lastPatchTitle": "Patch 1.0.21", "daysSinceLastPatch": 5, "medianDaysBetweenPatches": 7, "patchesLast90Days": 8, "status": "active", "abandonmentRisk": false, "riskReasons": [] },
    "dailyHistory": { "days": 30, "from": "2026-10-05", "to": "2026-11-03", "series": [{ "date": "2026-10-05", "up": 217, "down": 61 }] },
    "replies": { "reviewsAnalyzed": 100, "replyRate": null, "negativeReplyRate": null, "medianReplyHours": null, "repliesTimed": 0, "noReplies": true },
    "peers": { "tag": "Open World Survival Craft", "gamesWithTag": 570, "peersCompared": 24, "positivePercentile": 8, "reviewCountRank": 3, "peerMedianPositivePercent": 94.5, "gameInTopPeers": true },
    "topComplaints": [{ "topic": "content", "share": 0.03 }, { "topic": "bugs", "share": 0.02 }, { "topic": "servers", "share": 0.02 }],
    "alerts": ["Recent reviews 78% positive vs 93% all time"]
}
```

Other report fields: `patchImpact[]` also has `url`, `positiveShareBefore` / `positiveShareAfter`, `volumeChange` and
`complaintsGrown`; `updateCadence` has `lastPatchAt` and `patchesKnown`; `peers` has `topPeers` and `peerCadence`.

#### Review

```json
{
    "type": "review",
    "reviewId": "a1c0b30f7dc4685c",
    "appId": "892970",
    "gameName": "Valheim",
    "url": "https://steamcommunity.com/app/892970/reviews/",
    "recommended": true,
    "hoursOnRecord": 173.1,
    "postedAt": "2026-11-02",
    "helpfulCount": 0,
    "funnyCount": 0,
    "earlyAccess": false,
    "receivedForFree": false,
    "developerReplied": false,
    "text": "I played only solo. I recommend this game",
    "language": "all",
    "scrapedAt": "2026-11-03T00:28:38.876Z"
}
```

With **Translate reviews to English** on, every review also has `textEnglish`.

### How much does it cost?

**$0.50 per 1,000 reviews.** Example: your game + 3 competitors with 100 reviews each and a game report each =
400 x $0.0005 + 4 x $0.002 = about $0.21 per run.

- $0.002 per game report (one per game, none when **Game report** is off).
- AI add-ons (off by default) are free until 2026-11-18 (beta); from 2026-11-18: $0.03 per AI insight report (one
  per game, patch causes included) and $0.003 per reply draft; translation is included. From 2026-11-18, the same
  4 games with AI reports cost about $0.33 per run.
- No Actor start fee. Platform compute is included.
- **Max reviews per game** and **Max reply drafts per run** cap your cost.

### How to use

1. Enter Steam app ids or store / community URLs in **Games** (add competitors to compare them).
2. Set **Max reviews per game** (0 = game reports only).
3. Click **Start**, then download JSON, CSV or Excel from the Output tab (reviews and **Game reports** tables).

Main filters: review language, sort (most recent / most helpful), reviews since a date, only new reviews, patch window.

Use it for:

- **Patch monitoring for studios**: schedule daily with *Only new reviews*; read `patchImpact` and `alerts` after
  every update.
- **Investors and acquirers**: is the game alive? `updateCadence`, `abandonmentRisk`, the review trend and the genre
  benchmark in one row per game.
- **Community managers**: complaint topics and spikes, reply rate and reply time vs competitors.
- **Market research**: compare a list of games in one run; filter reviews by language or date.

### Use with AI assistants (MCP)

Connect this Actor to Claude, ChatGPT or any MCP client: `https://mcp.apify.com?tools=steadywren/steam-reviews-scraper`

Try:

- "Did the last Valheim patch hurt its Steam reviews? Show the positive share before and after."
- "Compare the update cadence and abandonment risk of Valheim, Vampire Survivors and Baldur's Gate 3."

### How it compares

Checked against the Store descriptions of 21 Steam review Actors in Apify Store on 2026-11-03.

| | This Actor | Other Steam review scrapers in Apify Store |
|---|---|---|
| Patch Impact Scorecard per official patch post | yes | no |
| Update cadence and abandonment risk | yes | no |
| Daily sentiment history kept beyond Steam's 30 days | yes | no (monthly at most) |
| Developer reply analytics (rate, negative-reply rate, reply time) | yes | no (a reply field at most) |
| Genre peer benchmark (auto peers by top tag) | yes | no |
| Price per 1,000 reviews | $0.50, no start fee | $0.20 to $3, some with a start fee |

### AI add-ons (optional)

All three are off by default. **AI add-ons are free until 2026-11-18 (beta)**; from 2026-11-18: $0.03 per AI report,
$0.003 per reply draft. They are processed by OpenAI (`gpt-5-mini` for the insight reports and patch causes,
`gpt-5-nano` for reply drafts and translation); review texts are public data, no reviewer names or profiles are
collected or sent, and every AI add-on removes e-mail addresses and phone numbers from the text before sending it to
OpenAI.

- **AI insight report** (`aiInsights`, free until 2026-11-18, then **$0.03 per game**), in its own **AI insights**
  table: what players `loves` and `hates` in plain words, the top 5 `featureRequests` ranked by mentions, a
  `comparison` with the other games of the same run, the `changes` since your previous AI report of the game (null
  on the first one), and a `summary`. Every love, hate and request is backed by a quote found word for word in the
  reviews; points without such a quote are dropped. It reads up to 80 of the reviews the run read (the newest 100
  plus the ones you get).
- **Why the patch hurt** (included in the AI report; needs *Game report* on): for every patch the Patch Impact
  Scorecard flags `backlash`, `patchCauses` gives the `likelyCause`, supporting `quotes` from negative reviews written
  in the patch window after it, and a `confidence` (`low`, `medium`, `high`). At most the newest 3 backlash patches
  per game are explained. The patch notes come from the game's news feed, so only patches still in the feed (the
  latest ~10 posts) and with negative reviews among the reviews read can be explained; the others are skipped with a
  message in `RUN_SUMMARY`.
- **AI reply drafts** (`replyDrafts`, free until 2026-11-18, then **$0.003 per draft**, at most `maxDrafts` per run,
  20 by default), in their own **Reply drafts** table (`reviewId`, `excerpt`, `draft`, `language`): for the negative
  reviews you get that have no developer response, newest first, a short, polite reply in the review's language. A
  draft never promises refunds, dates or fixes and contains no names, contacts or links; a draft that breaks a rule
  is written again once, then skipped (not charged). A review gets a draft only once: drafted reviews are remembered
  in your `steam-review-history` store, so later runs never draft (or charge) the same review again, even with
  *Only new reviews* off.
- **Translation** (`translate`, included): adds `textEnglish` to every review: null for English texts or reviews
  without text, or when the AI work stopped (cost cap, AI service unavailable, no key).

From 2026-11-18 you pay only for AI items that are delivered. `maxAiCostUsd` (default $1, max $2) caps our AI
spending per run, shared by all add-ons. Translation runs first, during the scrape; when an AI report or reply drafts
are also on, it may use at most half of the cap, so the rest stays for them. When the cap is reached, or the AI
service is unavailable, the AI work stops with a message in `RUN_SUMMARY` and the scrape itself still succeeds. Your
spending limit is checked before every AI item.

### Monitor daily

1. Console -> **Schedules** -> create a schedule for this Actor (or for a saved task with your games) and let it run
   daily.
2. Turn on *Only new reviews*: each run outputs only reviews earlier runs did not return; with *Most recent* sort it
   stops reading at the first one it has seen.
3. Keep *Game report* on: every run adds Steam's last 30 days to the daily history, so `dailyHistory` and the patch
   scorecard get longer and more precise.
4. Actor -> **Integrations**: send every finished run to Slack, email, Google Sheets or your own webhook.

### FAQ

**Is it legal?** The Actor collects publicly available data only, without login and without personal data of
private individuals. Check the site's terms for your use case.

**What if Steam changes or a run fails?** The run fails with a clear error instead of returning empty results - when
no game is found, when requests failed and nothing was delivered, when games with many reviews return none, or when
key fields are empty in most results - and you are not charged for results it did not deliver. A game that does not
exist is skipped with a warning. No new reviews, or none matching the filters, is a successful run. Each run's
summary (results, retries, errors, and an `ai` block when an AI add-on is on) is in the Storage tab -> Key-value
store -> `RUN_SUMMARY`.

**Do I need proxies? Are there limits?** No proxy is needed in most cases: Steam answers Apify servers directly
(off by default). Up to 20,000 reviews per game per run. Steam serves 10 reviews per request and the Actor pauses
1 second between pages to stay polite: about 350 reviews per minute on Apify (2,000 Valheim reviews took 342 seconds
in our 2026-11-03 run), so 10,000 reviews take about 30 minutes.

**How fresh is the data?** Live at run time. Steam's own limits: its news feed shows only the latest ~10 posts, and
daily review counts only for the last 30 days - scheduled runs keep both, so the history grows.

**Where are the game reports?** In their own table: run page -> Output tab -> **Game reports** (or Storage ->
Dataset -> `reports`). Reviews stay in the main dataset. Via API: `GET /v2/actor-runs/<runId>` ->
`storageIds.datasets.reports`, then `/v2/datasets/<id>/items`.

**How is a patch found?** Steam's news feed has no tags, so posts are classified by title: "patch", "hotfix", "fix",
a version number (`1.0.21`), or "update" unless it is a community / dev / news update. Announcements and community
posts are not patches.

**Why do only some patches have numbers?** Older patches (outside the 30 days of daily counts) are compared month
before vs month after (`precision: "monthly"`), unless several patches fall into the same month - then they get no
verdict, because the months cannot tell them apart. Scheduled runs keep the daily counts and the patch posts, so the
daily scorecard grows over time. Only daily verdicts create alerts.

**What does `significant` mean?** A two-proportion z-test at 95% confidence on the positive share before vs after;
both sides need at least 30 reviews, otherwise the verdict is `too-few-reviews`. The patch day itself is left out (it
mixes both sides).

**Why `noReplies` and not a 0% reply rate?** Most studios do not answer reviews: in our check none of the newest
reviews of 35 games had a developer response, and the top-rated reviews of Vampire Survivors had 1 in 50.
`noReplies: true` says exactly that. To measure a studio that does reply, run with *Most helpful* sort and more
reviews: the reply analytics use every review the run reads (the ones you get plus the newest-review sample).

**What does the report analyze?** The newest 100 reviews of each game (read separately when you ask for top-rated
reviews, a date slice or only new reviews). They are not output and not charged.

**Why not the official Steam API?** `api.steampowered.com` closes its whole site to crawlers in robots.txt, and the
old `appreviews` JSON endpoint now redirects to the Steam home page. This Actor reads the public review pages, the
store's review histogram and the news feed instead.

**What language are the peer scores in?** The genre benchmark uses the score Steam's store search shows for English
reviews; the game's own all-time share in the report counts every language. When the game is among the top peers,
its percentile uses its row from the same search.

**What is `reviewId`?** A stable id of the review (the same review gets the same id in every run, so you can
deduplicate). It is a keyed hash: it cannot be turned back into the reviewer's Steam profile.

**What is `hoursOnRecord`?** The reviewer's total playtime now, as Steam shows it on the review list - not the
playtime at review time.

**Why is `postedAt` a day without a time?** The review list shows only the day (in UTC). Reply times use the exact
times of the single-review pages.

**Where are the AI results?** Run page -> Output tab -> **AI insights** and **Reply drafts** (or Storage -> Dataset ->
`aiInsights` / `replyDrafts`). `RUN_SUMMARY` has the AI counters (`aiReports`, `patchCauses`, `replyDrafts`,
`reviewsTranslated`, `aiSkipped`, `aiCostUsd`, `aiStoppedReason`) and a message for every skipped AI item.

**Can the AI be wrong?** Yes - it is a draft for a human. That is why every point needs a quote found word for word
in the reviews, patch causes carry a `confidence`, and reply drafts are checked for promises, personal data, links
and language before delivery.

**How does `changes` work?** The last delivered AI report of each game is kept in your `steam-review-history` store.
The next AI report marks the reviews written after it as NEW and lists what they show differently.

**Is the history shared between my runs?** Yes - all runs and tasks of your account use the key-value store
`steam-review-history`: one history record per game (with the reviews that already got an AI reply draft), plus the
last AI report of the game when AI insights are on. The store is used whenever the game report, *Only new reviews*,
AI insights or AI reply drafts is on. Delete the store to start over.

### More from Steadywren

- [Google Play Reviews Scraper & Release Health](https://apify.com/steadywren/google-play-reviews-scraper) - Android app reviews with release health, reply analytics and change alerts.
- [App Store Reviews Scraper & Release Health](https://apify.com/steadywren/apple-app-store-reviews-scraper) - iOS app reviews with rating by version, prices by country and chart ranks.
- [Shopify App Store Scraper & App Intelligence](https://apify.com/steadywren/shopify-app-store-scraper) - Shopify app reviews with churn signal, reply rate and category ranks.
- [App Store & Google Play Reviews + Platform Gap](https://apify.com/steadywren/app-store-google-play-reviews-scraper) - iOS and Android reviews of the same app, with the weaker platform and why.
- [All Steadywren Actors](https://apify.com/steadywren) - small tools, steady results. Custom builds: [steadywren.com](https://steadywren.com).

### Input reference

| Field | Type | Default | Description |
|---|---|---|---|
| `games` | array | `["892970"]` (Valheim) | Steam app ids (892970) or store / community URLs (https://store.steampowered.com/app/892970/Valheim/). Add competitors to compare them. |
| `maxReviewsPerGame` | integer | 100 | Reviews to output per game (you pay per review), 0 to 20,000. Steam serves 10 reviews per request, so 1,000 reviews take about 3 minutes. 0 = game reports only. |
| `sort` | string | `recent` | Order in which Steam returns reviews: `recent` (most recent) or `toprated` (most helpful). |
| `language` | string | `all` | Only reviews written in this language (`all` or a Steam language name: `english`, `german`, `schinese`, ...). Review texts are kept as written; turn on "Translate reviews to English" below to add an English translation. |
| `sinceDate` | string | - | Only reviews posted on or after this day. With "Most recent" the scraper stops at the first older review; with "Most helpful" it filters the pages it reads and stops after 20 pages in a row without a newer review. |
| `onlyNew` | boolean | `false` | For scheduled runs: skip reviews an earlier run of yours already delivered (you pay only for new ones). With "Most recent" the scraper stops reading at the first review it has seen. |
| `report` | boolean | `true` | One report per game ($0.002): patch impact, update cadence and abandonment risk, daily sentiment history, developer replies, genre benchmark, complaint topics. Saved in the "Game reports" dataset. |
| `patchWindowDays` | integer | 7 | Days before and after each patch post that are compared (1-14). |
| `peers` | boolean | `true` | Compare the game with the top 25 games of its most voted Steam tag (one extra request). |
| `peerCadence` | boolean | `false` | Also check how often the top 10 peers ship patches (10 extra requests per game). |
| `replyDetails` | boolean | `true` | Open up to 20 reviews with a developer response to measure the reply time (one request each). |
| `aiInsights` | boolean | `false` | One AI report per game (free until 2026-11-18 (beta); from 2026-11-18: $0.03 each): what players love and hate, top feature requests, a comparison with the other games of this run, what changed since your last report, and "why the patch hurt" for the newest 3 backlash patches per game (included). Saved in the "AI insights" dataset. Processed by OpenAI (gpt-5-mini). If the AI service is unavailable, the AI part is skipped with a message and the scrape still succeeds. |
| `replyDrafts` | boolean | `false` | A short, polite developer reply draft (free until 2026-11-18 (beta); from 2026-11-18: $0.003 each) for delivered negative reviews without a developer response (newest first, up to Max reply drafts), in the review's language. No promises, names or links; a review gets a draft only once across runs. Saved in the "Reply drafts" dataset. Processed by OpenAI (gpt-5-nano). |
| `maxDrafts` | integer | 20 | Caps the reply drafts of one run (and their cost), 0-200. |
| `translate` | boolean | `false` | Adds textEnglish to the delivered reviews: the English translation of non-English texts. Null for English or no text, or when AI work stopped. Included in the review price, no extra event. Processed by OpenAI (gpt-5-nano). |
| `maxAiCostUsd` | number | 1 | Our OpenAI spending cap for the AI add-ons of one run (0.05 to max $2), shared by all of them. When the cap is reached the AI work stops with a message; delivered AI items are kept and the scrape is not affected. You pay only for the AI items delivered. |
| `proxyConfiguration` | object | off | Not needed in most cases: Steam answers Apify servers directly. Turn on a proxy only if runs get blocked. |

Search keywords: steam reviews, steam reviews scraper, steam game reviews, steam patch reviews

# Actor input Schema

## `games` (type: `array`):

Steam app ids (892970) or store / community URLs (https://store.steampowered.com/app/892970/Valheim/). Add competitors to compare them.

## `maxReviewsPerGame` (type: `integer`):

Reviews to output per game (you pay per review). Steam serves 10 reviews per request, so 1,000 reviews take about 3 minutes. 0 = game reports only.

## `sort` (type: `string`):

Order in which Steam returns reviews.

## `language` (type: `string`):

Only reviews written in this language. Review texts are kept as written; turn on "Translate reviews to English" below to add an English translation.

## `sinceDate` (type: `string`):

Only reviews posted on or after this day. With "Most recent" the scraper stops at the first older review; with "Most helpful" it filters the pages it reads and stops after 20 pages in a row without a newer review.

## `onlyNew` (type: `boolean`):

For scheduled runs: skip reviews an earlier run of yours already delivered (you pay only for new ones). With "Most recent" the scraper stops reading at the first review it has seen.

## `report` (type: `boolean`):

One report per game ($0.002): patch impact, update cadence and abandonment risk, daily sentiment history, developer replies, genre benchmark, complaint topics. Saved in the "Game reports" dataset.

## `patchWindowDays` (type: `integer`):

Days before and after each patch post that are compared.

## `peers` (type: `boolean`):

Compare the game with the top 25 games of its most voted Steam tag (one extra request).

## `peerCadence` (type: `boolean`):

Also check how often the top 10 peers ship patches (10 extra requests per game).

## `replyDetails` (type: `boolean`):

Open up to 20 reviews with a developer response to measure the reply time (one request each).

## `aiInsights` (type: `boolean`):

One AI report per game (free until 2026-11-18 (beta); from 2026-11-18: $0.03 each): what players love and hate in plain words, top feature requests, a comparison with the other games of this run, what changed since your last report, and "why the patch hurt" - the likely cause, with review quotes, of each patch the Patch Impact Scorecard flags as backlash (the newest 3 per game, included in the price). Saved in the "AI insights" dataset. Review texts are processed by OpenAI (gpt-5-mini). If the AI service is unavailable, the AI part is skipped with a message and the scrape still succeeds.

## `replyDrafts` (type: `boolean`):

A short, polite developer reply draft (free until 2026-11-18 (beta); from 2026-11-18: $0.003 each) for delivered negative reviews without a developer response (newest first, up to Max reply drafts), in the review's language. Drafts never promise refunds, dates or fixes and contain no names or links. A review gets a draft only once: drafted reviews are remembered in your steam-review-history store, so later runs skip them. Saved in the "Reply drafts" dataset. Processed by OpenAI (gpt-5-nano).

## `maxDrafts` (type: `integer`):

Caps the reply drafts of one run (and their cost).

## `translate` (type: `boolean`):

Adds textEnglish to the delivered reviews: the English translation of non-English texts. Null for English or no text, or when AI work stopped (cost cap, AI service unavailable, no key). Included in the review price, no extra event. Processed by OpenAI (gpt-5-nano).

## `maxAiCostUsd` (type: `number`):

Our OpenAI spending cap for the AI add-ons of one run (max $2), shared by all of them. Translation runs first, during the scrape, and may use at most half of the cap when AI insights or reply drafts are also on. When the cap is reached the AI work stops with a message; delivered AI items are kept and the scrape is not affected. You pay only for the AI items delivered.

## `proxyConfiguration` (type: `object`):

Not needed in most cases: Steam answers Apify servers directly. Turn on a proxy only if runs get blocked.

## Actor input object example

```json
{
  "games": [
    "892970"
  ],
  "maxReviewsPerGame": 100,
  "sort": "recent",
  "language": "all",
  "onlyNew": false,
  "report": true,
  "patchWindowDays": 7,
  "peers": true,
  "peerCadence": false,
  "replyDetails": true,
  "aiInsights": false,
  "replyDrafts": false,
  "maxDrafts": 20,
  "translate": false,
  "maxAiCostUsd": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One item per review as JSON. Add ?format=csv or ?format=xlsx for other formats.

## `reports` (type: `string`):

One item per game with the analytics, in its own dataset. Add ?format=csv or ?format=xlsx for other formats.

## `aiInsights` (type: `string`):

One AI insight report per game (input aiInsights), with the likely cause of the newest 3 backlash patches.

## `replyDrafts` (type: `string`):

AI reply drafts for negative reviews without a developer response (input replyDrafts).

## `runSummary` (type: `string`):

Results, retries and failed requests per error category, AI add-on counters and messages, and why the run failed if it did.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "games": [
        "892970"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("steadywren/steam-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "games": ["892970"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("steadywren/steam-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "games": [
    "892970"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call steadywren/steam-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,steadywren/steam-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/k0KXhKInbGNEZDr2K/builds/VztgRGQXSZ81MU3pU/openapi.json
