# Economic Calendar Scraper: Macro Events, CPI, Fed, NFP (`scrapers_lat/economic-calendar-scraper`) Actor

Scrape scheduled macro economic events (Fed, CPI, NFP, GDP, PMI) with actual, forecast, previous, an impact label and a surprise-vs-forecast delta. Filter by date range, country and impact. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/economic-calendar-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $11.34 / 1,000 economic events

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![Economic Calendar Scraper: Macro Events, CPI, Fed, NFP](https://scrapers.lat/banners/economic-calendar-scraper.png)](https://console.apify.com/actors/i7u7BI1hziHTZOVaE/input)

## Economic Calendar Scraper: Macro Events, CPI, Fed, NFP

Here is one real result, with every field the actor returns:

```json
{
  "eventDate": "2026-08-18",
  "time": "08:30 GMT",
  "timeGmt": "08:30",
  "country": "United States",
  "eventName": "NY Empire State Manufacturing Index",
  "impact": "Medium",
  "actual": "20.60",
  "forecast": "10.60",
  "previous": "15.60",
  "actualValue": 20.6,
  "forecastValue": 10.6,
  "previousValue": 15.6,
  "unit": null,
  "surpriseVsForecast": 10,
  "surpriseDirection": "above",
  "description": "The Empire State Manufacturing Index rates the relative level of general business conditions in New York state. A level above 0.0 indicates improving conditions, below indicates worsening conditions. A higher than expected reading should be taken as positive/bullish for the USD, while a lower than expected reading should be taken as negative/bearish for the USD.",
  "aiMarketImpact": null,
  "aiAffectedAssets": null,
  "aiWhatToWatch": null,
  "aiHistoricalReaction": null,
  "aiDisclaimer": null,
  "source": "nasdaq.com",
  "observedAt": "2026-08-23T12:38:30.596Z",
  "error": null
}
```

The most complete free macro economic calendar scraper available. It returns every field the source exposes for each scheduled release (country, GMT time, actual, forecast, previous, description), plus derived fields you would otherwise compute yourself (an impact label and a surprise-vs-forecast delta), and gives you a multi-day range, a country filter and an impact filter to target exactly the events you need.

**📥 [Input](https://apify.com/scrapers_lat/economic-calendar-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/economic-calendar-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/economic-calendar-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/economic-calendar-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Global%20macro-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Use cases](#use-cases)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [How we compare](#how-we-compare)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing](#billing)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor pulls the scheduled macroeconomic release calendar for each day in the date range you pass, normalizes every event into one flat record, and writes it to the run dataset. Each record carries the country, the release time in GMT, the event name (for example Core CPI, Non-Farm Payrolls, GDP Growth Rate, FOMC rate decision, PMI), and the actual, forecast (consensus) and previous readings as published.

On top of the raw values it adds two derived fields so you do not have to post-process:

- `impact`: a High, Medium or Low importance label derived from the event name. High covers the market movers (CPI, NFP, FOMC and rate decisions, GDP, PPI, retail sales, ISM/PMI, jobless claims).
- `surpriseVsForecast`: the actual minus the forecast when both are numeric and share a unit, plus a `surpriseDirection` of above, below or inline.

An optional AI add-on attaches a market-impact note, the assets most sensitive to the release, what to watch, the usual reaction to a beat versus a miss, and a disclaimer.

Coverage matches the source calendar, which spans major economies (United States, Euro Zone, United Kingdom, Germany, Japan, China, Australia, and more) for recent and upcoming dates.

### Use cases

- Build a daily macro briefing: pull today's High-impact United States events (CPI, NFP, Fed) into a dashboard or Slack.
- Backtest and event studies: pull a date range and read `surpriseVsForecast` to relate releases to market moves.
- Trading apps and bots: schedule the actor each morning and surface the upcoming calendar with impact ratings.
- Research and newsletters: filter by country and impact to summarize the week ahead.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 upcoming United States macro events for today.

```json
{
  "countries": ["United States"],
  "maxResults": 10
}
```

Every input field is optional. With an empty input the actor returns today's global calendar. Set `dateFrom` and `dateTo` for a range, `impactMin` to keep only the important releases, and `aiEventImpact` to add the AI layer.

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `dateFrom` | string | no | today | Start date `YYYY-MM-DD`. The actor loops each day in the range (capped at 31 days). |
| `dateTo` | string | no | `dateFrom` | End date `YYYY-MM-DD`, inclusive. Keep the range under 31 days. |
| `countries` | string\[] | no | (all) | Only keep events for these countries, for example `United States`, `Euro Zone`, `United Kingdom`, `Germany`, `Japan`, `China`. Case-insensitive, matched against the source country label. |
| `impactMin` | enum | no | (all) | Keep events at or above this importance: `Low` (all), `Medium`, or `High` (market movers only). |
| `aiEventImpact` | boolean | no | `false` | Paid add-on. Add an AI market-impact note, affected assets, what to watch, historical reaction and a disclaimer per event. Charged only when a usable analysis is returned. Disabled on free plans. |
| `maxResults` | integer | no | `10` | Maximum event records to collect across the run. Free Apify plans are capped at 10 per run. |

### Output reference

One dataset item per economic event. Types are `string`, `number`, `string[]`, or `null` when the source value is absent.

| Field | Type | Description |
|---|---|---|
| `eventDate` | string | ISO date the event is scheduled for (`YYYY-MM-DD`). |
| `time` | string | Scheduled release time with note, for example `08:30 GMT`. |
| `timeGmt` | string | Raw release time in GMT, for example `08:30`. |
| `country` | string | Country or region the release covers. |
| `eventName` | string | Economic release name, for example `Core CPI`, `Non-Farm Payrolls`, `GDP Growth Rate`. |
| `impact` | string | Derived importance: `High`, `Medium` or `Low`. |
| `actual` | string | Actual reported value as published, for example `2.6%`, `4.405M`. `null` if not yet released. |
| `forecast` | string | Consensus forecast value as published. `null` when no consensus is provided. |
| `previous` | string | Previous period value as published. |
| `actualValue` | number | `actual` parsed to a plain number (percent kept as-is, K/M/B/T expanded). |
| `forecastValue` | number | `forecast` parsed to a plain number. |
| `previousValue` | number | `previous` parsed to a plain number. |
| `unit` | string | Detected unit of the values: `%`, `K`, `M`, `B`, `T`, or `null` for a plain index. |
| `surpriseVsForecast` | number | `actual` minus `forecast` when both are numeric and share a unit. Positive means a beat. |
| `surpriseDirection` | string | `above`, `below` or `inline` relative to forecast. |
| `description` | string | Plain-text description of what the indicator measures and how it typically moves markets. |
| `aiMarketImpact` | string | AI note on how the release typically moves markets (AI add-on). |
| `aiAffectedAssets` | string\[] | AI list of the assets or currencies most sensitive to the release (AI add-on). |
| `aiWhatToWatch` | string | AI note on what a trader should watch around the release (AI add-on). |
| `aiHistoricalReaction` | string | AI note on the usual reaction to a beat versus a miss (AI add-on). |
| `aiDisclaimer` | string | AI risk disclaimer (AI add-on). |
| `source` | string | Data source. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | `null` on success. On a failed run, a single item with a populated `error` field is written instead. |

### Example output record

Real record from a live run with `aiEventImpact` on (`{"countries":["United States"],"impactMin":"Medium","aiEventImpact":true}`):

```json
{
  "eventDate": "2026-08-20",
  "time": "10:30 GMT",
  "timeGmt": "10:30",
  "country": "United States",
  "eventName": "Crude Oil Inventories",
  "impact": "Medium",
  "actual": "4.405M",
  "forecast": "0.200M",
  "previous": "17.423M",
  "actualValue": 4405000,
  "forecastValue": 200000,
  "previousValue": 17423000,
  "unit": "M",
  "surpriseVsForecast": 4205000,
  "surpriseDirection": "above",
  "description": "Crude Oil Inventories measures the weekly change in the number of barrels of commercial crude oil held by US firms. The level of inventories influences the price of petroleum products, which can affect inflation.",
  "aiMarketImpact": "This release typically causes fluctuations in oil prices and related assets.",
  "aiAffectedAssets": ["WTI Crude Oil", "USO", "XLE", "SPY", "CAD"],
  "aiWhatToWatch": "Traders should watch for changes in oil prices and market sentiment following the release.",
  "aiHistoricalReaction": "A significant beat usually leads to a rise in oil prices, while a miss may cause a decline.",
  "aiDisclaimer": "Trading involves risk and may not be suitable for all investors.",
  "source": "nasdaq.com",
  "observedAt": "2026-08-23T12:41:05.001Z",
  "error": null
}
```

### How we compare

Us versus common economic-calendar sources:

| Feature | This actor | Trading Economics API | Investing.com wrappers | ForexFactory scrapers |
|---|---|---|---|---|
| Actual / forecast / previous | Yes | Yes | Yes | Yes (actual sometimes null) |
| Impact / importance label | Yes (High/Medium/Low, derived) | Yes (source rating) | Yes (source rating) | Yes (source rating) |
| `surpriseVsForecast` delta | Yes, computed field | No (compute yourself) | No | No |
| Event description | Yes | Yes | No | Sometimes |
| Multi-day date range | Yes | Yes | Yes | Yes (some cap ~30d) |
| Country filter | Yes | Yes | Yes | Yes |
| Minimum-impact filter | Yes | Via importance | Yes | Yes |
| Optional AI event-impact | Yes | No | No | No |
| API key required | No | Yes | No | No |
| Billing | Pay per result | Subscription + credits | Per result | Per result |

Why choose this:

- Surprise is built in. We ship a `surpriseVsForecast` delta; the others make you compute it.
- Optional AI event-impact layer that no other calendar actor offers.
- No API key and no subscription. Pay per result on Apify.
- One clean flat schema across the whole macro set (Fed, CPI, NFP, GDP, PMI) with GMT time, description and surprise.
- Multi-day range plus country and minimum-impact filters in a single run, no browser or self-hosting.

Where paid providers still beat us, honestly: Trading Economics offers more countries, far deeper multi-year history, and importance ratings that come directly from the source with formal SLAs. Our impact label is a keyword heuristic and may misclassify edge cases, and our history depth is limited to what the source calendar exposes. Investing.com and ForexFactory importance ratings are editorially curated at the source.

### Run via API and CLI

Start a run and read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~economic-calendar-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"dateFrom":"2026-08-17","dateTo":"2026-08-21","impactMin":"High","maxResults":25}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~economic-calendar-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"countries":["United States"],"maxResults":50}'
```

Apify CLI:

```bash
apify call scrapers_lat/economic-calendar-scraper \
  --input '{"countries":["Euro Zone"],"impactMin":"High"}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object.

### Billing

- **Pay per result.** You are charged per economic event returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/economic-calendar-scraper/pricing) for the current per-result price.
- **Optional add-on.** `aiEventImpact` charges once per event only when the AI returns a usable analysis. It is off by default and disabled on free plans.
- **No charge on failure.** If a run errors or a day has no events, nothing is charged for those. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further results.
- **Free Apify plans** are capped at 10 records per run. Upgrade for higher `maxResults`.

### FAQ and troubleshooting

**A run returned 0 records. Why?**
No events matched. Weekends and holidays have few or no releases, a far-future date may not be populated yet, or your `countries` / `impactMin` filters excluded everything. Zero-result runs are not charged.

**Why is `actual` null for an upcoming event?**
The release has not happened yet. Forecast and previous are usually present ahead of time; actual fills in at release time.

**How is `impact` determined?**
It is derived from the event name. High matches known market movers (CPI, NFP, FOMC and rate decisions, GDP, PPI, retail sales, ISM/PMI, jobless claims); minor items such as bill auctions and mortgage indices are Low; everything else is Medium. It is a heuristic, not a source-provided rating.

**How is `surpriseVsForecast` computed?**
It is `actualValue` minus `forecastValue` when both parse to numbers and share a unit. If there is no consensus or the units differ, it is `null`.

**Which countries are covered?**
Whatever the source calendar lists for the dates you request, which spans the major economies. Use `countries` to filter. For the widest country set and deep history, a paid provider such as Trading Economics will cover more.

**Is this an official Fed, BLS or exchange tool?**
No. This actor is independent and not affiliated with any government agency, central bank or exchange. It reads publicly available calendar data.

### Related scrapers

- [Stock Corporate Events Calendar Scraper](https://apify.com/scrapers_lat/stock-corporate-events-calendar-scraper): earnings, dividends, IPOs and stock splits.
- [FRED Economic Data Scraper](https://apify.com/scrapers_lat/fred-economic-data-scraper): US Federal Reserve economic time series.
- [World Bank Indicators Scraper](https://apify.com/scrapers_lat/world-bank-indicators-scraper): global development indicators by country.
- [SEC EDGAR Company Filings Scraper](https://apify.com/scrapers_lat/sec-edgar-filings-scraper): SEC filings by ticker or CIK.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with any government agency, central bank or exchange. Accesses only publicly available economic calendar data.

# Actor input Schema

## `dateFrom` (type: `string`):

Start date (YYYY-MM-DD). Defaults to the day the run starts. The actor loops each day in the range (capped at 31 days).

## `dateTo` (type: `string`):

End date (YYYY-MM-DD), inclusive. Defaults to the same day as Date from. Keep the range under 31 days.

## `countries` (type: `array`):

Optional. Only keep events for these countries, e.g. United States, Euro Zone, United Kingdom, Germany, Japan, China. Case-insensitive, matched exactly against the source country label, applied client-side. Leave empty to return every country.

## `impactMin` (type: `string`):

Optional. Only keep events at or above this importance. High covers market movers (CPI, NFP, FOMC, GDP, rate decisions); Medium adds other scheduled indicators; Low keeps everything. Impact is derived from the event name.

## `aiEventImpact` (type: `boolean`):

Use AI to add a market-impact note, the most affected assets, what to watch, the usual reaction to a beat vs a miss, and a disclaimer, per event. Charged only when a usable analysis is returned. Disabled on free plans.

## `maxResults` (type: `integer`):

Maximum number of economic-event records to collect across the whole run. Free Apify plans are capped at 10 per run.

## Actor input object example

```json
{
  "countries": [
    "United States"
  ],
  "aiEventImpact": false,
  "maxResults": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "countries": [
        "United States"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/economic-calendar-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 = {
    "countries": ["United States"],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/economic-calendar-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 '{
  "countries": [
    "United States"
  ],
  "maxResults": 10
}' |
apify call scrapers_lat/economic-calendar-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/economic-calendar-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/i7u7BI1hziHTZOVaE/builds/knKa4ylUfGBWTThWE/openapi.json
