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.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
mode,query,appIds(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export 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 for | When | Price |
|---|---|---|
| Item returned | Charged 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
| Field | What it does | Type |
|---|---|---|
mode | What 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 |
query | Game name to search for in "search" mode, e.g. "portal" or "counter strike". Ignored in app/reviews modes. | string |
appIds | List 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 |
language | Which 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 |
purchaseType | Steam 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 |
maxItems | Maximum 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 |
notionConnector | Optional. 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 |
notionParentId | Optional. 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:
appIdcategoriescreatedAtdevelopersdiscountPctgamesOwnedgenresheaderImageiconisFreemetacriticScorenamenegativeReviewsownerspriceurlExport 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)
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.
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.
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.
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.
Where this tool sits
- Categories
- Media & Entertainment Data
- Platforms
- Steam
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.
| Input | A game name, or a list of numeric app ids |
| Output | One row per app or per review |
| Ceiling | 1,000 rows per run |
| Account needed | None, 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
}
| Field | Default | What it is |
|---|---|---|
mode | search | search, app or reviews. |
query | none | The 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. |
appIds | none | Numeric 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. |
language | english | Reviews 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. |
purchaseType | steam | Reviews 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. |
maxItems | 50 | 1 to 1,000 charged rows. In reviews mode it is the total across every id, not per game. |
notionConnector | none | Optional. 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. |
notionParentId | none | Optional. The Notion data source id to write into. Leave it empty and the pages are created privately in your workspace. |
proxyConfiguration | off | Optional 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"
}
| Mode | What the row carries |
|---|---|
search | appId, name, icon. Three fields, and that is the point of the mode. |
app | appId, name, type, isFree, price, discountPct, developers, publishers, genres, categories, releaseDate, metacriticScore, recommendations, owners, positiveReviews, negativeReviews, shortDescription, headerImage, platforms, url. |
reviews | appId, reviewId, review, votedUp, votesUp, playtimeForeverMin, gamesOwned, createdAt, url, plus Steam's own language for the review when you pick a language other than English. |
| Field | What it is |
|---|---|
price | A formatted US-store string, and the word Free on free games. Not a number, so parse it. |
discountPct | 0 when there is no discount, and also 0 when the store returned no price data at all. |
releaseDate | Steam's own wording, which can be Coming soon or a quarter rather than a date. |
owners, positiveReviews, negativeReviews | Outside estimates. All three come back null when the estimate is unavailable, and the rest of the row is still delivered. |
review | The review text with HTML stripped. Steam's own markup tags such as [spoiler] stay in as literal text. |
playtimeForeverMin | Minutes, 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.
| Code | What it means |
|---|---|
BAD_INPUT | An 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_FOUND | Steam does not serve that id, or it is region locked. That one id fails, the rest continue. |
NO_RESULTS | The search matched nothing, or the game genuinely has no recent reviews in the language and purchase type you asked for. |
RATE_LIMITED | Steam 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
languageset tobrazilianor
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
ownersis 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.
maxItemsis 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 want | Use |
|---|---|
| Steam games, store details and player reviews | This one |
| iPhone and iPad apps and their reviews | App Store Scraper |
| Android apps and their listings | Google Play Apps Scraper |
| Reviews from Google Play | Google 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.