Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Steam Games Scraper icon

Steam Games Scraper

Scrape Steam games with no API key. Get price, discount, genres, developers, Metacritic, platforms, SteamSpy stats and player reviews. $2 per 1,000 rows.

262 runs on Apify $0.002 per item ($2 / 1,000)
Run this in the cloudRun on Apify →

Media & Entertainment Data

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust mode, query, appIds (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.002 per item = $2 per 1,000

You are charged forWhenPrice
Item returnedCharged per game/result returned.$0.002

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-13, and they are what you are actually charged.

Inputs

FieldWhat it doesType
modeWhat to scrape. "search" finds apps by name (needs query). "app" returns full store details + SteamSpy stats for given app ids. "reviews" returns recent player reviews for given app ids.string
queryGame name to search for in "search" mode, e.g. "portal" or "counter strike". Ignored in app/reviews modes.string
appIdsList of numeric Steam app ids to fetch in "app" or "reviews" mode, e.g. ["400","620"] (Portal, Portal 2). Use search mode first to find app ids. Ignored in search mode.array
languageWhich language's reviews to read. Steam files every review under the language it was written in. Pick All languages for everything. Anything but English also adds each review's own language to its row. Reviews mode only.string
purchaseTypeSteam only returns reviews from people who bought the game on Steam unless you ask otherwise. Not bought on Steam covers players who got the game somewhere else, such as a key bought from another shop. On a free-to-play game a large share of the reviews, often nearly all, sit under Not bought on Steam, so pick Both there. Reviews mode only.string
maxItemsMaximum number of output rows to return (apps in search mode, app rows in app mode, reviews total in reviews mode). Charged per successful row only.integer
notionConnectorOptional. Write each item as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless.string
notionParentIdOptional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead.string

What you get

A structured dataset — each result includes fields like:

appIdcategoriescreatedAtdevelopersdiscountPctgamesOwnedgenresheaderImageiconisFreemetacriticScorenamenegativeReviewsownerspriceurl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

3 ready-to-run use cases

Steam Search: Find Games and App IDs by Keyword

Type a keyword and get matching Steam titles with their app IDs and icons. Names and IDs only; feed those IDs back in for prices and genres.

Steam Price Checker and Genre Lookup by App ID

Feed app IDs and each row returns current price, discount, genres, store categories, developer and review counts. Genres and categories, not user tags.

Cyberpunk 2077 Steam Reviews as Structured Rows

Recent reviews for app 1091500 with the review text, thumbs up or down, playtime and date posted. Reviewer names are not part of the row.

Related tools in Media & Entertainment Data

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Books Scraper (Google Books + Open Library) iconMedia & Entertainment Data

Books Scraper (Google Books + Open Library)

Search Open Library or Google Books: title, authors, ISBN, publisher, year, rating and cover. Open Library needs no key. $1.00 per 1,000 books.

4 use cases

TVMaze TV Show Scraper iconMedia & Entertainment Data

TVMaze TV Show Scraper

Search TVMaze for TV shows and people. Get ratings, genres, network, IMDb IDs, images and full episode lists, as JSON. $2 per 1,000 rows.

Ready to run — no setup

MusicBrainz Scraper iconMedia & Entertainment Data

MusicBrainz Scraper

Scrape MusicBrainz artists, releases, recordings and labels. Every row has an MBID, plus names, types, dates and tags. No API key. $0.20 per 1,000 records.

Ready to run — no setup

IMDb Search Scraper iconMedia & Entertainment Data

IMDb Search Scraper

Search IMDb for titles, people and companies: IMDb ID, year, category, cast line, poster, URL. About 8 per query. $2.50 per 1,000.

3 use cases

See all Media & Entertainment Data →

Steam Scraper: game details, prices, owner estimates and player reviews

Three jobs in one actor. Find Steam app ids by name, pull full store details and stats for a list of ids, or pull recent player reviews for them. Details mode gives you the price and discount, the genres and categories, the developers and publishers, the release date, the Metacritic score, the platforms and an owners estimate.

That owners figure needs a caveat up front. Valve does not publish how many copies anything has sold, so owners is an outside estimate delivered as a range like 10,000,000 .. 20,000,000. It is useful for sizing a genre. It is not a sales number, and nobody should present it as one.

InputA game name, or a list of numeric app ids
OutputOne row per app or per review
Ceiling1,000 rows per run
Account neededNone, and no Steam key
Price$2.00 per 1,000 rows, flat on every plan

🔍 What Steam Scraper does

Search turns a name into app ids. Type portal and you get back appId, name and an icon URL, nothing more. It exists so you can find the id you need, and it is worth knowing that a search row costs the same as a full details row, so keep maxItems low while you are hunting.

App takes those ids and returns the store page as structured data: price as the formatted US string, discountPct, genres, categories, developers, publishers, releaseDate, metacriticScore, recommendations, platforms, the short description with HTML stripped, and the owners and review-count estimates.

Reviews takes the same ids and pulls recent player reviews: the text, whether it was a thumbs up, how many people found it helpful, the reviewer's total playtime in minutes and how many games they own. They are in English unless you pick another language or all of them, and they come from people who bought the game on Steam unless you change purchaseType, because that is what Steam returns by default. On a free-to-play game that default is a thin slice: under 1% of Dota 2's English reviews when we checked. Set purchaseType to all for those games.

A bad id never stops the run. It becomes its own uncharged row and the other ids carry on.

📥 What you give it

{
  "mode": "app",
  "appIds": ["400", "620"],
  "maxItems": 50
}
FieldDefaultWhat it is
modesearchsearch, app or reviews.
querynoneThe game name, search mode only. The Console shows portal as an example, but that is a prefill, so an API call has to send its own.
appIdsnoneNumeric Steam app ids as strings, for app and reviews modes. Anything that is not all digits is dropped quietly, so check your list if a row is missing.
languageenglishReviews mode. Steam's language code: english, french, german, schinese (Chinese, simplified), tchinese, koreana, brazilian, latam (Latin American Spanish) and 24 more in the form, or all. Anything but english adds each review's own language to its row.
purchaseTypesteamReviews mode. steam for players who bought it on Steam, non_steam_purchase for everyone else, such as a key bought from another shop, or all. Use all on free-to-play games.
maxItems501 to 1,000 charged rows. In reviews mode it is the total across every id, not per game.
notionConnectornoneOptional. Writes every delivered row into your Notion. Authorise a connector once under Settings, API and Integrations, MCP connectors, then pick it here. Review rows have no name, so those pages arrive untitled.
notionParentIdnoneOptional. The Notion data source id to write into. Leave it empty and the pages are created privately in your workspace.
proxyConfigurationoffOptional network setting. Off is right for a normal run.

The app id is the number in a store URL: store.steampowered.com/app/620/Portal_2/ is 620.

📤 What you get back

A real search-mode row from a recent run, which is the whole row, not an extract:

{
  "ok": true,
  "appId": "620",
  "name": "Portal 2",
  "icon": "https://shared.fastly.steamstatic.com/community_assets/images/apps/620/25a5a16b2423bf7487ac5340b5b0948cef48c5f8.jpg"
}
ModeWhat the row carries
searchappId, name, icon. Three fields, and that is the point of the mode.
appappId, name, type, isFree, price, discountPct, developers, publishers, genres, categories, releaseDate, metacriticScore, recommendations, owners, positiveReviews, negativeReviews, shortDescription, headerImage, platforms, url.
reviewsappId, reviewId, review, votedUp, votesUp, playtimeForeverMin, gamesOwned, createdAt, url, plus Steam's own language for the review when you pick a language other than English.
FieldWhat it is
priceA formatted US-store string, and the word Free on free games. Not a number, so parse it.
discountPct0 when there is no discount, and also 0 when the store returned no price data at all.
releaseDateSteam's own wording, which can be Coming soon or a quarter rather than a date.
owners, positiveReviews, negativeReviewsOutside estimates. All three come back null when the estimate is unavailable, and the rest of the row is still delivered.
reviewThe review text with HTML stripped. Steam's own markup tags such as [spoiler] stay in as literal text.
playtimeForeverMinMinutes, not hours. Divide before you show it to anyone.

🧾 Reading the output

Real rows carry ok: true. Anything with ok: false carries an errorCode and is not charged.

CodeWhat it means
BAD_INPUTAn unknown mode, a search with no query, app and reviews modes with no usable numeric id, or a language or purchaseType that is unknown or set outside reviews mode. Nothing was read.
NOT_FOUNDSteam does not serve that id, or it is region locked. That one id fails, the rest continue.
NO_RESULTSThe search matched nothing, or the game genuinely has no recent reviews in the language and purchase type you asked for.
RATE_LIMITEDSteam asked the run to slow down. Split a long id list across runs.

The Console's Overview table shows app columns only, so a reviews run looks almost empty in it. The review text is there. Download the dataset as JSON, CSV or Excel, or switch the table to all fields.

▶️ How to run it

1. Open Steam Scraper and click Try for free. 2. Run Mode on Search with a game name to collect the app ids you need. 3. Change Mode to App details or Player reviews, and paste those ids into App IDs. 4. Set Max items, then click Start. 5. Download the dataset as JSON, CSV, Excel or XML.

💰 How much does it cost?

$2.00 per 1,000 rows. Flat on every Apify plan, no volume tiers.

A search row, an app row and a review row all cost the same, which is worth knowing before a wide search. Repeated rows inside a run and every diagnostic row are not charged, and an id that Steam does not recognise costs you nothing.

💡 What people use it for

  • Watching price and discount on a list of app ids through a sale, one run a day.
  • Sizing a genre before building in it, using owner estimates and Metacritic together.
  • Reading recent negative reviews sorted by playtimeForeverMin, so the complaints from people who

actually played it come first.

  • Hearing what one market thinks before a launch there, with language set to brazilian or

schinese.

  • Building a catalogue of a publisher's back list with genres, platforms and release dates.

🚧 What it does not do

  • No sales figures. Nobody outside Valve has them, and owners is an estimated range.
  • US store prices only. No regional pricing, no currency choice.
  • Recent reviews only. Not the full history, and one language or all of them, not a chosen few.
  • No wishlists, no concurrent players, no achievements, no workshop, no news.
  • No user profiles or friend lists.
  • maxItems is the total in reviews mode, so with several ids the later ones can come back with

nothing. Give a big game its own run.

  • Long id lists get throttled. Steam decides the pace, and the tail of a few-hundred-id run can

come back as RATE_LIMITED rows.

  • Rows are a snapshot. Prices, discounts and review counts move daily.

🧭 Which app and game scraper do you need?

If you wantUse
Steam games, store details and player reviewsThis one
iPhone and iPad apps and their reviewsApp Store Scraper
Android apps and their listingsGoogle Play Apps Scraper
Reviews from Google PlayGoogle Play Reviews Scraper

❓ Questions people ask

Where do I find an app id? Either run search mode, or read it out of the store URL.

Why is owners a range? Because it is an estimate. Valve publishes no sales data, so anything presented as a hard number would be made up.

Can I get prices in my currency? No. The US store is what this reads.

Can I get reviews in German or Chinese? Yes. Set Review language to German, or to Chinese (Simplified) or (Traditional).

Why did my second game get no reviews? maxItems is the total across ids and the first game used it up. Run the games separately.

Is this legal? These are public store pages and public reviews, read through endpoints Steam serves to anyone. Reviews are written by identifiable accounts, so treat that text as personal data and have a reason for keeping it. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the mode, the app ids or query, and the run id. The errorCode on the diagnostic row usually names the problem by itself.