# Steam Scraper (`anyxsolutions/steam-scraper`) Actor

Scrape games from the Steam store by keyword or URL: prices and discounts in any country, review scores and totals, genres, developers, publishers, release dates, platforms, languages, Metacritic scores, screenshots, and optional user reviews. No login, no API key, no proxy.

- **URL**: https://apify.com/anyxsolutions/steam-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![banner](https://anyx.solutions/banners/steam-scraper.png)

## Steam Scraper

**Games from the Steam store — prices and discounts in any country, review scores, genres, developers and optional user reviews — as clean JSON.**

Scrape games from the Steam store by keyword or URL: prices and discounts in any country, review
scores and totals, genres, developers, publishers, release dates, platforms, languages, Metacritic
scores, screenshots, and optional user reviews. Search by keyword, or paste a Steam store search
(filters, tags and sorting are kept) or an app page, and get one row per game with its store
details and review totals, plus its latest user reviews when you ask for them. No login, no API
key, no proxy. Built for game market research, price and discount tracking, publisher and
competitor analysis, and review mining.

### ⚡ Quick start

```json
{
  "startUrls": [
    { "url": "https://store.steampowered.com/search/?term=roguelike" }
  ],
  "maxItems": 5
}
```

### 🧩 Input

| Field                | Type    | Required | Default                      | Description                                                                                                                                                                                  |
| -------------------- | ------- | -------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `searchTerms`        | array   | no       | —                            | Keywords to search the Steam store for, such as `roguelike` or `city builder`. Each term returns its matching games, most relevant first.                                                    |
| `startUrls`          | array   | no       | —                            | Steam store search URLs (`store.steampowered.com/search/?term=…`, with any filters, tags or sorting) or app pages (`store.steampowered.com/app/<id>/…`). Give these, `searchTerms`, or both. |
| `maxItems`           | integer | no       | —                            | Maximum number of apps per search term or start URL. The input form starts at 5; leave it empty to get every result of the search.                                                           |
| `country`            | string  | no       | `us`                         | Two-letter store country (`us`, `gb`, `de`, `jp` …). Sets the currency and prices, and which games are available.                                                                            |
| `includeReviews`     | boolean | no       | `false`                      | Also collect user reviews for every app, most recent first, nested on the app. The review score and totals are always included.                                                              |
| `maxReviews`         | integer | no       | `20`                         | Maximum number of user reviews per app. Only used when `includeReviews` is on.                                                                                                               |
| `proxyConfiguration` | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. The Steam store needs no proxy; for runs of thousands of apps, a datacenter proxy runs faster.                                                                               |

**Using store filters.** Open the [Steam search](https://store.steampowered.com/search/), set the
filters you want (tags, price, specials, platform, sort order), and paste the address from your
browser into `startUrls`. The Actor returns the same games in the same order.

### 📤 Output

Each app is one dataset row. Prices are in whole currency units for the chosen country; when you
turn on `includeReviews`, the reviews are nested in the row's `reviews` list.

#### Fields

| Field                | Type    | Description                                                                                                    |
| -------------------- | ------- | -------------------------------------------------------------------------------------------------------------- |
| `appId`              | number  | Steam app ID.                                                                                                  |
| `url`                | string  | The app's Steam store page.                                                                                    |
| `name`               | string  | App name.                                                                                                      |
| `type`               | string  | `game`, `dlc`, `demo`, `music`, `software` …                                                                   |
| `searchTerm`         | string  | The search term that found the app, or `null` for an app URL.                                                  |
| `country`            | string  | The store country the prices are for.                                                                          |
| `isFree`             | boolean | Whether the app is free to play.                                                                               |
| `currency`           | string  | Price currency (ISO 4217).                                                                                     |
| `initialPrice`       | number  | Price before any discount.                                                                                     |
| `finalPrice`         | number  | Current price; `0` for free games, `null` when the app is not sold on its own.                                 |
| `discountPercent`    | number  | Current discount, in percent.                                                                                  |
| `releaseDate`        | string  | Release date as the store shows it, or the announced date.                                                     |
| `comingSoon`         | boolean | Whether the app is not released yet.                                                                           |
| `developers`         | array   | Developer names.                                                                                               |
| `publishers`         | array   | Publisher names.                                                                                               |
| `genres`             | array   | Genres.                                                                                                        |
| `categories`         | array   | Store features, such as Single-player, Steam Achievements or Full controller support.                          |
| `platforms`          | array   | Supported platforms: `windows`, `mac`, `linux`.                                                                |
| `shortDescription`   | string  | The one-paragraph summary from the top of the store page.                                                      |
| `descriptionHtml`    | string  | Full "About this game" description as HTML.                                                                    |
| `descriptionText`    | string  | Full description as plain text.                                                                                |
| `supportedLanguages` | array   | Supported languages.                                                                                           |
| `fullAudioLanguages` | array   | Languages with full audio.                                                                                     |
| `requiredAge`        | number  | Minimum age the store requires, `0` when none.                                                                 |
| `metacriticScore`    | number  | Metacritic score, when the store shows one.                                                                    |
| `metacriticUrl`      | string  | Metacritic page, when the store links one.                                                                     |
| `reviewSummary`      | string  | Steam's review score, such as "Very Positive" or "Mixed".                                                      |
| `totalReviews`       | number  | Number of user reviews, all languages.                                                                         |
| `positiveReviews`    | number  | Number of positive reviews.                                                                                    |
| `negativeReviews`    | number  | Number of negative reviews.                                                                                    |
| `positivePercent`    | number  | Share of positive reviews, in percent.                                                                         |
| `recommendations`    | number  | Recommendation count shown on the store page.                                                                  |
| `achievements`       | number  | Number of Steam achievements.                                                                                  |
| `dlcCount`           | number  | Number of DLCs for the app.                                                                                    |
| `headerImage`        | string  | Header image URL.                                                                                              |
| `screenshots`        | array   | Full-size screenshot URLs.                                                                                     |
| `website`            | string  | The developer's website, when listed.                                                                          |
| `reviews`            | array   | User reviews, most recent first (see below). Empty when the app has none; `null` when `includeReviews` is off. |

Each review has `id`, `url`, `recommended` (thumbs up or down), `text`, `language`, `createdAt`,
`updatedAt`, `votesHelpful`, `votesFunny`, `commentCount`, `authorName`, `authorSteamId`,
`authorProfileUrl`, `authorGamesOwned`, `authorReviews`, `playtimeAtReviewHours`,
`playtimeTotalHours`, `steamPurchase`, `receivedForFree` and `writtenDuringEarlyAccess`.

<details><summary>Example output</summary>

```json
{
  "appId": 4075620,
  "url": "https://store.steampowered.com/app/4075620/",
  "name": "Combolands: Roguelike Citybuilder",
  "type": "game",
  "searchTerm": "roguelike",
  "country": "us",
  "isFree": false,
  "currency": "USD",
  "initialPrice": 9.99,
  "finalPrice": 7.99,
  "discountPercent": 20,
  "releaseDate": "Aug 24, 2026",
  "comingSoon": false,
  "developers": ["Crux Games"],
  "publishers": ["Crux Games"],
  "genres": ["Indie", "Strategy"],
  "categories": [
    "Single-player",
    "Steam Achievements",
    "Custom Volume Controls",
    "Mouse Only Option"
  ],
  "platforms": ["windows"],
  "shortDescription": "A mini citybuilding roguelike. Place buildings, stack combos, and master deep strategy in short bursts to create a tiny thriving metropolis!",
  "descriptionHtml": "<p class=\"bb_paragraph\" >Combolands is a tiny roguelike citybuilder offering dee …",
  "descriptionText": "Combolands is a tiny roguelike citybuilder offering deep strategy in a bite-size …",
  "supportedLanguages": ["English"],
  "fullAudioLanguages": ["English"],
  "requiredAge": 0,
  "metacriticScore": null,
  "metacriticUrl": null,
  "reviewSummary": "Overwhelmingly Positive",
  "totalReviews": 1675,
  "positiveReviews": 1623,
  "negativeReviews": 52,
  "positivePercent": 97,
  "recommendations": 1626,
  "achievements": 21,
  "dlcCount": 0,
  "headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4075620/94f8d81bbadbc37f1f0ae0a5df30bda1ff4af186/header.jpg?t=1787743588",
  "screenshots": [
    "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4075620/218e90ea9cd9c3d34a1627097bdcad2a90134fd6/ss_218e90ea9cd9c3d34a1627097bdcad2a90134fd6.1920x1080.jpg?t=1787743588",
    "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4075620/7c4dc9691dee36cf189e7c6d63a8171b0eed27f5/ss_7c4dc9691dee36cf189e7c6d63a8171b0eed27f5.1920x1080.jpg?t=1787743588"
  ],
  "website": null,
  "reviews": [
    {
      "id": "237590346",
      "url": "https://steamcommunity.com/profiles/76561198061112228/recommended/4075620/",
      "recommended": true,
      "text": "incredible game, easy to pick up but tons of depth with all the different guild combinations\n\nleft me wanting more achievements, unlockables, and guilds\n\nhope we get some patches or dlc in the future, because after beating everything i feel like theres not a lot to play for",
      "language": "english",
      "createdAt": "2026-10-12T23:20:51.000Z",
      "updatedAt": "2026-10-12T23:20:51.000Z",
      "votesHelpful": 0,
      "votesFunny": 0,
      "commentCount": 0,
      "authorName": "jbr",
      "authorSteamId": "76561198061112228",
      "authorProfileUrl": "https://steamcommunity.com/profiles/76561198061112228/",
      "authorGamesOwned": 0,
      "authorReviews": 5,
      "playtimeAtReviewHours": 29.7,
      "playtimeTotalHours": 30,
      "steamPurchase": true,
      "receivedForFree": false,
      "writtenDuringEarlyAccess": false
    }
  ]
}
```

</details>

### 💡 Use cases

- **Game market research** — size up a genre or tag: how many games, at what prices, with what review scores.
- **Price and discount tracking** — watch prices and sales across countries and currencies.
- **Publisher and competitor analysis** — follow what developers and publishers release, and how players receive it.
- **Review mining** — collect player reviews with playtime for sentiment analysis and feature feedback.

### ❓ FAQ

- **Do I need a Steam account or an API key?** No. The Actor reads the same public store pages any visitor sees.
- **Do I need a proxy?** No. It runs without one by default. Steam limits how fast one IP can read game details, so the Actor paces itself at about 40 games a minute; for runs of thousands of games, a datacenter proxy spreads the work over several IPs and runs faster.
- **Why is the price empty for some games?** Free games have a price of `0`. A game that is only sold in a bundle, not released yet, or not sold in your chosen country has no price; a game that is not available in that country at all is skipped, and the log says so.
- **Can I get prices in euros or pounds?** Yes. Set `country` to the store you want, such as `de` or `gb`.
- **Which reviews do I get?** The most recent ones, in every language, up to `maxReviews` per game. The review score and totals are always included, with or without the review texts.
- **Why is `authorGamesOwned` 0?** Steam reports 0 when the reviewer's profile hides their game library.
- **Why did a run return fewer games than expected?** The search may match fewer games than `maxItems`, packages and bundles in search results are skipped, and games unavailable in your country are left out. Open an issue if something looks off.

### 🔗 More scrapers by Anyx

- [Google Play Store Scraper](https://apify.com/anyxsolutions/google-play-scraper)
- [YouTube Search Scraper](https://apify.com/anyxsolutions/youtube-search-scraper)
- [Reddit Scraper](https://apify.com/anyxsolutions/reddit-scraper)
- [Trustpilot Scraper](https://apify.com/anyxsolutions/trustpilot-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [store.steampowered.com](https://store.steampowered.com/)

# Actor input Schema

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

Keywords to search the Steam store for, for example roguelike or city builder. Each term returns its matching games, most relevant first.

## `startUrls` (type: `array`):

Steam store search URLs, such as https://store.steampowered.com/search/?term=roguelike (filters like tags, specials and sorting are kept), or app pages such as https://store.steampowered.com/app/620/Portal_2/.

## `maxItems` (type: `integer`):

Maximum number of apps to return per search term or start URL. Leave empty to get every result of the search.

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

Two-letter country code that sets the store region, currency and prices, for example us, gb, de or jp.

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

Also collect user reviews for every app, most recent first, nested on the app. The review score and totals are always included.

## `maxReviews` (type: `integer`):

Maximum number of user reviews to collect per app. Only used when Include user reviews is on.

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

Proxy settings. The Steam store needs no proxy; for runs of thousands of apps, a datacenter proxy spreads the calls over several IPs and runs faster.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://store.steampowered.com/search/?term=roguelike"
    }
  ],
  "maxItems": 5,
  "country": "us",
  "includeReviews": false,
  "maxReviews": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://store.steampowered.com/search/?term=roguelike"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/steam-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 = {
    "startUrls": [{ "url": "https://store.steampowered.com/search/?term=roguelike" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/steam-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 '{
  "startUrls": [
    {
      "url": "https://store.steampowered.com/search/?term=roguelike"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/steam-scraper --silent --output-dataset

```

## MCP server setup

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