# Steam Insights Scraper — Games, Reviews, Players (`brilliant_gum/steam-insights-scraper`) Actor

Steam games, paginated reviews, concurrent players & peaks, owner estimates, sentiment evolution, top reviewers by playtime, history deltas across runs. Multi-region pricing, multi-language reviews. Built for game studios, publishers, VCs hunting indie hits, and AI/RAG pipelines.

- **URL**: https://apify.com/brilliant\_gum/steam-insights-scraper.md
- **Developed by:** [Yuliia Kulakova](https://apify.com/brilliant_gum) (community)
- **Categories:** E-commerce, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.005 / game scraped

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Steam Insights Scraper

Games, reviews, concurrent players, owner estimates, sentiment trends and history deltas — turn Steam into a structured intelligence feed.

![Steam Insights Scraper](https://i.imgur.com/pyWzzzC.png)

---

### Why this scraper

Steam is the world's largest PC gaming platform — but the storefront only shows you the current state of a game. There's no easy way to track how a launch is performing day over day, who the most engaged reviewers are, when a price dropped, or which genres are heating up. Generic scrapers dump every game and let you sort it out downstream — and they don't tell you anything about velocity, sentiment shift, or aggregate developer reputation.

This scraper turns Steam into a structured data feed you can pipe straight into your CRM, dashboard, LLM, or spreadsheet. Pull catalog details and paginated user reviews, see live concurrent players and peaks, get owner estimates, compare recent sentiment vs lifetime, surface top long-playtime reviewers, and track how a game grows between runs.

---

### What you get

**Game records with rich context**
- Name, type (game / DLC / hardware), short description, header image
- Developers, publishers, release date, "coming soon" flag
- Current price, original price, discount percent and tier (small / moderate / major / deep)
- Genres, Steam categories, supported platforms (Windows / Mac / Linux)
- Metacritic score (when available), total recommendations, age rating, content descriptors
- Multi-region pricing — pick any country code and language

**Paginated user reviews (opt-in)**
- Up to 5,000 reviews per game in a single run
- Full review text (HTML / BBCode stripped), language, vote counts
- Author profile per review: total games owned, lifetime playtime, playtime at the moment of the review, last-played timestamp
- Sort by "recent" (newest), "updated" (recently edited), or "all" (most helpful first)
- Filter reviews by language

**Concurrent player counts (opt-in)**
- Current live player count
- 24-hour peak
- All-time peak

**Owner estimates (opt-in)**
- Bucketed owners range (e.g. "20,000,000 .. 50,000,000")
- Lifetime positive vs negative review tallies
- Recent activity signal

**Per-game analytics (computed for you)**
- `pointsPerHour`-equivalents: recommendations growth tracked across runs
- Discount tier classification
- Sentiment evolution: recent fetched window vs lifetime positive ratio + trend label (improving / stable / declining)
- Top reviewers ranked by a "trusted reviewer score" — weighted by playtime, vote count, and whether they bought the game on Steam
- Steam-purchase share (how many reviews are from verified Steam buyers vs external gifts)
- Average playtime at the moment reviewers wrote their reviews
- Early-access review share

**Developer rollups**
- Per developer or publisher: total game count, aggregate Metacritic average, total recommendations across portfolio
- Useful for tracking entire studios (e.g. all CD PROJEKT RED titles, or every game from a small indie team)

**History delta tracking across runs**
- Persistent per-game snapshot store
- On every subsequent run, each game record includes `history.delta`: `playersDelta`, `peak24hDelta`, `recommendationsDelta`, `recommendationsPerHour`, `priceDeltaCents`, `priceDropDetected`, `discountChange`, `trend` (up / down / flat / unknown)
- See exactly how a release ramped overnight, when a sale started, or how player counts decayed over the long tail

**Input-time filters (the headline differentiator)**
- Minimum positive review percent
- Minimum total recommendations
- Minimum owner estimate
- Price range (in cents)
- "On sale only" toggle
- Genre whitelist
- Filters apply *before* expensive review fetches and third-party enrichment — you only pay for records that pass

---

### Use cases

| Who | What they pull |
|---|---|
| **Game studios** | Competitor monitoring — full review streams from rival launches, sentiment drift over time |
| **Publishers** | Verified Steam-purchase review ratios, reviewer playtime distributions, multi-region pricing |
| **PR & comms teams** | When discount or rating shifts trigger media attention — track in real time |
| **VC investors** | Hit indie discovery — small studio with breakout recommendations growth, sub-10M owners but climbing |
| **Game journalists** | Sentiment shift signals; reviewer karma rankings; trending genres in featured lists |
| **AI / RAG engineers** | Multi-language opinion-rich text corpus (English, Russian, Chinese, Japanese, Polish, Spanish, …) for training and retrieval |
| **Resellers & key sites** | Discount tier tracking; deep-discount detection; price drop signals via history delta |
| **Solo devs / indie studios** | Portfolio analysis — see your aggregate review tone, owner estimates, time-on-front-page |

---

### Quick start

Drop this into the Input panel and run:

```json
{
    "lists": ["top_sellers"],
    "maxGamesPerList": 30,
    "includeSteamSpy": true
}
````

You'll get the current Steam top sellers with owner estimates and discount classification — typically under 15 seconds.

***

### Common input examples

**One specific game with the full enrichment stack**

```json
{
    "appIds": ["413150"],
    "includeReviews": true,
    "maxReviewsPerGame": 100,
    "reviewFilter": "recent",
    "includeSteamSpy": true,
    "includeConcurrentPlayers": true
}
```

Pulls Stardew Valley plus the 100 newest reviews, live player count, owners range, and full analytics block (sentiment trend, top reviewers, average playtime at review).

**A studio's complete portfolio**

```json
{
    "appIds": ["1091500", "292030", "20920"],
    "includeReviews": true,
    "maxReviewsPerGame": 20,
    "includeSteamSpy": true,
    "includeConcurrentPlayers": true
}
```

Three CD PROJEKT RED titles — you get individual game records plus an aggregated `developer` record with average score and total recommendations across the portfolio.

**Discover by genre with quality gate**

```json
{
    "lists": ["specials", "new_releases"],
    "maxGamesPerList": 20,
    "onSaleOnly": true,
    "genres": ["Indie", "RPG"],
    "includeSteamSpy": true
}
```

Filters out anything that isn't on sale AND tagged Indie or RPG before any review fetches — cost-efficient discovery.

**Hit-indie hunting (canonical / proven titles only)**

```json
{
    "queries": ["roguelike", "souls"],
    "minOwners": 500000,
    "includeSteamSpy": true,
    "maxGamesPerQuery": 15
}
```

Search Steam for "roguelike" and "souls", keep only games with at least 500,000 estimated owners.

**Daily monitor with history tracking**

```json
{
    "lists": ["top_sellers"],
    "maxGamesPerList": 50,
    "includeSteamSpy": true,
    "includeConcurrentPlayers": true,
    "enableHistory": true,
    "historyStoreName": "steam-daily-watch"
}
```

Run on a schedule. Every run after the first includes `history.delta` showing how each game has moved.

**Localized pricing and reviews**

```json
{
    "appIds": ["1091500", "413150"],
    "countryCode": "ru",
    "language": "russian",
    "includeReviews": true,
    "reviewLanguage": "russian",
    "maxReviewsPerGame": 30
}
```

Pull two games with Russian-language store descriptions, ruble pricing, and reviews filtered to Russian only.

***

### Output overview

Three record types in the dataset:

#### Game

| Field | Description |
|---|---|
| `type` | `"game"` |
| `appId` | Steam app ID |
| `name`, `type_steam` | Title and Steam type (`game` / `dlc` / `hardware`) |
| `shortDescription`, `headerImage`, `website` | Marketing assets |
| `developers`, `publishers` | Arrays (multi-dev co-productions supported) |
| `releaseDate`, `comingSoon`, `isFree` | Release status |
| `currency`, `price`, `priceCents`, `priceInitialCents` | Localized pricing |
| `discountPercent`, `isOnSale` | Discount status |
| `genres`, `categories` | Steam-side classification |
| `platforms` | `{ windows, mac, linux }` |
| `metacriticScore`, `metacriticUrl` | If indexed by Metacritic |
| `totalRecommendations` | Lifetime tally |
| `ageRequired`, `contentDescriptors` | Age rating and content notes |
| `screenshotsCount`, `moviesCount` | Asset counts |
| `supportEmail`, `supportUrl` | Customer support contacts (when public) |
| `url`, `permalink` | Public Steam store URL |
| `steamSpy` | `owners` range, lifetime positive / negative tallies (when included) |
| `playerCounts` | `currentPlayers`, `peak24h`, `allTimePeak` (when included) |
| `reviewSummary` | Lifetime + fetched-window positive % (when reviews fetched) |
| `analytics` | `discountTier`, `sentimentTrend`, `topReviewers[]`, average playtime, Steam-purchase share, etc. |
| `history` | `isNew`, `snapshotCount`, `previous`, `delta`, `series` (when tracking on) |

#### Review

| Field | Description |
|---|---|
| `type` | `"review"` |
| `id`, `appId` | Review ID + parent game |
| `language`, `text` | Body (HTML / BBCode stripped) |
| `votedUp`, `votesUp`, `votesFunny`, `weightedVoteScore` | Vote tallies |
| `steamPurchase`, `receivedForFree`, `earlyAccess` | Source flags |
| `createdAt`, `updatedAt` | ISO timestamps |
| `author` | `steamId`, `numGamesOwned`, `numReviews`, `playtimeAtReviewMinutes`, `playtimeForeverMinutes`, `playtimeLastTwoWeeksMinutes`, `lastPlayedAt` |

#### Developer

| Field | Description |
|---|---|
| `type` | `"developer"` |
| `name` | Developer or publisher name |
| `gameCount` | Number of titles in this run from this entity |
| `games` | Array of `{ appId, name }` |
| `averageScore` | Average Metacritic across portfolio (when scores available) |
| `totalRecommendations` | Sum of recommendations across portfolio |

***

### Pricing

| Charge | Cost |
|---|---|
| Actor start | $0.01 per run |
| Game scraped | $0.005 per game (or job listing / DLC) |
| Review scraped | $0.001 per review |
| Developer profile scraped | $0.005 per developer |

Records are only counted **after** filters pass — you don't pay for games dropped by `minOwners`, `genres`, `onSaleOnly`, or `priceMax`. Reviews and developer rollups are opt-in.

**Worked examples:**

| Scenario | Games | Reviews | Devs | Cost |
|---|---|---|---|---|
| 30 top sellers, no reviews | 30 | 0 | ~25 | $0.29 |
| 100 search results (no reviews) | 100 | 0 | ~80 | $0.91 |
| 1 viral game + 500 reviews + author profile | 1 | 500 | 1 | $0.52 |
| Top 20 sellers + 50 reviews each | 20 | 1000 | 15 | $1.18 |
| Daily watchlist of 50 popular games | 50 | 0 | 30 | $0.41 |
| Deep weekly review: 200 games + 50 reviews each | 200 | 10,000 | 100 | $11.51 |

Reviews are intentionally priced low so that comment-stream analytics and AI/RAG workloads stay affordable.

***

### Proxies

Proxies are included and configured automatically. No setup required.

***

### FAQ

**Do I need a Steam developer key or account?**
No. Everything this scraper reads is public data accessible without login. Pass an input, get a dataset.

**Does it work for all regions?**
Yes. Pass `countryCode` (two-letter ISO, e.g. `us`, `gb`, `de`, `jp`, `ru`) and `language` to get localized pricing and store descriptions. Reviews can be language-filtered independently with `reviewLanguage`.

**How many reviews can I pull per game?**
Up to 5,000 per game per run, capped by `maxReviewsPerGame`. The Steam reviews stream is paginated server-side and we walk the cursor for you.

**Are concurrent player counts live?**
Yes — `currentPlayers` reflects the live count at the moment of the run, and `peak24h` is the rolling 24-hour peak. Note that not every game on Steam has a tracked player-count history (small titles are sometimes missing); when that's the case the `playerCounts` field is simply absent.

**Why is the `owners` field showing `0 .. 20,000` for a new release?**
Owner estimates come from a daily-refreshed third-party index that lags by 1–7 days behind Steam launches. Games released this week often show the default `0 .. 20,000` bucket until the index catches up. For freshly-launched games, use `minRecommendations` instead of `minOwners` as your quality gate.

**Does this do sentiment analysis with AI?**
No — and that's deliberate. We return raw review text, lifetime/recent positive ratios, and per-reviewer playtime weighting. Sentiment NLP is a downstream concern; bring your own model and feed it the corpus we provide. This keeps pricing flat and the data unopinionated.

**How does history tracking work?**
Turn on `enableHistory: true` and pick a `historyStoreName`. On every run, each game's current state (review score, recommendations, price, current player count, 24h peak) is snapshotted under that name. From the second run onward, every game record includes a `history.delta` block with the change since the previous run, expressed as raw deltas and per-hour rates.

**Can I track price drops automatically?**
Yes — when history tracking is enabled, every game record carries `history.delta.priceDeltaCents` and `history.delta.priceDropDetected: true` whenever the current price is lower than the previous snapshot. Schedule the actor every few hours and pipe to a webhook for instant alerts.

**Can I get Workshop mods or community pages?**
No — those are out of scope here. This actor focuses on store content, reviews, and player metrics.

**Can I export to CSV / XML / RSS?**
Apify supports all of those formats out of the box — pick your format in the "Export results" panel after a run finishes.

**Will this work on a free Apify plan?**
Yes. Typical runs cost cents, well within the free tier's monthly compute budget.

***

### Limits (the honest list)

- **Owner estimates are bucketed ranges** (e.g. `"5,000,000 .. 10,000,000"`), not exact counts. The data source publishes them this way on purpose — Steam itself doesn't expose precise owner numbers.
- **Owner estimates lag 1–7 days** behind fresh releases (see FAQ).
- **Concurrent player history is not available for every game.** Most popular titles are tracked; obscure small releases sometimes aren't. When unavailable, the `playerCounts` field is simply absent.
- **Sentiment analysis is not included.** You get raw review text and aggregate positive/negative ratios — bring your own NLP if you need topic / emotion classification.
- **Review trees / replies are not supported** because Steam reviews are flat (no nested reply threads, unlike Reddit or YouTube).
- **No Workshop / mod scraping.** Out of scope.
- **No real-time push / streaming.** This is a batch scraper. Schedule it on Apify's cron and pipe to a webhook for near-real-time workflows.
- **No login-required content.** Everything we return is public — Steam doesn't gate most game data behind auth, so this is rarely a constraint.

***

Maintained by **brilliant\_gum** on the Apify platform. Open an issue on the actor page for bugs, feature requests, or pricing questions.

# Actor input Schema

## `lists` (type: `array`):

Built-in Steam featured lists. 'top\_sellers' = current top sellers, 'new\_releases' = newest, 'specials' = on sale, 'featured' = front page picks.

## `queries` (type: `array`):

Free-text search across the Steam store. Each query returns up to maxGamesPerQuery matches.

## `appIds` (type: `array`):

Specific Steam app IDs to fetch (e.g. 413150 for Stardew Valley, 1091500 for Cyberpunk 2077). Found in store URL: store.steampowered.com/app/{ID}

## `countryCode` (type: `string`):

Two-letter country code for pricing/currency (e.g. 'us', 'gb', 'de', 'jp'). Defaults to 'us'.

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

Localization language for game details (descriptions, etc).

## `includeReviews` (type: `boolean`):

Fetch user reviews per game (charged per review). Off by default to keep costs predictable.

## `reviewFilter` (type: `string`):

'recent' = newest reviews, 'updated' = recently updated, 'all' = most helpful.

## `reviewLanguage` (type: `string`):

Filter reviews by language. 'all' returns reviews in every language.

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

Hard cap on reviews fetched per game. Protects cost on hugely-reviewed games (Stardew Valley has 387k+ reviews).

## `minPositivePercent` (type: `integer`):

Skip games below this positive-review ratio (0–100). 0 = no filter.

## `minRecommendations` (type: `integer`):

Skip games with fewer total recommendations than this. 0 = no filter.

## `minOwners` (type: `integer`):

Skip games with estimated owners (from SteamSpy) below this. Requires `includeSteamSpy: true`.

## `priceMin` (type: `integer`):

Skip games priced below this (in cents). 0 = include free games.

## `priceMax` (type: `integer`):

Skip games priced above this (in cents). 0 = no cap.

## `onSaleOnly` (type: `boolean`):

Keep only games currently on discount.

## `genres` (type: `array`):

Keep only games matching ANY of these genres (e.g. 'Action', 'Indie', 'RPG', 'Strategy').

## `includeSteamSpy` (type: `boolean`):

Adds estimated owners range and 2-week active player counts via third-party SteamSpy.

## `includeConcurrentPlayers` (type: `boolean`):

Add current and 24h-peak concurrent player counts via SteamCharts. Adds one extra request per game.

## `maxGamesPerList` (type: `integer`):

Cap games taken from each featured list (top\_sellers / new\_releases / specials).

## `maxGamesPerQuery` (type: `integer`):

Cap games returned per search query.

## `enableHistory` (type: `boolean`):

Persist a per-game snapshot of score, recommendations, current price and player count between runs. Each game output then includes `history.delta` (scoreDelta, playersDelta, priceDelta, trend). Stored in the 'steam-history' KV store.

## `historyStoreName` (type: `string`):

Named key-value store for history snapshots.

## `maxConcurrency` (type: `integer`):

Maximum parallel game/review fetches.

## `minDelayMs` (type: `integer`):

Floor delay between requests per worker. Steam tolerates moderate rates; default is conservative.

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

Optional. Proxies are included and configured automatically — leave this empty.

## Actor input object example

```json
{
  "lists": [
    "top_sellers"
  ],
  "queries": [],
  "appIds": [],
  "countryCode": "us",
  "language": "english",
  "includeReviews": false,
  "reviewFilter": "recent",
  "reviewLanguage": "all",
  "maxReviewsPerGame": 100,
  "minPositivePercent": 0,
  "minRecommendations": 0,
  "minOwners": 0,
  "priceMin": 0,
  "priceMax": 0,
  "onSaleOnly": false,
  "genres": [],
  "includeSteamSpy": true,
  "includeConcurrentPlayers": false,
  "maxGamesPerList": 30,
  "maxGamesPerQuery": 30,
  "enableHistory": false,
  "historyStoreName": "steam-history",
  "maxConcurrency": 4,
  "minDelayMs": 200
}
```

# Actor output Schema

## `summary` (type: `string`):

Counts of scraped records and pointers to the dataset and historical snapshot store.

# 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 = {
    "lists": [
        "top_sellers"
    ],
    "queries": [],
    "appIds": [],
    "genres": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("brilliant_gum/steam-insights-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 = {
    "lists": ["top_sellers"],
    "queries": [],
    "appIds": [],
    "genres": [],
}

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

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

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

```

## CLI example

```bash
echo '{
  "lists": [
    "top_sellers"
  ],
  "queries": [],
  "appIds": [],
  "genres": []
}' |
apify call brilliant_gum/steam-insights-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=brilliant_gum/steam-insights-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Steam Insights Scraper — Games, Reviews, Players",
        "description": "Steam games, paginated reviews, concurrent players & peaks, owner estimates, sentiment evolution, top reviewers by playtime, history deltas across runs. Multi-region pricing, multi-language reviews. Built for game studios, publishers, VCs hunting indie hits, and AI/RAG pipelines.",
        "version": "1.0",
        "x-build-id": "4BR3VSqb9fnJQ5LH1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/brilliant_gum~steam-insights-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-brilliant_gum-steam-insights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/brilliant_gum~steam-insights-scraper/runs": {
            "post": {
                "operationId": "runs-sync-brilliant_gum-steam-insights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/brilliant_gum~steam-insights-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-brilliant_gum-steam-insights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "lists": {
                        "title": "Steam featured lists",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Built-in Steam featured lists. 'top_sellers' = current top sellers, 'new_releases' = newest, 'specials' = on sale, 'featured' = front page picks.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "top_sellers",
                                "new_releases",
                                "specials",
                                "featured"
                            ],
                            "enumTitles": [
                                "Top sellers",
                                "New releases",
                                "Specials (on sale)",
                                "Featured"
                            ]
                        },
                        "default": []
                    },
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Free-text search across the Steam store. Each query returns up to maxGamesPerQuery matches.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "appIds": {
                        "title": "Direct Steam App IDs",
                        "type": "array",
                        "description": "Specific Steam app IDs to fetch (e.g. 413150 for Stardew Valley, 1091500 for Cyberpunk 2077). Found in store URL: store.steampowered.com/app/{ID}",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "countryCode": {
                        "title": "Country code (pricing)",
                        "type": "string",
                        "description": "Two-letter country code for pricing/currency (e.g. 'us', 'gb', 'de', 'jp'). Defaults to 'us'.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "english",
                            "russian",
                            "ukrainian",
                            "german",
                            "french",
                            "spanish",
                            "japanese",
                            "schinese",
                            "tchinese",
                            "korean"
                        ],
                        "type": "string",
                        "description": "Localization language for game details (descriptions, etc).",
                        "default": "english"
                    },
                    "includeReviews": {
                        "title": "Include game reviews",
                        "type": "boolean",
                        "description": "Fetch user reviews per game (charged per review). Off by default to keep costs predictable.",
                        "default": false
                    },
                    "reviewFilter": {
                        "title": "Review filter / sort",
                        "enum": [
                            "recent",
                            "updated",
                            "all"
                        ],
                        "type": "string",
                        "description": "'recent' = newest reviews, 'updated' = recently updated, 'all' = most helpful.",
                        "default": "recent"
                    },
                    "reviewLanguage": {
                        "title": "Review language",
                        "enum": [
                            "all",
                            "english",
                            "russian",
                            "ukrainian",
                            "german",
                            "french",
                            "spanish",
                            "japanese",
                            "schinese",
                            "korean"
                        ],
                        "type": "string",
                        "description": "Filter reviews by language. 'all' returns reviews in every language.",
                        "default": "all"
                    },
                    "maxReviewsPerGame": {
                        "title": "Max reviews per game",
                        "minimum": 0,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on reviews fetched per game. Protects cost on hugely-reviewed games (Stardew Valley has 387k+ reviews).",
                        "default": 100
                    },
                    "minPositivePercent": {
                        "title": "Minimum positive review %",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Skip games below this positive-review ratio (0–100). 0 = no filter.",
                        "default": 0
                    },
                    "minRecommendations": {
                        "title": "Minimum total recommendations",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip games with fewer total recommendations than this. 0 = no filter.",
                        "default": 0
                    },
                    "minOwners": {
                        "title": "Minimum estimated owners",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip games with estimated owners (from SteamSpy) below this. Requires `includeSteamSpy: true`.",
                        "default": 0
                    },
                    "priceMin": {
                        "title": "Minimum price (USD cents)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip games priced below this (in cents). 0 = include free games.",
                        "default": 0
                    },
                    "priceMax": {
                        "title": "Maximum price (USD cents)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip games priced above this (in cents). 0 = no cap.",
                        "default": 0
                    },
                    "onSaleOnly": {
                        "title": "On sale only",
                        "type": "boolean",
                        "description": "Keep only games currently on discount.",
                        "default": false
                    },
                    "genres": {
                        "title": "Genres filter",
                        "type": "array",
                        "description": "Keep only games matching ANY of these genres (e.g. 'Action', 'Indie', 'RPG', 'Strategy').",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeSteamSpy": {
                        "title": "Enrich with SteamSpy data",
                        "type": "boolean",
                        "description": "Adds estimated owners range and 2-week active player counts via third-party SteamSpy.",
                        "default": true
                    },
                    "includeConcurrentPlayers": {
                        "title": "Enrich with concurrent player history",
                        "type": "boolean",
                        "description": "Add current and 24h-peak concurrent player counts via SteamCharts. Adds one extra request per game.",
                        "default": false
                    },
                    "maxGamesPerList": {
                        "title": "Max games per list",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Cap games taken from each featured list (top_sellers / new_releases / specials).",
                        "default": 30
                    },
                    "maxGamesPerQuery": {
                        "title": "Max games per query",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Cap games returned per search query.",
                        "default": 30
                    },
                    "enableHistory": {
                        "title": "Track score / player / price changes across runs",
                        "type": "boolean",
                        "description": "Persist a per-game snapshot of score, recommendations, current price and player count between runs. Each game output then includes `history.delta` (scoreDelta, playersDelta, priceDelta, trend). Stored in the 'steam-history' KV store.",
                        "default": false
                    },
                    "historyStoreName": {
                        "title": "History KV store name",
                        "type": "string",
                        "description": "Named key-value store for history snapshots.",
                        "default": "steam-history"
                    },
                    "maxConcurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Maximum parallel game/review fetches.",
                        "default": 4
                    },
                    "minDelayMs": {
                        "title": "Per-request throttle (ms)",
                        "minimum": 50,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Floor delay between requests per worker. Steam tolerates moderate rates; default is conservative.",
                        "default": 200
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. Proxies are included and configured automatically — leave this empty."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
