Steam Scraper avatar

Steam Scraper

Pricing

from $0.00005 / actor start

Go to Apify Store
Steam Scraper

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

Salman Asu

Maintained by Community

Actor stats

7

Bookmarked

11

Total users

0

Monthly active users

16 days ago

Last modified

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

The actor has no "mode" to configure. Instead:

  1. Provide identifiers — App IDs, Steam URLs, or game names to search. If none are given, the Steam popular-new catalog is paginated.
  2. Toggle sections — turn on exactly what you need: details, system requirements, reviews, news, media, similar games.
  3. Set filters — configure review sort/sentiment/language, news category, and media type in their respective filter sections.

Logic in plain English:

  • If appIds / steamUrls / searchNames are 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

FieldTypeDefaultDescription
appIdsarray[]Steam App IDs. Example: ["570", "730"]
steamUrlsarray[]Steam store URLs. App ID is extracted automatically
searchNamesarray[]Game names to search. First match per name is used
currencystringUSUS (USD $) or IN (INR ₹)
startPageinteger1Catalog start page. Used only when no identifiers given
maxPagesinteger5Catalog pages to paginate. Each page ≈ 50 games
freeGamesOnlybooleanfalseFilter catalog to free-to-play games only
includeDetailsbooleantrueDeveloper, publisher, franchise, external links, languages, about
includeSystemReqbooleantrueSystem requirements (Windows / Linux / macOS)
includeReviewsbooleanfalseUser reviews (configure in Section 2)
includeNewsbooleanfalseNews and announcements (configure in Section 3)
includeMediabooleanfalseScreenshots, videos, artwork, broadcasts (configure in Section 4)
includeSimilarGamesbooleanfalseSteam "More Like This" recommendations
proxyConfigurationobject{}Apify proxy config

Section 2 — Review filters

Only applies when includeReviews is true. Passed as the reviewFilters object.

FieldTypeDefaultDescription
reviewCategorystringtopratedSort order for reviews
reviewTypestringallSentiment: all · positive · negative
reviewLanguagestringenglishLanguage filter
reviewStartPageinteger1Page to start from (1-based, 10 reviews/page)
reviewMaxPagesinteger1Pages to fetch. 1 = 10 reviews, 2 = 20, etc.
includeCommentsbooleanfalseUser reviews comments (comments given on reviews)
commentStartPageinteger1Page to start from (1-based, 10 reviews/page)
commentMaxPagesinteger1Pages 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.

FieldTypeDefaultDescription
newsCategorystringallall · announcements · syndicated
newsLanguagestringenglishLanguage filter
newsStartPageinteger1Page to start from (1-based, 10 items/page)
newsMaxPagesinteger1Pages 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.

FieldTypeDefaultDescription
mediaCategorystringallall · screenshots · videos · artwork · broadcasts
mediaStartPageinteger1Page to start from (1-based, 10 items/page)
mediaMaxPagesinteger1Pages 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
}

originalPrice and discount are 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, mac only appear if the store page lists them. recommended may 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.

FieldWhen present
coreErrorCore game page failed to load
mediaErrorMedia section failed
reviewsErrorReviews section failed
newsErrorNews section failed
similarGamesErrorSimilar 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:

SectionValue
Screenshots2
Videos3
Artwork4
Official announcements8
Guides9
All reviews10
Broadcasts13
All news14
Positive reviews16
Negative reviews17

Run locally

npm install
npm install -g apify-cli
apify login
# Edit test input
nano apify_storage/key_value_stores/default/INPUT.json
npm 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 birthtime cookie 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"]
}
}