Steam Scraper
Pricing
from $0.00005 / actor start
Steam Scraper
Scrape Steam game listings, details, pricing, reviews, news, media, developer info, and similar games. Supports pagination, search, and flexible per-game data collection.
Pricing
from $0.00005 / actor start
Rating
5.0
(4)
Developer
Salman Asu
Maintained by CommunityActor stats
4
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Steam Game Scraper — Apify Actor
Scrape Steam game data without any API key. Six focused modes cover everything from lightweight catalog browsing to deep per-game extraction of pricing, reviews, news, media, developer info, and similar games.
Table of contents
- Modes
- Input parameters
- Example inputs
- Output schema
- Project structure
- Run locally
- Publish to Apify
- Rate limiting and proxy
Modes
The mode field controls everything. Each mode pre-configures which sections are enabled — no need to toggle individual flags.
| Mode | Paginates catalog | Deep-scrapes games | Sections enabled |
|---|---|---|---|
list-lite | yes | no | id, name, price, discount, image, release date |
list-full | yes | yes | all sections |
specific | no | yes | all sections |
review | no | yes | reviews only |
news | no | yes | news only |
media | no | yes | screenshots, videos, artwork, broadcasts |
search | no | no | keyword search results |
list-lite — fastest and cheapest. Paginates Steam's popular new catalog and saves one lightweight record per game. Good for price monitoring or collecting IDs to pass into other modes.
list-full — paginates the catalog then deep-scrapes every game found. Heavy on compute units. Use maxPages to control scope.
specific — deep-scrapes a list of gameIds you provide with all sections enabled. The most common production mode.
review — scrapes only reviews for the given gameIds. Fast and cheap per game. Supports sentiment filtering (positive / negative / all) and seven sort categories.
news — scrapes only news and announcements for the given gameIds. Works well as a scheduled daily run.
media — scrapes only screenshots, videos, artwork, and broadcasts for the given gameIds. Useful for content pipelines.
search — searches Steam by keyword using the suggest API and returns matching games with id, name, price, and image.
Advanced: you can override any individual section flag on top of a mode preset. For example,
mode: "review"with"includeMedia": trueadded will scrape both reviews and media.
Input parameters
{"mode": "list-lite","gameIds": [],"searchQuery": "","startPage": 1,"maxPages": 5,"currency": "US","language": "english","reviewCategory": "toprated","reviewType": "all","newsCategory": "all","reviewsLimit": 10,"newsLimit": 10,"mediaLimit": 10,"proxyConfiguration": { "useApifyProxy": true }}
| Parameter | Type | Default | Used in modes | Description |
|---|---|---|---|---|
mode | string | list-lite | all | Scraping mode. See table above. |
gameIds | array | [] | specific, review, news, media | Steam App IDs. Example: [570, 730, 1091500] |
searchQuery | string | "" | search | Keyword to search for |
startPage | integer | 1 | list-lite, list-full | Catalog page to start from (1-based) |
maxPages | integer | 5 | list-lite, list-full | Number of catalog pages to scrape. Each page returns ~50 games |
currency | string | US | all | US for USD ($) or IN for INR (₹) |
language | string | english | specific, list-full, review, news | Language for reviews and news |
reviewCategory | string | toprated | review, specific, list-full | How to sort reviews |
reviewType | string | all | review, specific, list-full | Sentiment filter for reviews |
newsCategory | string | all | news, specific, list-full | Type of news to fetch |
reviewsLimit | integer | 10 | review, specific, list-full | Max reviews per game (1–100) |
newsLimit | integer | 10 | news, specific, list-full | Max news items per game (1–100) |
mediaLimit | integer | 10 | media, specific, list-full | Max items per media type per game (1–50) |
proxyConfiguration | object | {} | all | Apify proxy config. Recommended for runs over 500 games |
language values
english spanish french german portuguese russian japanese koreana schinese tchinese
reviewCategory values
toprated mostrecent trendday trendweek trendmonth trendyear funny
reviewType values
all positive negative
newsCategory values
all announcements syndicated
Example inputs
Scrape catalog, basic info only (list-lite)
{"mode": "list-lite","startPage": 1,"maxPages": 10,"currency": "US"}
Full deep-scrape of 3 specific games (specific)
{"mode": "specific","gameIds": [570, 730, 1091500],"currency": "US","language": "english","reviewCategory": "toprated","reviewType": "all","newsCategory": "announcements","reviewsLimit": 20,"newsLimit": 10,"mediaLimit": 15}
Negative reviews only, in German (review)
{"mode": "review","gameIds": [730, 570],"language": "german","reviewType": "negative","reviewCategory": "mostrecent","reviewsLimit": 50}
Daily news run (news)
{"mode": "news","gameIds": [570, 730, 1172470, 1091500],"newsCategory": "announcements","newsLimit": 5,"language": "english"}
Pull media assets for a game (media)
{"mode": "media","gameIds": [1091500],"mediaLimit": 30}
Keyword search (search)
{"mode": "search","searchQuery": "open world rpg","currency": "US"}
Full catalog + deep scrape (list-full, small run)
{"mode": "list-full","startPage": 1,"maxPages": 2,"currency": "US","reviewsLimit": 5,"newsLimit": 5,"mediaLimit": 5,"proxyConfiguration": { "useApifyProxy": true }}
Output schema
Every dataset record contains _type and _mode fields that identify which mode produced it. Records from deep-scrape modes also always include the core game fields (name, description, pricing, etc.) plus whichever section fields the mode enables.
list-lite record
Produced by list-lite mode. One record per game per page.
{"_type": "list-lite","_mode": "list-lite","page": 1,"id": "1091500","name": "Cyberpunk 2077","releaseDate": "10 Dec, 2020","image": "https://cdn.cloudflare.steamstatic.com/steam/apps/1091500/capsule_sm_120.jpg","price": "$29.99","originalPrice": "$59.99","discount": "-50%","steamUrl": "https://store.steampowered.com/app/1091500/"}
originalPriceanddiscountare only present when the game is on sale.
Core game fields
All deep-scrape modes (specific, list-full, review, news, media) always fetch the core game page and produce these fields. Section-specific fields appear alongside these.
{"_type": "specific","_mode": "specific","gameId": "570","scrapedAt": "2025-05-13T08:00:00.000Z","name": "Dota 2","steamUrl": "https://store.steampowered.com/app/570/","description": "Every day, millions of players worldwide enter battle as one of over a hundred Dota heroes.","releaseDate": "9 Jul, 2013","headerImage": "https://cdn.akamai.steamstatic.com/steam/apps/570/header.jpg","reviewSummary": "Overwhelmingly Positive","genres": ["Free to Play", "Strategy"],"tags": ["Free to Play", "MOBA", "Strategy", "Multiplayer", "Team-Based", "Competitive"],"languages": ["English", "French", "German", "Spanish", "Portuguese", "Russian", "Japanese"],"developer": ["Valve"],"publisher": ["Valve"],"franchise": [],"pricing": [{"packageTitle": "Dota 2","discount": "0%","originalPrice": "Free","discountPrice": "Free"}],"externalLinks": [{ "name": "website", "link": "https://www.dota2.com" },{ "name": "X", "link": "https://x.com/DOTA2" },{ "name": "YouTube", "link": "https://youtube.com/@dota2" }],"systemRequirements": {"win": {"minimum": {"OS": "Windows 7","Processor": "Dual core from Intel or AMD at 2.8 GHz","Memory": "4 GB RAM","Graphics": "nVidia GeForce 8600/9600GT","Storage": "15 GB available space"},"recommended": {"OS": "Windows 10","Processor": "Intel Core i5 at 3.0 GHz","Memory": "8 GB RAM","Graphics": "nVidia GeForce GTX 970","Storage": "15 GB available space"}},"linux": {"minimum": { "Storage": "15 GB available space" },"recommended": {}}},"aboutGame": "Dota is a competitive game of action and strategy, played both professionally and casually..."}
systemRequirementscontains keyswin,linux, and/ormacdepending on what Steam lists. Each hasminimumandrecommendedobjects whose keys are the requirement label (OS, Processor, Memory, etc.).
devInfo section
Present on specific and list-full records.
"devInfo": {"developer": ["Valve"],"publisher": ["Valve"],"franchise": []}
media section
Present on media, specific, and list-full records.
"media": {"screenshots": [{"url": "https://steamcommunity.com/sharedfiles/.../116x65.jpg","fullUrl": "https://steamcommunity.com/sharedfiles/.../1920x1080.jpg"}],"videos": [{"youtubeId": "dqRTiAMiCKg","youtubeUrl": "https://www.youtube.com/watch?v=dqRTiAMiCKg","thumbnail": "https://i.ytimg.com/vi/dqRTiAMiCKg/hqdefault.jpg"}],"artwork": [{"url": "https://steamcommunity.com/sharedfiles/.../artwork.jpg"}],"broadcasts": [{"broadcastUrl": "https://steamcommunity.com/broadcast/watch/...","thumbnail": "https://steamcommunity.com/broadcast/..."}]}
Each array is capped at
mediaLimit.fullUrlon screenshots is the original high-res version derived by replacing the thumbnail dimensions in the URL.
reviews section
Present on review, specific, and list-full records.
"reviews": {"reviews": [{"reviewId": "someusername_570","title": "Recommended","content": "Best MOBA out there. The learning curve is steep but absolutely worth it.","date": "Posted: 10 January","userName": "SteamPlayer123","userProfile": "https://avatars.steamstatic.com/abc123_full.jpg"}],"category": "toprated","type": "all","language": "english","limit": 10,"offset": 0,"total": 10}
reviewIdis{username}_{gameId}derived from the review URL.userProfileis always the full-size avatar (suffix_full.jpg).
news section
Present on news, specific, and list-full records.
"news": {"news": [{"title": "Dota 2 Update — The Crownfall Act IV","date": "8 Jan","content": "Crownfall Act IV is now live. New hero Ringmaster has been added to the roster...","likes": "2.4k","category": "announcements"}],"category": "announcements","language": "english","limit": 10,"offset": 0,"total": 10}
similarGames section
Present on specific and list-full records.
"similarGames": {"similarGames": [{"id": "1046930","name": "Dota Underlords","price": "Free to Play","image": "https://cdn.cloudflare.steamstatic.com/steam/apps/1046930/capsule_sm_120.jpg","steamUrl": "https://store.steampowered.com/app/1046930/"}],"total": 8}
search record
Produced by search mode. One record per result.
{"_type": "search","_mode": "search","query": "open world rpg","id": "1091500","name": "Cyberpunk 2077","image": "https://cdn.cloudflare.steamstatic.com/steam/apps/1091500/capsule_sm_120.jpg","price": "$29.99","steamUrl": "https://store.steampowered.com/app/1091500/"}
Error fields
When a section fails for a game, the actor logs the error and saves an error field instead of skipping the record entirely. The run continues.
| Field | When present |
|---|---|
detailsError | Core game page failed to load |
devInfoError | Developer info section failed |
mediaError | Media section failed |
reviewsError | Reviews section failed |
newsError | News section failed |
similarGamesError | Similar games section failed |
Project structure
steam-game-scraper/│├── .actor/│ ├── actor.json # Actor name, version, dataset table view│ └── INPUT_SCHEMA.json # Input form rendered in Apify console│├── src/│ ├── main.js # Entry point — mode presets, orchestration│ ││ ├── scrapers/│ │ ├── gameList.js # Catalog pagination (50/page, JSON response)│ │ ├── gameDetails.js # Full store page — all core fields│ │ ├── gameMedia.js # Screenshots, videos, artwork, broadcasts│ │ ├── gameReviews.js # Reviews with sentiment + sort filtering│ │ ├── gameNews.js # News and announcements│ │ ├── devInfo.js # Developer, publisher, franchise│ │ ├── similarGames.js # More Like This recommendations│ │ └── search.js # Keyword search via Steam suggest API│ ││ └── utils/│ ├── http.js # All Steam URLs + Axios client (cookies, retry, backoff)│ └── logger.js # Console logger│├── apify_storage/ # Local dev storage — gitignored│ └── key_value_stores/default/INPUT.json│├── Dockerfile├── package.json├── .gitignore└── README.md
URL source of truth
All Steam endpoint URLs are defined in src/utils/http.js under the URLS object, mapped exactly from the project .env. The appHubSubSection values used for the /homecontent/ endpoint are:
| Section | appHubSubSection |
|---|---|
| Screenshots | 2 |
| Videos | 3 |
| Artwork | 4 |
| Workshop | 6 |
| Official announcements | 8 |
| Guides | 9 |
| All reviews | 10 |
| Broadcasts | 13 |
| All news | 14 |
| Positive reviews | 16 |
| Negative reviews | 17 |
Run locally
# Install dependenciesnpm install# Install Apify CLI (once)npm install -g apify-cli# Loginapify login# Edit test inputnano apify_storage/key_value_stores/default/INPUT.json# Runnpm run start:dev
Output saves to apify_storage/datasets/default/.
Publish to Apify
$apify push
Then in Apify Console → your actor → Publication tab:
- Set title, description, and categories (Web Scraping, Gaming)
- Upload a cover image
- Set pricing tiers
- Click Publish to Store
Rate limiting and proxy
Built-in protections:
- 1200ms delay between games in all deep-scrape modes
- 400ms delay between pagination requests within each scraper
- 3× retry with exponential backoff (1.5s → 3s → 4.5s) on failed requests
- Steam age-gate bypass via
birthtimecookie on every request - 404 responses are not retried — the game is skipped and the run continues
For runs over 500 games, enable proxy:
{"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}