Steam Store Scraper avatar

Steam Store Scraper

Pricing

from $0.79 / 1,000 game (http api)s

Go to Apify Store
Steam Store Scraper

Steam Store Scraper

Scrape Steam games: metadata, multi-country prices, reviews and more.

Pricing

from $0.79 / 1,000 game (http api)s

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

2

Monthly active users

2.8 hours

Issues response

20 days ago

Last modified

Categories

Features

Limited permissions

Share

Steam Store Scraper

Extract games from store.steampowered.com at scale, in a clean, consistent structure ready for price monitoring, market research, catalogue analysis and resale tooling. No API key required.


Why this scraper?

🎯 Built for store.steampowered.com

A dedicated global scraper tuned for store.steampowered.com — its categories, price formats and currency (USD), not a generic tool pointed at it.

📄 Full item content

Complete description and title for every record, with a direct link back to the source.


Input parameters

ParameterTypeDefaultDescription
searchTermsarray["elden ring"]Keywords to search the Steam store (e.g. "elden ring", "roguelike"). Each term is searched and the matching games are scraped.
browseSectionstring"none"Instead of (or in addition to) keywords, pull games from a Steam storefront section.
startUrlsarray(empty)Direct Steam app URLs (e.g. https://store.steampowered.com/app/1245620/). App IDs are extracted automatically.
appIdsarray(empty)Steam numeric app IDs to scrape directly (e.g. 1245620).
maxResultsinteger5Maximum number of games to scrape.
countrystring"us"Storefront whose local currency prices are returned. Used when no multi-country selection is made.
countriesarray(empty)Select several storefronts to get each game's price in every chosen currency in a single run. The first selected country is the primary store.
allCountriesbooleanfalseFetch every supported storefront's price for each game in one run (44 currencies). Overrides the country selections.
languagestring"en"Language for game name, description and supported-languages text.
includeReviewsbooleantrueAdd aggregate review score, sentiment label, total/positive/negative counts and positive %.
includeDescriptionbooleantrueAdd short + full description as HTML, plain text and clean Markdown (LLM-ready).
includeMediabooleantrueAdd screenshots and trailer/video URLs.
includeSteamSpybooleanfalseAdd owner estimate, concurrent players (CCU), average playtime and community tags from SteamSpy.
platformsarray(empty)Keep only games supporting any selected OS.
priceFilterstring"all"Keep only games matching this price status.
minPriceinteger(empty)Minimum price (in the primary currency's major units) based on the lowest selected-country price.
maxPriceinteger(empty)Maximum price (in the primary currency's major units) based on the lowest selected-country price.
minMetacriticinteger(empty)Keep only games with a Metacritic score at or above this value. Games without a score are kept.
minReviewScoreinteger(empty)Steam review score band (0=none … 9=Overwhelmingly Positive). Requires reviews enabled.
minPositivePercentinteger(empty)Keep only games whose positive review share is at or above this percentage. Requires reviews enabled.
genresarray(empty)Keep only games matching any of these genres (substring match, case-insensitive).
releasedAfterstring(empty)Keep only games released on/after this date (YYYY-MM-DD). Undated games are kept.
releasedBeforestring(empty)Keep only games released on/before this date (YYYY-MM-DD). Undated games are kept.

Output schema

Every field below is present on every record. Fields the source does not publish for a given item are returned as null rather than omitted.

FieldTypeDescription
appIdnumberSteam app ID
namestringGame title
typestringgame, dlc, demo, etc.
urlstringSteam store page
primaryCountrystringPrimary country.
isFreebooleanFree-to-play
comingSoonbooleanUnreleased
releaseDatestringRelease date
requiredAgenumberMinimum age
developersarrayDevelopers.
publishersarrayPublishers.
genresarrayFilter: genres
categoriesarrayCategories.
platformsarraywindows / mac / linux
controllerSupportstringController level
currencystringPrimary-country currency
initialPricenumberInitial price.
finalPricenumberFinal price.
discountPercentnumberDiscount on primary store
isOnSalebooleanOn sale in primary store
priceUnavailablebooleanTrue when a paid game exposes no standalone Steam price (edition-only listings)
pricesarrayPer-country price blocks
priceByCountry.usnumberUs.
countriesPricednumberHow many storefronts priced
isOnSaleAnywherebooleanOn sale in any selected store
lowestPriceValuenumberCheapest selected-store price
metacriticScorestringMetacritic score
metacriticUrlstringMetacritic url.
recommendationsTotalnumberSteam recommendations
ageRatingsarrayPer-board ratings (ESRB, PEGI…)
headerImagestringHeader image.
capsuleImagestringCapsule image.
backgroundstringBackground.
websitestringOfficial site
supportedLanguagesRawstringSupported languages
supportedLanguagesarrayParsed clean list of supported languages
dlcCountnumberDlc count.
dlcAppIdsarrayDlc app ids.
fullgamestringParent game (for DLC)
scrapedAtstringISO timestamp
reviewScorenumberSteam review band from 0 (fewer than 10 reviews) to 9 (Overwhelmingly Positive), derived from the lifetime totals below using Steam's published thresholds.
reviewScoreDescstringLabel for the band, e.g. "Very Positive", "Mixed", or "7 user reviews" below 10 reviews.
totalReviewsnumberLifetime user reviews across all languages.
totalPositivenumberLifetime recommended reviews, all languages.
totalNegativenumberLifetime not-recommended reviews, all languages.
positivePercentnumberShare of positive reviews, one decimal.
shortDescriptionstringShort description.
descriptionHtmlstringFull item description in HTML.
descriptionTextstringDescription text.
descriptionMarkdownstringDescription markdown.
screenshotsarrayScreenshots.
moviesarrayMovies.

Example record

{
"appId": 4704690,
"name": "MECCHA CHAMELEON",
"type": "game",
"url": "https://store.steampowered.com/app/4704690/",
"primaryCountry": "us",
"isFree": false,
"comingSoon": false,
"releaseDate": "Jun 9, 2026",
"requiredAge": 0,
"developers": [
"lemorion_1224"
],
"publishers": [
"lemorion_1224"
],
"genres": [
"Casual"
],
"categories": [
"Multi-player",
"PvP",
"Online PvP",
"Camera Comfort"
],
"platforms": [
"windows"
],
"controllerSupport": "none",
"currency": "USD",
"initialPrice": 5.99,
"finalPrice": 5.99,
"discountPercent": 0,
"isOnSale": false,
"priceUnavailable": false,
"prices": [
{
"country": "us",
"currency": "USD",
"initialPrice": 5.99,
"finalPrice": 5.99,
"discountPercent": 0,
"isOnSale": false,
"finalFormatted": "$5.99"
}
],
"priceByCountry": {
"us": 5.99
},
"countriesPriced": 1,
"isOnSaleAnywhere": false,
"lowestPriceValue": 5.99,
"metacriticScore": null,
"metacriticUrl": null,
"recommendationsTotal": 21756,
"ageRatings": [
{
"board": "dejus",
"rating": "14",
"descriptors": null
},
{
"board": "steam_germany",
"rating": "12",
"descriptors": null
},
{
"board": "igrs",
"rating": "18",
"descriptors": "Interaksi Daring"
}
],
"headerImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4704690/163e2a742e5fb8e1f5d1e3a890da98f04ab809d4/header.jpg?t=1781108224",
"capsuleImage": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4704690/18d14b8bd834e30a6a25df5ccd7f0a6e644f1577/capsule_231x87.jpg?t=1781108224",
"background": "https://store.akamai.steamstatic.com/images/storepagebackground/app/4704690?t=1781108224",
"website": null,
"supportedLanguagesRaw": "English, Japanese, Spanish - Spain, Simplified Chinese, Korean, French, Italian, German, Arabic, Portuguese - Brazil, Russian, Traditional Chinese",
"supportedLanguages": [
"English",
"Japanese",
"Spanish - Spain",
"Simplified Chinese"
],
"dlcCount": 0,
"dlcAppIds": [],
"fullgame": null,
"scrapedAt": "2026-06-24T16:34:46.375Z",
"reviewScore": 8,
"reviewScoreDesc": "Very Positive",
"totalReviews": 24496,
"totalPositive": 20401,
"totalNegative": 4095,
"positivePercent": 83.3,
"shortDescription": "Paint yourself to blend in! \"Meccha Chameleon\" is a new-sensation hide-and-seek game where you paint your white body to mimic the stage. Spot, pose, and \"artistic skill\" are keys to survival. Deceive …",
"descriptionHtml": "<p class=\"bb_paragraph\" >Paint your own body! Blend in like a chameleon in this hide-and-seek game!</p><h2 class=\"bb_tag\" ><strong>yeah! Mechcha &quot;Hide and Seek&quot;</strong></h2><p class=\"bb_par …",
"descriptionText": "Paint your own body! Blend in like a chameleon in this hide-and-seek game!\nyeah! Mechcha \"Hide and Seek\"\n The rules are simple. Split into the Seeker team and the Hider team to play hide-and-seek. The …",
"descriptionMarkdown": "Paint your own body! Blend in like a chameleon in this hide-and-seek game!\n\n## **yeah! Mechcha \"Hide and Seek\"**\n The rules are simple. Split into the Seeker team and the Hider team to play hide-and-s …",
"screenshots": [
"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4704690/6c0a47cc2fba1b160901d1553637a764198bdc98/ss_6 …",
"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4704690/0383a711ed93bf8edd848df4b63b331fc44f3ad5/ss_0 …",
"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4704690/51b0a906d1767b1b5abde623350dec64c6877c93/ss_5 …",
"https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/4704690/0a8a562016b13a349349e685f7a4d5a6cbccef3e/ss_0 …"
],
"movies": [
{
"name": "TR2",
"thumbnail": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/257336777/50fa43f687913f0d5295148f5b8f2892ec3d8b08/mo …",
"mp4": null,
"webm": null
}
]
}

Examples

Search for strategy:

{
"searchTerms": [
"strategy"
],
"maxResults": 100
}

Cap the price:

{
"searchTerms": [
"strategy"
],
"maxResults": 100,
"maxPrice": 39.99
}

Scrape a specific search URL:

{
"startUrls": [
{
"url": "https://store.steampowered.com/app/1245620/ELDEN_RING/"
}
],
"maxResults": 200
}

Daily monitoring (run on a schedule):

{
"searchTerms": [
"strategy"
],
"maxResults": 500
}

Schedule this input to run once a day in the Apify Scheduler to track prices, stock and new items over time.


Call this actor over HTTP

Besides normal runs, this actor exposes a REST API that answers each request in a few seconds with JSON. There is no run to start and no dataset to fetch afterwards, which suits apps, automations and AI agents that need one answer at a time. The full interactive reference is on the Endpoints tab.

EndpointReturnsBilled as
GET /app?id=…Full record for one game, by App ID or store URLOne game
GET /apps?ids=…Records for up to 50 games by App IDPer game returned
GET /search?query=…Games matching a keyword (up to 50)Per game returned
GET /browse?section=…Top sellers, new releases, specials or coming soonPer game returned

Every endpoint accepts country, countries (up to 5 extra stores), language, reviews, description, media and steamspy, with the same meaning as the input fields above.

Authenticate with your Apify API token in the Authorization header:

curl -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
"https://unfenced-group--steam-store-scraper.apify.actor/app?id=1245620"

Every response has the shape { "count": N, "items": [...] }, with the same fields as the dataset records above. Errors, App IDs without a store page and empty searches return no data and are never billed. POST with a JSON body works the same as GET.


💰 Pricing

$0.99 per 1,000 results — you only pay for successfully retrieved games. Failed retries are never charged.

ResultsCost
100~$0.10
1,000~$0.99
10,000~$9.9
100,000~$99

Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Subscription tiers lower the rate further, down to $0.69 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.


Performance

Run sizeTypical time (reviews off)Typical time (reviews on)
100 gamesabout 1 minuteabout 2–3 minutes
500 gamesabout 5–6 minutesabout 11–13 minutes
2,000 gamesabout 20–25 minutesabout 45–50 minutes

Each extra country in countries adds one price request per game. Up to 4 concurrent runs of 500 App IDs each complete in the same time as a single run.


Large App ID lists and missing games

Every run writes a FAILED_IDS record to its key-value store (Storage tab) listing each requested App ID that was not saved, with the reason:

GroupMeaningWhat to do
notAvailableSteam has no store page for this ID in the chosen country: removed, hidden, region-locked, or not a valid app ID.Nothing; Steam has no data to return. Try another country if the game is region-locked.
failedSteam did not give a usable answer after repeated retries.Resubmit these IDs in a new run.
notAttemptedThe run reached its timeout before these IDs were processed.Resubmit, or raise the run timeout.

The run's status message and log summary show the same counts. For large collections, batches of 500 App IDs and up to 4 concurrent runs work well. The default run timeout of 60 minutes covers a 500-ID batch with reviews on and one or two countries; for many countries per game, use smaller batches or a longer timeout. If the timeout is reached, the run stops cleanly before the timeout and lists the remaining IDs under notAttempted.


Known limitations

  • Some games have no store page in a given country (removed, hidden or region-locked). These are listed under notAvailable in FAILED_IDS, never charged.
  • Age ratings and content descriptors are only present when the publisher has submitted them to Steam for that region; expect an empty ageRatings array on many smaller titles.
  • Prices change constantly; records reflect the moment of scraping.
  • Keyword search is bounded by Steam's own search paging (about 1,000 results per term).

Technical details

  • Source: store.steampowered.com
  • Coverage: any public Steam app by App ID, URL, keyword or store section
  • Retry: automatic retry with backoff that waits out Steam's rate limits; unresolved IDs are retried in a second pass and reported in FAILED_IDS

Rate this actor

If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.


Need a custom scraper?

Unfenced Group builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl