# Steam Scraper – Games, Prices, Reviews & Player Counts (`kempt_horizon_yzk/steam-store-scraper`) Actor

Steam scraper for game data from official public endpoints: price, discount, genres, review score, live player count, top sellers and most played charts, plus reviews with playtime. Search by keyword or app ID. Monitor mode flags price and review changes. $0.0015/game.

- **URL**: https://apify.com/kempt_horizon_yzk/steam-store-scraper.md
- **Developed by:** [Kempt Horizon Data](https://apify.com/kempt_horizon_yzk) (community)
- **Categories:** E-commerce, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Store Scraper: Games, Prices, Reviews, Player Counts & Charts

Get **Steam game data** as clean JSON, CSV or Excel: price and discount, release date, developers, publishers, genres, platforms, Metacritic score, **review score and review counts**, **live concurrent player count**, and positions on the **Most Played, Top Sellers, New Releases, Specials and Coming Soon** charts. Add **Steam user reviews** with playtime and helpful votes. Monitor mode tells you when a price, discount or review score changes.

Everything comes from **official public Steam endpoints** (Storefront API, appreviews, Steam Web API player counts and charts). No login, no API key, no browser, so runs are fast and cheap.

### For AI agents (MCP / API) quick reference

- **Use when:** you need Steam game details, current price or sale, review score, player count, chart rank, or user reviews for one or many games, or a list of games for a keyword or chart.
- **Don't use for:** player profiles, inventories, or the Steam Community Market.
- **Minimal input:** `{"appIds": ["1145360"], "maxGames": 10}` or `{"charts": ["top-sellers"], "maxGames": 10}` or `{"searchTerms": ["roguelike"], "maxGames": 20, "minPositivePercent": 85}`.
- **Output:** items with `type` = `game` (appId, name, url, price, discountPercent, currency, releaseDate, developers, publishers, genres, platforms, metacriticScore, reviewScoreDesc, positivePercent, totalReviews, currentPlayers, chartPositions, changesSinceLastRun) or `review` (appId, recommended, language, text, createdAt, votesHelpful, authorPlaytimeHours).
- **Price:** $0.001 per run + **$0.0015 per game** + **$0.0003 per review**. 10 games cost about $0.016. Pay per event only, limited permissions, so agentic payments (x402, Skyfire, Apify AGI token) work.
- **MCP:** add `https://mcp.apify.com?tools=kempt_horizon_yzk/steam-store-scraper` to your MCP client.

### What does this Steam scraper do?

- 🎮 **Game details**: price, original price, discount, currency per country, release date, coming soon flag, developers, publishers, genres, categories, platforms, Metacritic, achievements, DLC count, languages, website
- ⭐ **Review summary**: Steam review label (for example "Very Positive"), total, positive and negative counts, positive percent
- 👥 **Live player count** from the official Steam Web API
- 📊 **Charts**: Most Played (top 100 with last week rank and peak players), Top Sellers, New Releases, Specials, Coming Soon, each with position
- 🔎 **Keyword search** of the Steam store, in Steam relevance order
- 💬 **Reviews**: newest first, filter by language, positive or negative, and date. Includes playtime at review, helpful and funny votes, purchase type and developer response. We do not output reviewer names or profile links.
- 🎯 **Filters**: genres, max price, only discounted, min review count, min positive percent, games only. Filtered games are not charged.
- 🔁 **Monitor mode**: returns a game only when it is new or its price, discount or review score changed, with a `changesSinceLastRun` diff, and only reviews newer than the last run
- 🛡️ Retries with exponential backoff and respect for Steam rate limits

### Who uses it?

Indie developers and publishers tracking competitors, game marketers planning launches and sales, deal sites and newsletters, investors and analysts following player counts, and researchers studying player sentiment.

### How much does it cost?

| Event | Price |
|---|---|
| Actor start | $0.001 |
| Game | **$0.0015** |
| Review | **$0.0003** |

1,000 games cost $1.50. 10,000 reviews cost $3. Set a **maximum cost per run** and the Actor stops cleanly.

### How to use it

1. Click **Try for free**. The example input (Hades and Stardew Valley) returns results in a few seconds.
2. Add app IDs or store URLs, search keywords, or pick charts.
3. Optional: add filters, turn on reviews, pick a store country for local prices.
4. Click **Start**, then download JSON, CSV or Excel, or use the API.
5. For price or sale alerts, turn on **Monitor mode** and add a daily **Schedule**.

### Input example

```json
{
  "charts": ["most-played", "top-sellers"],
  "searchTerms": ["deckbuilder"],
  "maxGames": 100,
  "genres": ["Indie"],
  "minPositivePercent": 80,
  "includeReviews": true,
  "maxReviewsPerGame": 50,
  "reviewLanguage": "english",
  "country": "us",
  "onlyNew": true,
  "stateKey": "indie-watch"
}
```

### Output example

```json
{
  "type": "game",
  "appId": 413150,
  "name": "Stardew Valley",
  "appType": "game",
  "url": "https://store.steampowered.com/app/413150/",
  "isFree": false,
  "price": 14.99,
  "priceInitial": 14.99,
  "discountPercent": 0,
  "currency": "USD",
  "releaseDate": "2016-02-26",
  "releaseDateText": "Feb 26, 2016",
  "comingSoon": false,
  "developers": [
    "ConcernedApe"
  ],
  "publishers": [
    "ConcernedApe"
  ],
  "genres": [
    "Indie",
    "RPG",
    "Simulation"
  ],
  "categories": [
    "Single-player",
    "Multi-player",
    "Co-op"
  ],
  "platforms": [
    "windows",
    "mac",
    "linux"
  ],
  "metacriticScore": 89,
  "recommendations": 899921,
  "achievements": 49,
  "requiredAge": 0,
  "shortDescription": "You've inherited your grandfather's old farm plot in Stardew Valley. Armed with hand-me-down tools and a few coins, you set out to begin your new life. Can you ...",
  "website": "http://www.stardewvalley.net",
  "dlcCount": 1,
  "reviewScoreDesc": "Overwhelmingly Positive",
  "totalReviews": 1044985,
  "positiveReviews": 1029114,
  "negativeReviews": 15871,
  "positivePercent": 98.5,
  "currentPlayers": 32235,
  "scrapedAt": "2026-10-14T23:31:59.362Z"
}
```

```json
{
  "type": "review",
  "appId": 1145360,
  "reviewId": "237681870",
  "recommended": true,
  "language": "english",
  "text": "very good game",
  "createdAt": "2026-10-14T07:11:38.000Z",
  "updatedAt": "2026-10-14T07:11:38.000Z",
  "votesHelpful": 0,
  "votesFunny": 0,
  "weightedScore": 0.5,
  "commentCount": 0,
  "purchasedOnSteam": true,
  "receivedForFree": false,
  "earlyAccess": false,
  "authorPlaytimeHours": 3.9,
  "authorPlaytimeAtReviewHours": 3.9,
  "authorReviewCount": 6,
  "developerResponse": null,
  "url": "https://store.steampowered.com/app/1145360/#app_reviews_hash"
}
```

### FAQ

**Do I need a Steam API key?** No.

**Which countries are supported?** Any Steam store country code (us, gb, de, fr, br, jp, and more) for local prices and availability.

**Why was a game skipped?** It is not sold in the chosen country, it is not a game (DLC, soundtrack) while "Games only" is on, or it did not pass your filters. Skipped games are never charged.

**Is this legal?** The Actor reads public store data from Steam's own public endpoints at a polite rate and outputs no personal data about reviewers.

Built and maintained by **Kempt Horizon Data**. Need a field or found a bug? Open an issue on the Issues tab.

If this Actor is useful to you, a quick rating on its Store page helps other people find it. Thank you!

# Actor input Schema

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

Optional. App IDs (730) or store URLs.

## `searchTerms` (type: `array`):

Optional. Steam store search terms, e.g. "roguelike". Up to Max games results per term, in Steam relevance order.

## `charts` (type: `array`):

Optional. Adds every game on these Steam charts, with its chart position.

## `maxGames` (type: `integer`):

Maximum game records to save (and pay for) per run.

## `includeGameDetails` (type: `boolean`):

Price, discount, release date, developers, genres, categories, platforms, Metacritic, review score summary. Charged $0.0015 per game.

## `includePlayerCount` (type: `boolean`):

Current concurrent players from the official Steam Web API (no extra charge).

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

Optional, e.g. \["Indie","Strategy"]. Filtered-out games are not charged.

## `maxPrice` (type: `number`):

Optional, in the store currency (e.g. 9.99).

## `onlyDiscounted` (type: `boolean`):

Only games currently on sale.

## `minReviews` (type: `integer`):

Optional.

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

Optional, e.g. 80.

## `gamesOnly` (type: `boolean`):

Skip non-game app types.

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

Also return user reviews, newest first. $0.0003 per review.

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

Cap per game per run.

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

Steam language code: all, english, schinese, russian, spanish, german, brazilian, french, japanese, koreana...

## `reviewType` (type: `string`):

Recommended, not recommended, or both.

## `reviewsSince` (type: `string`):

Optional. Only reviews created after this date (YYYY-MM-DD).

## `country` (type: `string`):

Two-letter country code for prices and availability.

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

Language for names and descriptions.

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

Returns games only when new or when price/discount/review score changed since the last run (with a changesSinceLastRun field), and only reviews newer than the last run.

## `stateKey` (type: `string`):

Separate name per schedule so monitors do not share memory.

## Actor input object example

```json
{
  "appIds": [
    "1145360",
    "https://store.steampowered.com/app/413150/Stardew_Valley/"
  ],
  "maxGames": 10,
  "includeGameDetails": true,
  "includePlayerCount": true,
  "onlyDiscounted": false,
  "gamesOnly": true,
  "includeReviews": false,
  "maxReviewsPerGame": 100,
  "reviewLanguage": "all",
  "reviewType": "all",
  "country": "us",
  "language": "english",
  "onlyNew": false,
  "stateKey": "default"
}
```

# Actor output Schema

## `games` (type: `string`):

No description

## `reviews` (type: `string`):

No description

## `all` (type: `string`):

No description

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

No description

# 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 = {
    "appIds": [
        "1145360",
        "https://store.steampowered.com/app/413150/Stardew_Valley/"
    ],
    "maxGames": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("kempt_horizon_yzk/steam-store-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 = {
    "appIds": [
        "1145360",
        "https://store.steampowered.com/app/413150/Stardew_Valley/",
    ],
    "maxGames": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("kempt_horizon_yzk/steam-store-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 '{
  "appIds": [
    "1145360",
    "https://store.steampowered.com/app/413150/Stardew_Valley/"
  ],
  "maxGames": 10
}' |
apify call kempt_horizon_yzk/steam-store-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kempt_horizon_yzk/steam-store-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/HZXlLYQg1bLddVLbD/builds/U2TeNMQLci1R4UESa/openapi.json
