Steam Scraper - Game Details, Stats & Reviews avatar

Steam Scraper - Game Details, Stats & Reviews

Pricing

from $1.94 / 1,000 items

Go to Apify Store
Steam Scraper - Game Details, Stats & Reviews

Steam Scraper - Game Details, Stats & Reviews

Find Steam games by name, then pull store details or recent player reviews by app id. App rows hold the price, discount, genres, developers, publishers, release date, Metacritic score, platforms and an owners estimate, which is a range, not sales. No Steam key. $2.00 per 1,000 rows.

Pricing

from $1.94 / 1,000 items

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a day ago

Last modified

Share

Find Steam games by name, then pull their store details or their recent player reviews: price and discount, genres and categories, developers and publishers, release date, Metacritic score, platforms and an owners estimate, or the review text with its thumbs up or down, helpful votes and the reviewer's playtime.

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 5,000,000 .. 10,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. App rows: price, discount, genres, categories, developers, publishers, release date, Metacritic, platforms, owners and review estimates
Ceiling1,000 rows per run
Account neededNone, and no Steam key
Price$2.00 per 1,000 rows, flat on every plan. The free plan's $5 a month covers about 2,500

🔍 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 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 data you get from each Steam game

What you getField
The app id, name, type and its store pageappId, name, type, url
Price as the US store shows it, and the discountisFree, price, discountPct
Who made it and who published itdevelopers, publishers
Genres and Steam's feature categoriesgenres, categories
Release date and Metacritic scorereleaseDate, metacriticScore
Steam recommendations, and outside estimates of owners and review countsrecommendations, owners, positiveReviews, negativeReviews
Short description, header image and platformsshortDescription, headerImage, platforms
Reviews mode: the text, thumbs, helpful votes, playtime, games owned, datereview, votedUp, votesUp, playtimeForeverMin, gamesOwned, createdAt

▶️ How to scrape Steam

  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 to scrape Steam?

$2.00 per 1,000 rows. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 2,500 rows.

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. Set a maximum cost on the run and it stops when it gets there.

📥 What you give it

{
"mode": "app",
"appIds": ["400", "620"],
"maxItems": 50
}
FieldDefaultWhat it is
modesearchsearch, app or reviews.
querynone, the form starts with portalThe game name, search mode only. An API call has to send its own.
appIdsnone, the form starts with 400 and 620Numeric 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. Review rows have no name, so those pages arrive untitled.
notionParentIdnoneOptional. The Notion data source 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 app-mode row from a run on 1 October 2026, with the categories list and the image URL cut short:

{
"ok": true,
"appId": "620",
"name": "Portal 2",
"type": "game",
"isFree": false,
"price": "$9.99",
"discountPct": 0,
"developers": ["Valve"],
"publishers": ["Valve"],
"genres": ["Action", "Adventure"],
"categories": ["Single-player", "Multi-player", "Co-op", "Online Co-op", "Steam Achievements", "..."],
"releaseDate": "Apr 18, 2011",
"metacriticScore": 95,
"recommendations": 390954,
"owners": "5,000,000 .. 10,000,000",
"positiveReviews": 427835,
"negativeReviews": 5675,
"shortDescription": "The \"Perpetual Testing Initiative\" has been expanded to allow you to design co-op puzzles for you and your friends!",
"headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/620/.../header.jpg",
"platforms": ["windows", "linux"],
"url": "https://store.steampowered.com/app/620"
}

A search row is just appId, name and icon. A review row carries appId, reviewId, review, votedUp, votesUp, playtimeForeverMin, gamesOwned, createdAt and url, plus Steam's own language for the review when you pick a language other than English.

FieldHow to read it
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.
categoriesSteam's own list, and it can name the same feature twice, as it does on this game.
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.

RowHow to spot itBilled
A game, search hit or reviewok: trueyes
A diagnosticok: false and an errorCodeno
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.

💡 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.

From a game name to what its players say, in three runs:

  1. Run search mode with the name in query and copy the appId you want.
  2. Run app mode with it in appIds for the price, the owners estimate and the review totals.
  3. Run reviews mode on the same id, with purchaseType set to all if the game is free to play.

🚧 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.
  • It is not an official Steam tool. Dami's Studio is independent and is not affiliated with or endorsed by Steam or Valve, or by any other company named on this page.

🧭 Which film, TV, music or game scraper do you need?

If you wantUse
IMDb IDs for films, shows and peopleIMDb Search Scraper
Critic and audience scores for a film or showRotten Tomatoes Scraper
TV shows, full episode lists and main castTV Show Scraper
Artists, releases, recordings and labels, with their MBIDsMusicBrainz Scraper
Steam games, store details and player reviewsThis one
Goodreads ratings and rating counts for booksGoodreads Books Scraper
Wikidata Q-ids and claims for the same people and worksWikidata Scraper

❓ Questions people ask

Where do I find a Steam 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 Steam 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.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/steam-scraper. Either way the run happens on your Apify account at the same price.

These are public store pages and public reviews, read the way Steam serves them 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 the legality of web scraping 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.