Epic Games Store Scraper - Game Prices & Discounts avatar

Epic Games Store Scraper - Game Prices & Discounts

Pricing

from $0.70 / 1,000 game scrapeds

Go to Apify Store
Epic Games Store Scraper - Game Prices & Discounts

Epic Games Store Scraper - Game Prices & Discounts

Epic Games Store catalogue with price, list price and discount in any country's currency, one flat row per game, edition, add-on or demo: title, sale end date, release date, seller, developer, genres, platforms, images, URL. Sale-only, free-only, search, category and price sorts.

Pricing

from $0.70 / 1,000 game scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Read the Epic Games Store catalogue for any country and get one flat row per game, edition, add-on, demo or app: current price, list price, discount amount and percent, when the sale ends, release dates, seller, developer, publisher, categories, genres, platforms, store art and the store link. Turn on the sale-only switch and schedule it, and it is an Epic Games Store sale alert; run the same search in several countries and it is a PC game price comparison across countries.

No account, no API key, no login, no browser. One request returns 40 offers.

Input

FieldNotes
countryTwo-letter ISO country (default US). Prices come back in that country's currency: US in USD, DE in EUR, JP in JPY, GB in GBP, BR in BRL. A code Epic does not recognise fails the run with Epic's own message.
localeLanguage of titles and descriptions (default en-US; de, fr, ja, pt-BR ...). Text only: it never changes prices or currency.
keywordsOptional search, as typed into the store search box (witcher). Empty reads the whole catalogue.
categoryall (default; what the store's browse page lists: games, editions, bundles, add-ons, demos, apps), games (games, editions and bundles), base-games (standard editions only).
onlyOnSaleOnly offers Epic currently discounts.
onlyFreeOnly offers that cost nothing right now (free-to-play, demos, free add-ons, 100%-off promotions).
sortnewest-release (default, the store's own order), price-asc, price-desc, title-asc. The price sorts use the list price, before any discount, because that is how Epic sorts.
maxItemsOffers to return (default 100, up to 10,000).
proxyConfigurationApify residential proxy by default. See "How it fetches".

Output

FieldNotes
country_code, localeWhat the run asked for.
offer_id, namespaceEpic's offer id (the same in every country, so it is the key to join countries on) and its catalogue namespace (a game and its add-ons share one).
title, description, urlTitle, short store description, and the https://store.epicgames.com/p/... store page the browse card links to.
categoriesEpic's category paths: games/edition/base, games/edition, addons/durable, games/demo, applications ... This is what tells a base game from an edition, an add-on or a demo.
seller, developer, publisherAs the store shows them.
price, original_price, currencyCurrent price and list price as numbers in currency. Epic sends integer minor units with the currency's decimals (2 for USD, 0 for JPY); these are converted, so 23.99 USD and 2384 JPY.
discount_amount, discount_percent, is_discounted, sale_ends_atThe sale as an amount, as a whole percent of the list price, a flag, and the end of the promotion as an ISO timestamp.
is_freeThe current price is 0.
voucher_discountA voucher Epic applied to the quoted price (0 on everything measured).
price_formatted, original_price_formattedThe prices exactly as the store displays them ($23.99, ¥2,384; Epic shows a free offer as 0).
release_date, pc_release_date, effective_dateISO timestamps as Epic sends them.
is_code_redemption_onlySold only as a redemption code.
genres, platforms, tags, tag_idsGenre names (Action, Indie), platforms (Windows, Mac OS), every named tag including features (Single Player, Achievements), and Epic's raw tag ids.
image_wide_url, image_tall_url, thumbnail_urlStore art. Nothing is downloaded.

Honest nulls

A field Epic did not send is null, never 0 or "":

  • discount_percent is null for an offer whose list price is 0 (a demo, a free-to-play game): a percent of nothing has no meaning. It is 0 for a priced offer that is not on sale, because Epic states a zero discount there.
  • sale_ends_at is null when the offer is not on sale.
  • Every price field is null for an offer Epic sends without a price block (none measured so far; the actor asks only for priced offers, as the store does).
  • genres, platforms and tags are null, not empty, in the rare run where Epic's tag-name list could not be read; tag_ids is still filled then. An empty list means the offer has no tag of that kind (many add-ons have no genre).
  • url is null if Epic gives an offer no page slug (none measured).
  • discount_percent is computed from Epic's discount and list price (Epic sends no percent field) and rounded to a whole number.

Pricing

Pay per event:

  • $0.002 per run (actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing.
  • $0.0007 per offer row written (game-scraped), i.e. $0.70 per 1,000 offers.

How it fetches

The store's browse page is built from a GraphQL query (searchStoreQuery) that the page itself runs; the actor sends that same query, 40 offers per request, with the country as a parameter. Measured on 2026-10-18:

  • The country is a parameter, not the proxy's location. The browse page itself renders the catalogue of whatever country the visitor's address is in: nine residential fetches came back as DE, AL, US, DE, IT, US, BR, US and LC, in EUR, USD and BRL, and a country=US URL parameter was ignored. The query the actor sends answered US in USD, DE in EUR, JP in JPY, GB in GBP and BR in BRL from every address tried. Every row carries the currency Epic priced it in.
  • Residential proxy by default. Cloudflare refused 4 of 4 Apify datacenter fetches of the browse page that day (and 7/10, 6/10 on earlier probes); residential passed 20 of 21 GraphQL requests, the one miss a dropped connection that the actor retries from a fresh address. The GraphQL query answered 8 of 8 datacenter requests too, so a datacenter proxy may work and costs less, but it has been measured once only.
  • Light on bandwidth. About 0.15 MB per page of 40 offers, against about 1.1 MB for the browse page.
  • Self-healing query id. Epic identifies the query by a hash that changes when it redeploys the store. If Epic stops recognising it, the actor reads the current one from the store's own browse page (once per run) and carries on.
  • Result reach. Epic lets one query reach 10,000 offers (it clamps the offset at 9,960), though it reports about 13,400 matching the empty search in the US. The actor logs when it stopped at that point; a search term, a category or the sale filter reaches the rest.
  • The catalogue size differs by country (13,391 offers for the US, 13,253 for JP, 12,058 for DE, 11,845 for BR), so the same query is not the same set everywhere.
  • A 403, 429, 5xx, challenge page or dropped connection is treated as a refusal: the actor rotates to a fresh address and retries. An offer that shows up on two pages is returned and charged once.