# Epic Games Store Scraper: Free Games & Product Data (`recordsdata/epic-games-store-scraper`) Actor

Scrape the Epic Games Store free games feed: current and upcoming giveaways with exact promo start and end dates, original prices and store links for any country, plus product details with developer, publisher, tags and ratings. Export CSV, Excel, JSON, XML. No login or API key.

- **URL**: https://apify.com/recordsdata/epic-games-store-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Games, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner" alt="PunkRecordsData" width="100%" />
</p>

## Epic Games Store Scraper: Free Games & Product Data

> **Epic Games Store Scraper by PunkRecordsData exports the Epic Games Store free games feed: current and upcoming giveaways with exact promo start and end timestamps, original prices and store URLs, for any country and language. It can also fetch product details (developer, publisher, tags, ratings) by slug. No login, no API key. Export CSV, Excel, JSON or XML. Priced at $10 per 1,000 free-game rows, tested live on 2026-10-04.**

The Epic Games Store Scraper reads Epic's own public storefront services, so the promo windows match the store to the second. A run with the default input returned 13 feed entries in the US storefront (this week's free game, the upcoming giveaways and a few catalog entries) in under 4 seconds. It is built for deal sites, Discord and Telegram alert bots, newsletters and anyone tracking which games Epic gives away.

### 🎮 What does the Epic Games Store Scraper do?

Use it when you search for any of these:

- "Epic Games free games this week" with exact end date and original price
- "Epic Games upcoming free games" with the start timestamp of the next giveaway
- Epic Games free games for a specific country (US, GB, MX, ES, BR, DE and more) and language
- Epic Games product page data: developer, publisher, release date, platforms, tags and ratings
- A clean feed of only the games that are 100% free right now, for alert bots

### 📊 What data can you extract from the Epic Games Store?

| Field | Applies to | Description |
|---|---|---|
| `recordType` | all | `free-game` or `product` |
| `title` | all | Game title |
| `slug`, `url` | all | Store slug and full store page URL in your locale |
| `promoStatus` | free-game | `FREE NOW`, `UPCOMING` or `No Active Promo` |
| `promoStart`, `promoEnd` | free-game | Exact ISO timestamps of the promotion window (only when a promotion exists) |
| `isFullyFree` | free-game | `true` when the promotion discount is 100% |
| `originalPrice`, `currentPrice` | free-game | Formatted prices in the storefront currency |
| `offerType`, `seller` | free-game | Offer type (for example BASE\_GAME) and seller name |
| `imageUrl` | free-game | Wide offer image |
| `developer`, `publisher` | product | Attribution from the product page |
| `description`, `tagline` | product | Description text (up to 1,200 characters) and headline |
| `releaseDate`, `platforms`, `tags` | product | Release timestamp, platforms and up to 15 tags |
| `ratingsCount`, `averageRating` | product | Store ratings, when the product has them |
| `logoUrl`, `heroUrl` | product | Logo and hero image |
| `scrapedAt` | all | UTC timestamp of the scrape |

Fields with no value are left out of the row instead of being filled with placeholder text, so a column is never padded with "N/A".

### 🧾 Sample output of the Epic Games free games export

Real row from a cloud run on 2026-10-04 with country `US`, locale `en-US`:

```json
{
  "recordType": "free-game",
  "title": "System Shock 2: 25th Anniversary Remaster",
  "offerType": "BASE_GAME",
  "promoStatus": "FREE NOW",
  "promoStart": "2026-10-01T15:00:00.000Z",
  "promoEnd": "2026-10-08T15:00:00.000Z",
  "isFullyFree": true,
  "originalPrice": "$29.99",
  "currentPrice": "0",
  "seller": "Atari",
  "slug": "system-shock-2-25th-anniversary-remaster-cb94d9",
  "imageUrl": "https://cdn1.epicgames.com/spt-assets/690ff600d5134d9ab12c96862ed5257a/system-shock-2-25th-anniversary-remaster-1e28j.jpg",
  "url": "https://store.epicgames.com/en/p/system-shock-2-25th-anniversary-remaster-cb94d9",
  "scrapedAt": "2026-10-04T05:07:52.974Z"
}
```

Download the dataset as JSON, CSV, Excel or XML from the Output tab.

### 💵 How much does it cost to scrape the Epic Games Store?

The Epic Games Store Scraper uses pay per event pricing. You pay per row saved, and nothing for rows that failed, were not found or came back empty.

| Event | Price per row | Price per 1,000 rows |
|---|---|---|
| Free game row | $0.01 | $10 |
| Product record | $0.015 | $15 |

Prices above are the FREE-plan tier shown on the actor page today; higher Apify plans get lower per-event prices. The 10-row cloud test on 2026-10-04 delivered 10 free-game rows and charged exactly 10 `free-game-record` events ($0.10 at the FREE tier). The platform's own compute cost for that run was under $0.002 (the usage figure can take 15 to 20 minutes to settle). Free users get a 10-row preview per run.

### 🚀 How to scrape the Epic Games Store in 3 steps

1. Open the actor and click **Try for free** (a free Apify account includes monthly credit).
2. Pick a `country` and `locale` (for example `MX` and `es-MX`), and optionally add product slugs.
3. Click **Start**, then download the dataset as CSV, Excel, JSON or XML.

### ⚙️ Epic Games Store Scraper input

| Field | Default | What it does |
|---|---|---|
| `includeFreeGames` | `true` | Scrape the free games feed (current and upcoming giveaways) |
| `country` | `US` | Two-letter storefront country code |
| `locale` | `en-US` | Language for titles and prices (en-US, es-MX, de-DE...) |
| `onlyActivePromotions` | `false` | Keep only games that are 100% free right now |
| `productSlugs` | empty | Product slugs or URLs for full product records |
| `maxItems` | no limit | Total rows to deliver (free games plus products) |

Example input for a Mexico giveaway feed with one product record:

```json
{
  "country": "MX",
  "locale": "es-MX",
  "onlyActivePromotions": false,
  "productSlugs": ["alan-wake-2"],
  "maxItems": 20
}
```

If you only want product details, set `includeFreeGames` to `false`, so the free games feed does not use up your `maxItems` budget.

### 📦 Epic Games Store Scraper output

Each run writes one row per free-game entry and one row per product. The dataset has a ready Overview table (image, title, status, promo dates, price, seller, link). Behavior you can rely on:

- A product slug that does not exist produces one error row (no charge) and the run continues.
- An invalid `country` or `locale` format is rejected before the run starts.
- If Epic returns nothing usable (request failed or unexpected response) and no rows were saved, the run ends as **Failed** with a clear message and charges nothing.
- A genuinely empty result (for example `onlyActivePromotions` with no active giveaway) ends as Succeeded with zero charge.
- When you set a maximum charge per run, the actor stops cleanly at that limit.

### ⚖️ How does this Epic Games Store scraper compare to alternatives?

Prices below were read from the public Apify Store listings on 2026-10-04. Event prices are per result at the lowest-volume tier.

| Actor | Price per result | Notes |
|---|---|---|
| This actor | $0.01 free-game row, $0.015 product | Upcoming giveaways with dates, 100%-free filter, any country and locale, product records in the same actor |
| saswave/epic-games-store-scraper | $0.0015 | Cheaper per item |
| webdata\_labs/epic-games-store-offers-api | $0.001 | Cheaper per item |
| unfenced-group/epic-games-store-scraper | $0.00099 | Cheaper per item, extra countries billed separately |
| moving\_beacon-owner1/epic-games-store-free-games | $0.00999 | Similar price |

We are not the cheapest. If you only need the cheapest raw rows, a lower-priced actor may fit better. What the extra price buys here: an `isFullyFree` flag and an active-promo filter so bots do not post partial discounts, exact promo windows for upcoming giveaways, and no placeholder text in the output. Compare field lists on the other actor pages before choosing, since we did not run them.

### 💼 Use cases for Epic Games Store data

- **Alert bots**: post to Discord or Telegram when a new giveaway starts, using `promoStart` and `promoEnd`.
- **Deal sites**: a free-this-week section that updates itself, with original price crossed out.
- **Newsletters**: weekly digests with the exact end date of each giveaway.
- **Research**: schedule the actor weekly to build a history of which games Epic gives away.
- **Regional pricing**: compare `originalPrice` for the same product across countries.

### 🔌 Run the Epic Games Store Scraper via API, schedule and integrations

Start a run from any language with the Apify API. Replace `YOUR_TOKEN` with your Apify API token:

```bash
curl -X POST "https://api.apify.com/v2/acts/recordsdata~epic-games-store-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"country":"US","locale":"en-US","onlyActivePromotions":true}'
```

Or with the JavaScript client:

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('recordsdata/epic-games-store-scraper').call({ country: 'US' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

Epic rotates the free games on a weekly schedule (the current promotion in the sample above runs Thursday 15:00 UTC to Thursday 15:00 UTC), so a weekly Apify schedule right after the switch keeps your feed current. Connect the dataset to Make, Zapier, n8n, Google Sheets or Slack, or call the actor from AI agents through the Apify MCP server.

### ❓ Frequently asked questions

#### Is it legal to scrape the Epic Games Store?

The actor reads publicly available storefront data (free game promotions and product page content) without logging in. You are responsible for using the data in line with Epic's terms and your local laws. It does not collect personal data.

#### When do Epic free games rotate?

In the data we collected, the current promotion ran from `2026-10-01T15:00:00.000Z` to `2026-10-08T15:00:00.000Z`. Every row carries its own `promoStart` and `promoEnd`, so you do not need to guess.

#### Why did my run return 0 results?

Usual causes: `onlyActivePromotions` is on and no game is fully free at that moment, or the product slugs do not exist (each one gives a free error row). If Epic returned nothing usable at all, the run fails instead of finishing empty, and nothing is charged.

#### Why are some rows marked "No Active Promo"?

The Epic feed also lists catalog entries that currently have no promotion. They keep `promoStatus: "No Active Promo"` and no promo dates. Turn on `onlyActivePromotions` to keep only the games that are free right now.

#### Do prices come in my currency?

Set `country` and `locale` and `originalPrice` is formatted for that storefront, for example `$29.99` for US.

#### Does it need a login or API key?

No. Only your Apify account is needed.

#### How many rows can I get?

Free users get a 10-row preview per run. Paid plans can set `maxItems` up to 1,000,000, but the free games feed itself is small (13 entries in our US test).

#### How do I get product details like developer and ratings?

Add slugs (for example `fortnite`) or full store URLs to `productSlugs`. Each valid slug returns one product record.

### 🧩 Want more game data? Other PunkRecordsData scrapers

- [GOG Games Scraper](https://apify.com/RecordsData/gog-games-scraper): catalog and prices from GOG.
- [Steam Charts Scraper](https://apify.com/RecordsData/steam-charts-scraper): player counts and charts for Steam games.
- [Steam Reviews Scraper](https://apify.com/RecordsData/steam-reviews-scraper): player reviews for any Steam app.

### 📬 Support

Found a bug or missing field? Open the **Issues** tab on this actor's page, or write to contact.punkrecordsdata@gmail.com. Custom solutions available on request.

Last updated: 2026-10-03

# Actor input Schema

## `includeFreeGames` (type: `boolean`):

Scrape Epic's free games feed: this week's and upcoming giveaways with exact promo start and end dates, original price and store URL. Keep enabled for the weekly free-game list.

## `country` (type: `string`):

Two-letter storefront country code that sets prices and availability, for example US, GB, MX, ES, BR or DE. Invalid codes stop the run without charge.

## `locale` (type: `string`):

Language locale for titles and prices, for example en-US, es-ES, es-MX or de-DE. Use the language of the country you chose.

## `onlyActivePromotions` (type: `boolean`):

Keep only games that are 100% free right now and drop upcoming giveaways and entries without a promotion. Useful for alert bots.

## `productSlugs` (type: `array`):

Epic Games Store product slugs or full product URLs to fetch full records (developer, publisher, tags, ratings), for example fortnite or https://store.epicgames.com/en/p/alan-wake-2. Leave empty to skip product details.

## `maxItems` (type: `integer`):

Maximum number of rows to deliver in total (free games plus products). Free users are limited to 10 rows; paid users can set up to 1,000,000. Leave empty for no limit.

## Actor input object example

```json
{
  "includeFreeGames": true,
  "country": "US",
  "locale": "en-US",
  "onlyActivePromotions": false,
  "productSlugs": [
    "fortnite"
  ],
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "productSlugs": [
        "fortnite"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/epic-games-store-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "productSlugs": ["fortnite"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/epic-games-store-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "productSlugs": [
    "fortnite"
  ],
  "maxItems": 10
}' |
apify call recordsdata/epic-games-store-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/epic-games-store-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tgYByhFfsQUFGjAio/builds/QkEklbWd0mq0aXmdx/openapi.json
