# Economic Calendar API  CPI, GDP, Jobs, Fed & ECB (`glasswing/economic-calendar-scraper`) Actor

Economic calendar from government agency and central bank calendars: US jobs, CPI, GDP and PCE, FOMC and ECB rate decisions, UK, Canada and Australia data. UTC release times, currency, impact, reference period; filter by dates, currency, impact.

- **URL**: https://apify.com/glasswing/economic-calendar-scraper.md
- **Developed by:** [Raffy](https://apify.com/glasswing) (community)
- **Categories:** Developer tools, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 results

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

### What does Economic Calendar API do?

Economic Calendar API gives you an **economic calendar as clean rows**: the release dates and times of the macro events that move markets, such as US CPI, the jobs report (Employment Situation), GDP, PCE, retail sales, FOMC and ECB rate decisions, UK CPI and labour market data, Canadian CPI and Australian labour force figures. Every event has its **date, local time and UTC time**, country, **currency**, an **impact level** (low, medium, high), the reference period and a link to the agency's page.

The data comes **only from the public calendars of the statistics agencies and central banks** that publish it: the U.S. Bureau of Labor Statistics, the U.S. Bureau of Economic Analysis, the Federal Reserve, the UK Office for National Statistics, the European Central Bank, Statistics Canada and the Australian Bureau of Statistics. Their calendars are public and openly licensed, so the rows are safe to store, chart and feed into your own products, with the source and licence notice on every row.

It works as an **economic calendar API alternative** for trading bots, dashboards, newsletters and research notebooks: no API key, no account, no browser. A run over the next two weeks takes under 10 seconds.

### Use cases for this economic calendar scraper

- **Trading and risk.** Pause a bot, widen stops or flatten positions before high-impact USD, GBP, EUR, CAD or AUD releases.
- **Market dashboards and newsletters.** Show "this week's key releases" with exact UTC times, refreshed on a schedule.
- **Research and backtests.** Pull past release dates (BLS, BEA, FOMC, ONS, ECB) to line up price moves with the release instant.
- **Calendars and alerts.** Push events to Google Calendar, Slack or Telegram through Make, n8n or Zapier.
- **AI agents.** Answer "when is the next CPI release?" from fresh, sourced rows.

### What data you get for every event

| Field | Type | Description |
|---|---|---|
| `eventTitle` | string | Short event name, e.g. `Consumer Price Index`, `FOMC Interest Rate Decision` |
| `referencePeriod` | string | Period the release covers, e.g. `September 2026` |
| `fullTitle` | string | Title exactly as the agency lists it |
| `date` | string | Event date in the source's local time zone, `YYYY-MM-DD` |
| `time` | string | Local clock time `HH:MM`, when the source publishes one |
| `timezone` | string | Time zone of the source, e.g. `America/New_York` |
| `dateTimeUtc` | string | Release instant in UTC (ISO 8601), when a time is published |
| `allDay` | boolean | `true` when the source gives a date but no time (central bank meetings) |
| `country` | string | `US`, `GB`, `EU` (euro area), `CA`, `AU` |
| `countryName` | string | Country or area name |
| `currency` | string | Currency the event affects: `USD`, `GBP`, `EUR`, `CAD`, `AUD` |
| `impact` | string | `low`, `medium` or `high` (see "How impact is set" below) |
| `eventType` | string | `data_release` or `central_bank` |
| `source` | string | Publishing agency |
| `sourceKey` | string | `bls`, `bea`, `fomc`, `ons`, `ecb`, `statcan`, `abs` |
| `dateConfirmed` | boolean | `false` when the agency marks the date as provisional (ONS) |
| `releaseKind` | string | The agency's own label, when given (e.g. `press`, `First release`, `published`) |
| `notes` | string | Extra context, e.g. FOMC meetings with a Summary of Economic Projections |
| `attribution` | string | Source and licence notice for the row |
| `eventId` | string | Stable id (source, date and title), handy for de-duplication across runs |
| `url` | string | The agency's page for the release, or the calendar page it was listed on |
| `status` | string | `ok`, `not_found` or `error` (see below) |
| `error` | string | Reason when `status` is not `ok` |
| `scrapedAt` | string | ISO 8601 time of extraction |

**No consensus forecasts, previous or actual values.** Forecasts are produced by private survey providers and are not published by the agencies; this Actor gives you the agencies' own schedule, not the numbers.

#### Coverage by source

| `sourceKey` | Agency | Currency | Main events | Window it can return | Times |
|---|---|---|---|---|---|
| `bls` | U.S. Bureau of Labor Statistics | USD | Employment Situation (jobs report), CPI, PPI, JOLTS, Employment Cost Index, import prices | Current and past years, month by month | Yes, ET |
| `bea` | U.S. Bureau of Economic Analysis | USD | GDP, Personal Income and Outlays (PCE), trade balance, international transactions | The current year's schedule | Yes, ET |
| `fomc` | Federal Reserve | USD | FOMC interest rate decisions (on the last meeting day) | 2021 to next year | Date only |
| `ons` | UK Office for National Statistics | GBP | UK CPI, labour market, monthly GDP, retail sales, public finances, PPI | Past releases and the months ahead | Yes, UK time |
| `ecb` | European Central Bank | EUR | Monetary policy decisions and press conferences | Upcoming meetings (about two years) | Date only |
| `statcan` | Statistics Canada | CAD | CPI, Labour Force Survey, retail trade, GDP by industry, manufacturing | Next 2 weeks | 8:30 ET |
| `abs` | Australian Bureau of Statistics | AUD | Labour force, CPI, wage price index, building approvals, household spending | Next 6 months (future releases only) | Yes, Canberra time |

#### How impact is set

`impact` is **this Actor's own classification**, not a value the agencies publish. Fixed rules on the event title mark the usual market movers as `high` (jobs reports, CPI, GDP headline estimates, PCE, retail sales, central bank decisions and press conferences), second-tier indicators as `medium` (PPI, trade, JOLTS, housing, industrial production, wages, public finances) and everything else as `low`. Microdata, studies and methodology notes are always `low`.

#### Result status (tri-state output)

| `status` | Meaning | Billed? |
|---|---|---|
| `ok` | One calendar event. | Yes |
| `not_found` | The calendar was read, but none of its events matched your window and filters. | No |
| `error` | The calendar could not be read after retries; `error` says why. | No |

### How to get economic calendar data with this Actor

1. Open the Actor and click **Try for free**.
2. Keep all **Calendars (sources)** or remove the ones you do not need.
3. Set **From date** and **To date** (`today`, `today+30`, or `YYYY-MM-DD`).
4. Optionally pick **Currencies** and a **Minimum impact**.
5. Raise **Maximum results** to cover your window (a two-week window across all sources is about 75 events), then click **Start**.
6. Download the dataset as JSON, CSV or Excel, or read it from the API.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | all 7 sources | Source keys `bls`, `bea`, `fomc`, `ons`, `ecb`, `statcan`, `abs` (or one of their calendar URLs) |
| `dateFrom` | string | `today` | First day of the window: `YYYY-MM-DD`, `today`, `today-7` |
| `dateTo` | string | `today+14` | Last day of the window (inclusive); at most 400 days after `dateFrom` |
| `currencies` | array | all | Keep only `USD`, `GBP`, `EUR`, `CAD`, `AUD` events |
| `minImpact` | string | `low` | `low`, `medium` or `high` |
| `economicOnly` | boolean | `true` | Drop non-economic releases (health, crime, population) from the ONS, StatCan and ABS calendars |
| `keyword` | string | - | Keep only events whose title contains this text |
| `maxItems` | integer | `20` | Stop after this many rows |

High-impact USD and EUR events for the next 30 days:

```json
{
    "startUrls": ["bls", "bea", "fomc", "ecb"],
    "dateFrom": "today",
    "dateTo": "today+30",
    "currencies": ["USD", "EUR"],
    "minImpact": "high",
    "maxItems": 200
}
```

### Output

Real rows from a run on 2026-10-19:

```json
[
    {
        "url": "https://www.bls.gov/schedule/2026/12_sched_list.htm",
        "status": "ok",
        "eventId": "bls-2026-12-10-c6f6df32",
        "date": "2026-12-10",
        "time": "08:30",
        "timezone": "America/New_York",
        "dateTimeUtc": "2026-12-10T13:30:00.000Z",
        "allDay": false,
        "country": "US",
        "countryName": "United States",
        "currency": "USD",
        "eventTitle": "Consumer Price Index",
        "referencePeriod": "November 2026",
        "fullTitle": "Consumer Price Index for November 2026",
        "impact": "high",
        "eventType": "data_release",
        "source": "U.S. Bureau of Labor Statistics",
        "sourceKey": "bls",
        "dateConfirmed": true,
        "attribution": "Source: U.S. Bureau of Labor Statistics release schedule (public domain).",
        "scrapedAt": "2026-10-19T08:51:44.849Z"
    },
    {
        "url": "https://www.ons.gov.uk/releases/uklabourmarketoctober2026",
        "status": "ok",
        "eventId": "ons-2026-10-20-34ca2bdb",
        "date": "2026-10-20",
        "time": "07:00",
        "timezone": "Europe/London",
        "dateTimeUtc": "2026-10-20T06:00:00.000Z",
        "allDay": false,
        "country": "GB",
        "countryName": "United Kingdom",
        "currency": "GBP",
        "eventTitle": "UK Labour Market",
        "referencePeriod": "October 2026",
        "fullTitle": "UK Labour Market: October 2026",
        "impact": "high",
        "eventType": "data_release",
        "source": "UK Office for National Statistics",
        "sourceKey": "ons",
        "dateConfirmed": true,
        "releaseKind": "scheduled",
        "attribution": "Source: Office for National Statistics release calendar, licensed under the Open Government Licence v3.0.",
        "scrapedAt": "2026-10-19T08:51:45.193Z"
    },
    {
        "url": "https://www.ecb.europa.eu/press/calendars/mgcgc/html/index.en.html",
        "status": "ok",
        "eventId": "ecb-2026-10-29-c9d4082e",
        "date": "2026-10-29",
        "timezone": "Europe/Berlin",
        "allDay": true,
        "country": "EU",
        "countryName": "Euro area",
        "currency": "EUR",
        "eventTitle": "ECB Monetary Policy Decision",
        "fullTitle": "Governing Council of the ECB: monetary policy meeting in Frankfurt (Day 2), followed by press conference",
        "impact": "high",
        "eventType": "central_bank",
        "source": "European Central Bank",
        "sourceKey": "ecb",
        "dateConfirmed": true,
        "attribution": "Source: European Central Bank. This information is available free of charge at www.ecb.europa.eu.",
        "scrapedAt": "2026-10-19T08:51:45.211Z"
    }
]
```

### How much does the economic calendar cost?

Pay per result: **$2.875 per 1,000 events on the Free plan**, less on paid plans, plus a small start fee per run. Rows with status `not_found` or `error` are free.

| Apify plan | Per event row | Per 1,000 rows | Start fee per run |
|---|---|---|---|
| Free | $0.002875 | $2.875 | $0.005 |
| Starter (Bronze) | $0.0025 | $2.50 | $0.005 |
| Scale (Silver) | $0.002125 | $2.125 | $0.0045 |
| Business (Gold) and up | $0.00175 | $1.75 | $0.004 |

| Events (Free plan) | Cost |
|---|---|
| 100 (about three weeks, all sources) | $0.29 |
| 1,000 | $2.88 |
| 10,000 | $28.76 |

A daily scheduled run over the next 7 days, high impact only, is about 6 events: under $0.03 a day. Compute is included, and no proxy is needed.

### Integrations, exports and API access

Run it from the Apify API, the JavaScript or Python client, the Apify CLI, or on a **Schedule** (for example every morning for the next 7 days). Connect the dataset to Google Sheets, Airtable, Make, n8n, Zapier, Slack or a webhook, and de-duplicate across runs with `eventId`. AI agents can call it through the Apify MCP server; it runs with no input at all.

### Limitations

- **No forecasts, previous or actual values**, and no ForexFactory or Investing.com data. The agencies publish schedules, not consensus estimates; those calendars forbid redistribution.
- **Seven agencies, five currencies** (USD, GBP, EUR, CAD, AUD). JPY, CHF, NZD and CNY are not covered yet, nor are the Bank of England, Bank of Canada, RBA or Eurostat calendars.
- **Windows differ by source** (see the coverage table): Statistics Canada lists the next two weeks only, ABS future releases only, BEA the current year, ECB upcoming meetings only.
- **FOMC and ECB events have a date but no time** (`allDay: true`), because their calendars do not print one.
- Rows come out in source order, sorted by time within each calendar. Sort by `dateTimeUtc` or `date` after the run. With a small `maxItems` the sample is cut at whichever calendars answered first.
- Agencies sometimes move a date; schedule a fresh run rather than relying on an old one.

### FAQ

**Do I need an API key?** No. The Actor reads the agencies' public calendar pages and the ONS public API.

**Is the data free to reuse?** The U.S. agencies' schedules are in the public domain. ONS content is under the Open Government Licence v3.0, ABS content under CC BY 4.0, Statistics Canada content under the Statistics Canada Open Licence, and the ECB allows reuse with the source cited and a note that the information is free on its website. Each row carries that notice in `attribution`; keep it when you republish.

**Why not ForexFactory?** ForexFactory's terms state that its calendar data may not be copied, republished or redistributed. This Actor deliberately builds the calendar from the original publishers instead.

**What time zone are dates in?** `date` and `time` are the source's local time (stated in `timezone`); `dateTimeUtc` is the same instant in UTC, already adjusted for daylight saving.

**Can I get past release dates?** Yes for BLS, FOMC and ONS (and BEA within the current year): set `dateFrom` in the past, e.g. `2026-01-01`.

**Why did I get fewer rows than `maxItems`?** Your window and filters matched fewer events. A calendar with events but none matching your filters writes one free `not_found` row.

**What if an agency redesigns its calendar?** That source's rows come back as `error` with a reason, the other sources keep working, and you are not billed for error rows. Report it in the **Issues** tab.

### Related Actors

- [Yahoo Finance Scraper](https://apify.com/glasswing/yahoo-finance-scraper) - use it for quotes, history and financials of the stocks, indices and currencies these releases move.
- [Google News Scraper](https://apify.com/glasswing/google-news-scraper) - use it to collect the news coverage around a CPI print or a rate decision.
- [Google Trends Scraper](https://apify.com/glasswing/google-trends-scraper) - use it to see how search interest in inflation, recession or rates moves around the releases.
- [CoinGecko and DexScreener Crypto API](https://apify.com/glasswing/coingecko-dexscreener-crypto-api) - use it for crypto prices to compare with macro event times.

### Legal and data-protection notice

This Actor extracts only public release schedules from the public calendars of the U.S. Bureau of Labor Statistics, the U.S. Bureau of Economic Analysis, the Federal Reserve Board, the UK Office for National Statistics, the European Central Bank, Statistics Canada and the Australian Bureau of Statistics. It collects no personal data: contact names and phone numbers printed next to some releases are never read. It identifies itself to the agencies with its own user agent, as their usage policies ask, and does not log in or work around access controls. You are responsible for complying with each source's licence (summarised in the FAQ and in every row's `attribution`) and applicable law when using the data.

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by any of these agencies or central banks. All trademarks belong to their respective owners.

# Changelog

This Actor's version history is a separate document: https://apify.com/glasswing/economic-calendar-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Which agency calendars to read, one per line. Keys: `bls` (US jobs, CPI, PPI), `bea` (US GDP, PCE, trade), `fomc` (Federal Reserve rate decisions), `ons` (UK statistics), `ecb` (ECB monetary policy meetings), `statcan` (Statistics Canada, next 2 weeks), `abs` (Australian Bureau of Statistics, future releases). A calendar page URL of one of these agencies also works.

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

First day of the window (inclusive), in each source's local date. `YYYY-MM-DD`, `today`, or relative like `today-7` / `today+30`.

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

Last day of the window (inclusive). `YYYY-MM-DD` or relative like `today+14`. Windows longer than 400 days are capped.

## `currencies` (type: `array`):

Keep only events for these currencies. Empty = all. Sources for other currencies are not fetched at all.

## `minImpact` (type: `string`):

Lowest impact level to keep. Impact is this Actor's own classification of the release (see README), not a value published by the agencies.

## `economicOnly` (type: `boolean`):

Drop non-economic statistical releases (crime, health, population...) from the general ONS, Statistics Canada and ABS calendars.

## `keyword` (type: `string`):

Optional: keep only events whose title contains this text, e.g. `price` or `GDP`.

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

Stop after this many rows. Each `ok` row is one billable event. Raise it (e.g. 500) to get a whole window; the default 20 is a quick sample.

## `proxyConfiguration` (type: `object`):

Not needed: the agencies' calendars are public and answer datacenter IPs.

## Actor input object example

```json
{
  "startUrls": [
    "bls",
    "bea",
    "fomc",
    "ons",
    "ecb",
    "statcan",
    "abs"
  ],
  "dateFrom": "today",
  "dateTo": "today+14",
  "currencies": [],
  "minImpact": "low",
  "economicOnly": true,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        "bls",
        "bea",
        "fomc",
        "ons",
        "ecb",
        "statcan",
        "abs"
    ],
    "dateFrom": "today",
    "dateTo": "today+14",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("glasswing/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 = {
    "startUrls": [
        "bls",
        "bea",
        "fomc",
        "ons",
        "ecb",
        "statcan",
        "abs",
    ],
    "dateFrom": "today",
    "dateTo": "today+14",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("glasswing/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 '{
  "startUrls": [
    "bls",
    "bea",
    "fomc",
    "ons",
    "ecb",
    "statcan",
    "abs"
  ],
  "dateFrom": "today",
  "dateTo": "today+14",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call glasswing/economic-calendar-scraper --silent --output-dataset

```

## MCP server setup

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