Steam Scraper
Pricing
from $0.00005 / actor start
Steam Scraper
Scrape Steam game listings, details, pricing, reviews, comments in 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
(7)
Developer
Salman Asu
Maintained by CommunityActor stats
7
Bookmarked
11
Total users
0
Monthly active users
16 days ago
Last modified
Categories
Share
Steam Scraper — Apify Actor
Scrape Steam game data without any API key. Provide game IDs, Steam URLs, or search by name — or leave identifiers empty to paginate the Steam catalog. Toggle exactly what you want per game: details, system requirements, reviews, news, media, and similar games.
Table of contents
- How it works
- Section 1 — What to scrape
- Section 2 — Review filters
- Section 3 — News filters
- Section 4 — Media filters
- Example inputs
- Output schema
- Project structure
- Run locally
- Publish to Apify
- Rate limiting and proxy
How it works
The actor has no "mode" to configure. Instead:
- Provide identifiers — App IDs, Steam URLs, or game names to search. If none are given, the Steam popular-new catalog is paginated.
- Toggle sections — turn on exactly what you need: details, system requirements, reviews, news, media, similar games.
- Set filters — configure review sort/sentiment/language, news category, and media type in their respective filter sections.
Logic in plain English:
- If
appIds/steamUrls/searchNamesare all empty → paginate catalog → if any toggle is ON, deep-scrape each game found; otherwise save lightweight catalog records only. - If any identifier is provided → skip catalog → deep-scrape those specific games only.
Section 1 — What to scrape
| Field | Type | Default | Description |
|---|---|---|---|
appIds | array | [] | Steam App IDs. Example: ["570", "730"] |
steamUrls | array | [] | Steam store URLs. App ID is extracted automatically |
searchNames | array | [] | Game names to search. First match per name is used |
currency | string | US | US (USD $) or IN (INR ₹) |
startPage | integer | 1 | Catalog start page. Used only when no identifiers given |
maxPages | integer | 5 | Catalog pages to paginate. Each page ≈ 50 games |
freeGamesOnly | boolean | false | Filter catalog to free-to-play games only |
includeDetails | boolean | true | Developer, publisher, franchise, external links, languages, about |
includeSystemReq | boolean | true | System requirements (Windows / Linux / macOS) |
includeReviews | boolean | false | User reviews (configure in Section 2) |
includeNews | boolean | false | News and announcements (configure in Section 3) |
includeMedia | boolean | false | Screenshots, videos, artwork, broadcasts (configure in Section 4) |
includeSimilarGames | boolean | false | Steam "More Like This" recommendations |
proxyConfiguration | object | {} | Apify proxy config |
Section 2 — Review filters
Only applies when includeReviews is true. Passed as the reviewFilters object.
| Field | Type | Default | Description |
|---|---|---|---|
reviewCategory | string | toprated | Sort order for reviews |
reviewType | string | all | Sentiment: all · positive · negative |
reviewLanguage | string | english | Language filter |
reviewStartPage | integer | 1 | Page to start from (1-based, 10 reviews/page) |
reviewMaxPages | integer | 1 | Pages to fetch. 1 = 10 reviews, 2 = 20, etc. |
includeComments | boolean | false | User reviews comments (comments given on reviews) |
commentStartPage | integer | 1 | Page to start from (1-based, 10 reviews/page) |
commentMaxPages | integer | 1 | Pages to fetch. 1 = 10 reviews, 2 = 20, etc. |
reviewCategory values: toprated · mostrecent · trendday · trendweek · trendmonth · trendyear · funny
reviewLanguage values: english · spanish · french · german · portuguese · russian · japanese · koreana · schinese · tchinese
Section 3 — News filters
Only applies when includeNews is true. Passed as the newsFilters object.
| Field | Type | Default | Description |
|---|---|---|---|
newsCategory | string | all | all · announcements · syndicated |
newsLanguage | string | english | Language filter |
newsStartPage | integer | 1 | Page to start from (1-based, 10 items/page) |
newsMaxPages | integer | 1 | Pages to fetch. 1 = 10 items |
reviewLanguage values: english · spanish · french · german · portuguese · russian · japanese · koreana · schinese · tchinese
Section 4 — Media filters
Only applies when includeMedia is true. Passed as the mediaFilters object.
| Field | Type | Default | Description |
|---|---|---|---|
mediaCategory | string | all | all · screenshots · videos · artwork · broadcasts |
mediaStartPage | integer | 1 | Page to start from (1-based, 10 items/page) |
mediaMaxPages | integer | 1 | Pages to fetch per media type. 1 = 10 items |
Example inputs
Scrape 3 specific games — details + reviews + news
{"appIds": ["570", "730", "1091500"],"currency": "US","includeDetails": true,"includeSystemReq": true,"includeReviews": true,"includeNews": true,"includeMedia": false,"includeSimilarGames": true,"reviewFilters": {"reviewCategory": "toprated","reviewType": "all","reviewLanguage": "english","reviewStartPage": 1,"reviewMaxPages": 2},"newsFilters": {"newsCategory": "announcements","newsStartPage": 1,"newsMaxPages": 1}}
Search by game name and scrape details
{"searchNames": ["Dota 2", "Counter-Strike 2", "Elden Ring"],"currency": "US","includeDetails": true,"includeSystemReq": true,"includeReviews": false,"includeNews": false,"includeMedia": false,"includeSimilarGames": false}
Scrape from Steam URL
{"steamUrls": ["https://store.steampowered.com/app/1091500/Cyberpunk_2077/","https://store.steampowered.com/app/1245620/ELDEN_RING/"],"currency": "IN","includeDetails": true,"includeSystemReq": true,"includeReviews": true,"reviewFilters": {"reviewCategory": "mostrecent","reviewType": "negative","reviewLanguage": "english","reviewStartPage": 1,"reviewMaxPages": 3}}
Paginate catalog — basic list only (no toggles)
{"currency": "US","startPage": 1,"maxPages": 10,"freeGamesOnly": false,"includeDetails": false,"includeSystemReq": false,"includeReviews": false,"includeNews": false,"includeMedia": false,"includeSimilarGames": false}
Paginate catalog and deep-scrape every game
{"currency": "US","startPage": 1,"maxPages": 3,"includeDetails": true,"includeSystemReq": true,"includeReviews": true,"includeNews": true,"includeMedia": true,"includeSimilarGames": true,"reviewFilters": {"reviewCategory": "toprated","reviewType": "all","reviewLanguage": "english","reviewStartPage": 1,"reviewMaxPages": 1},"newsFilters": {"newsCategory": "all","newsStartPage": 1,"newsMaxPages": 1},"mediaFilters": {"mediaCategory": "all","mediaStartPage": 1,"mediaMaxPages": 1},"proxyConfiguration": { "useApifyProxy": true }}
Only screenshots for a specific game
{"appIds": ["1091500"],"includeDetails": false,"includeSystemReq": false,"includeMedia": true,"mediaFilters": {"mediaCategory": "screenshots","mediaStartPage": 1,"mediaMaxPages": 3}}
Free games catalog
{"currency": "US","startPage": 1,"maxPages": 5,"freeGamesOnly": true,"includeDetails": true,"includeSystemReq": false,"includeReviews": false,"includeMedia": false,"includeSimilarGames": false}
Output schema
Catalog record
Produced when no identifiers are given and no toggles are enabled. One record per game.
{"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/","_page": 1}
originalPriceanddiscountare only present when the game is on sale.
Game record — always-present fields
Every deep-scrape record contains these fields regardless of toggles.
{"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"],"pricing": [{"packageTitle": "Dota 2","discount": "0%","originalPrice": "Free","discountPrice": "Free"}]}
includeDetails: true — additional fields
{"developer": ["Valve"],"publisher": ["Valve"],"franchise": [],"languages": ["English", "French", "German", "Spanish"],"externalLinks": [{ "name": "website", "link": "https://www.dota2.com" },{ "name": "X", "link": "https://x.com/DOTA2" },{ "name": "YouTube", "link": "https://youtube.com/@dota2" }],"aboutGame": "Dota is a competitive game of action and strategy..."}
includeSystemReq: true — additional field
{"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": {}}}}
Keys
win,linux,maconly appear if the store page lists them.recommendedmay be empty if not listed separately.
includeReviews: true — additional field
{"reviews": {"reviews": [{"reviewId": "someusername_570","title": "Recommended","content": "Best MOBA ever made. High skill ceiling but completely worth it.","date": "Posted: 10 January","userName": "SteamPlayer123","userProfile": "https://avatars.steamstatic.com/abc123_full.jpg","comments": {"comments": [{"userName": "","userProfile": "https://avatars.akamai.steamstatic.com/ cf37a7557142bc7f96358ccf32d71a91a11852d6_full.jpg","content": "bruh every game on non prime (especially on wingman is) - me gettin' monke teammates that installed the game 1 minute before that game started -> my oppontents are fu***n' cybersports."},{"userName": "","userProfile": "https://avatars.akamai.steamstatic.com/ 912adedd7d007a43fa3aa0a3ef09cc13374dea31_full.jpg","content": "Literally not a single game without cheats too, 5k csr to 19k cheated"}],"total": 2}}],"category": "toprated","type": "all","language": "english","total": 10}}
includeNews: true — additional field
{"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...","likes": "2.4k","category": "announcements"}],"category": "announcements","total": 10}}
includeMedia: true — additional field
Keys present depend on mediaFilters.mediaCategory.
{"media": {"screenshots": [{"url": "https://steamcommunity.com/.../116x65.jpg","fullUrl": "https://steamcommunity.com/.../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/.../artwork.jpg" }],"broadcasts": [{"broadcastUrl": "https://steamcommunity.com/broadcast/watch/...","thumbnail": "https://steamcommunity.com/broadcast/..."}]}}
includeSimilarGames: true — additional field
{"similarGames": {"similarGames": [{"id": "1046930","name": "Dota Underlords","price": "Free to Play","image": "https://cdn.cloudflare.steamstatic.com/...","steamUrl": "https://store.steampowered.com/app/1046930/"}],"total": 8}}
Error fields
When a section fails the actor logs the error, saves an error field on the record, and continues to the next game.
| Field | When present |
|---|---|
coreError | Core game page failed to load |
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 views│ ├── INPUT_SCHEMA.json # Input form (4 sections) rendered in Apify console│ └── OUTPUT_SCHEMA.json # Full output field documentation│├── src/│ ├── main.js # Entry point — resolves IDs, orchestrates sections│ ││ ├── scrapers/│ │ ├── gameList.js # Catalog pagination (50 games/page, JSON response)│ │ ├── gameDetails.js # Full store page — all core + detail fields│ │ ├── gameMedia.js # Screenshots/videos/artwork/broadcasts with category filter│ │ ├── gameReviews.js # Reviews with sentiment, sort, language, pagination│ │ ├── gameNews.js # News and announcements with category, pagination│ │ ├── devInfo.js # Developer / publisher / franchise│ │ ├── similarGames.js # More Like This recommendations│ │ └── search.js # Keyword → App ID resolution via Steam suggest API│ ││ └── utils/│ ├── http.js # All Steam URLs + Axios client (cookies, retry, backoff)│ └── logger.js # Console logger│├── apify_storage/│ └── key_value_stores/default/INPUT.json # Local test input│├── Dockerfile├── package.json├── .gitignore└── README.md
Steam /homecontent/ endpoint — appHubSubSection reference
All review, news, and media URLs hit steamcommunity.com/app/{id}/homecontent/ with different appHubSubSection values:
| Section | Value |
|---|---|
| Screenshots | 2 |
| Videos | 3 |
| Artwork | 4 |
| Official announcements | 8 |
| Guides | 9 |
| All reviews | 10 |
| Broadcasts | 13 |
| All news | 14 |
| Positive reviews | 16 |
| Negative reviews | 17 |
Run locally
npm installnpm install -g apify-cliapify login# Edit test inputnano apify_storage/key_value_stores/default/INPUT.jsonnpm 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, categories, pricing, and publish.
Rate limiting and proxy
Built-in protections:
- 1200ms delay between games
- 400ms delay between pages within each section
- 3× retry with backoff (1.5s → 3s → 4.5s) on failed requests
- Steam age-gate bypass via
birthtimecookie on every request - 404 responses skip the game without retrying — run continues
For large catalog runs (500+ games) enable proxy:
{"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}