Economic Calendar Scraper & API (Official Sources)
Pricing
from $2.10 / 1,000 calendar events
Economic Calendar Scraper & API (Official Sources)
Macro release calendar for the US, euro area, UK, Canada and Australia from BLS, BEA, Fed, ECB and ONS with actual values. AI agents ready via MCP.
Pricing
from $2.10 / 1,000 calendar events
Rating
0.0
(0)
Developer
Ocius Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Security
Limited permissionsShare
Unlike calendars scraped from Investing.com or ForexFactory, every run also gives you a ready-to-import calendar file (CALENDAR.ics) for Google Calendar, Outlook or Apple Calendar, plus an INSIGHTS record with the next high-importance release and the largest moves against the previous period. The run's status message shows those numbers and the calendar link as soon as it finishes.
Economic Calendar API returns the macroeconomic release calendar of the United States, the euro area, the United Kingdom, Canada and Australia, built only from the official calendars of statistics agencies and central banks: BLS, BEA, U.S. Census Bureau, Federal Reserve, Eurostat, ECB, ONS, Statistics Canada, Bank of Canada, ABS and RBA. Each row is one release or rate decision with the time in UTC and in the agency's local time zone, country, currency, event name, reference period, importance, category, actual and previous values for the most traded indicators, the source URL and the licence under which the data can be reused. You pay per event saved.
Why this economic calendar
- One-click calendar file and insights (new in 0.1.7).
CALENDAR.icsholds every event of the run, with country, importance, reference period, previous value, source and licence in each entry.INSIGHTSgives the next high-importance release with the hours left, the five largest moves against the previous period, the busiest day and counts by country, importance, category and data quality. Both are free and come from the data already read in the run. - Change and quality on every row (new in 0.1.7).
change,changePercentanddirectionagainst the previous period;importanceReasonexplains in one sentence why the release has its importance;valuesStatus,dataQualityandwarningssay when a value is still pending or not covered, so an empty cell is never ambiguous. - Official sources, cleared for reuse. Every event comes from the publishing agency itself, under public domain, the Open Government Licence, CC BY 4.0 or an equivalent reuse licence. Each row carries its
licenseand theattributiontext the agency asks for. Calendars copied from trading websites usually forbid redistribution; this one does not depend on them. - Actual and previous values from the source. For CPI, the U.S. jobs report, PPI, JOLTS, euro area HICP, unemployment, GDP, retail trade and industrial production, UK CPI, labour market, monthly GDP and retail sales, and Canada's CPI, Labour Force Survey and monthly GDP, the values come from the agencies' own statistics APIs (BLS, Eurostat, ONS, Statistics Canada). They are included at no extra charge.
- Correct times all year. Times are converted from each agency's local time with daylight saving time handled per time zone (for example, euro indicators at 11:00 Luxembourg time are 10:00 UTC in winter and 09:00 UTC in summer).
- Filters that work. Date range (absolute or relative such as
todayto+7d), countries, importance and categories. Every filter is applied before a row is saved, so you never pay for rows you did not ask for. - Fair billing. One
calendar-eventcharge per row saved. Status messages and errors are never written to the dataset and never charged. Your maximum cost per run is respected. - Clear status. Every country and source ends with a status in the
RUN_SUMMARYrecord. If more than 20% of the selected countries or official sources cannot be read, the run is marked as failed so you notice; the events that were read are still delivered.
How to use it
- Choose the date range. Leave it empty for today and the next 7 days, or write dates such as
2026-11-01, or relative values:today,tomorrow,-7d,+2w. - Choose the countries:
US,EA(euro area),GB,CA,AU. Empty means all five. - Choose the importance:
high,medium,low(default: high and medium). - Optionally limit the categories: inflation, labour, growth, consumer, business, housing, trade, central-bank, government, sentiment, other.
- Run the Actor and open the Calendar, Values and changes or Data quality and licence view, download JSON, CSV or Excel, or import the
CALENDAR.icsfile linked in the status message.
Example input: high-importance U.S. and euro area events for the next two weeks, with dates read in New York time.
{"dateFrom": "today","dateTo": "+14d","countries": ["US", "EA"],"importance": ["high"],"timezone": "America/New_York"}
| Input | Default | Description |
|---|---|---|
dateFrom | today | First day, YYYY-MM-DD or relative (today, yesterday, -7d). |
dateTo | start + 7 days | Last day (included). Maximum range: 366 days. |
countries | all | US, EA, GB, CA, AU. UK and EU are accepted as aliases. |
importance | high, medium | Our rating of the release type (see the FAQ). |
categories | all | One or more categories. |
releaseStatus | all | all, released (time already passed) or scheduled. |
includeValues | true | Adds actual and previous values where an official API provides them. |
timezone | UTC | IANA time zone used to read the date range; adds datetimeInRequestedTimezone to each row. |
maxEvents | 1000 | Stops after this many rows. |
Output example and field dictionary
{"eventId": "6cbcbbf49b72d188","datetimeUtc": "2026-10-14T12:30:00.000Z","date": "2026-10-14","time": "08:30","datetimeLocal": "2026-10-14T08:30:00-04:00","timezone": "America/New_York","timeType": "official","dateStatus": "confirmed","country": "US","countryName": "United States","currency": "USD","event": "Consumer Price Index","referencePeriod": "September 2026","category": "inflation","importance": "high","status": "released","actual": 3.7,"forecast": null,"previous": 3.4,"unit": "%","metric": "CPI-U all items, year over year","additionalValues": [{ "metric": "CPI-U all items, month over month (seasonally adjusted)", "unit": "%", "actual": 0.6, "previous": 0.4 },{ "metric": "Core CPI (less food and energy), year over year", "unit": "%", "actual": 2.6, "previous": 2.4 },{ "metric": "Core CPI (less food and energy), month over month (seasonally adjusted)", "unit": "%", "actual": 0.3, "previous": 0.3 }],"valuesSource": "BLS Public Data API","source": "U.S. Bureau of Labor Statistics","sourceUrl": "https://www.bls.gov/schedule/2026/home.htm","license": "Public domain (U.S. government work)","attribution": "Source: U.S. Bureau of Labor Statistics. BLS.gov cannot vouch for the data or analyses derived from these data after the data have been retrieved from BLS.gov.","input": { "dateFrom": "2026-10-01", "dateTo": "2026-10-31", "timezone": "UTC" },"scrapedAt": "2026-11-02T12:37:30.160Z","change": 0.3,"changeUnit": "percentage points","changePercent": null,"direction": "up","hoursUntilRelease": -456.1,"dayOfWeek": "Wednesday","valueIsComputed": true,"valuesPeriod": "2026-09","valuesSeriesUpdatedAt": "2026-10-14T12:30:00.000Z","importanceReason": "Rated high (inflation): the official title matches our inflation rule for high-importance releases.","valuesStatus": "actual_published","dataQuality": "complete","warnings": []}
| Field | Type | Meaning | When it is null |
|---|---|---|---|
eventId | string | Stable key (agency + release + reference period). The same release keeps its ID across runs, even if it is rescheduled. Use it to deduplicate. | Never |
datetimeUtc | ISO 8601 | Release time in UTC. | Never |
date, time, datetimeLocal | string | Release date, time and timestamp with offset in the agency's time zone. | Never |
timezone | string | IANA time zone of the publishing agency. | Never |
timeType | string | official: the time is published by the agency. standard: the agency publishes the date and the time is its standing practice (FOMC 14:00 ET, ECB 14:15 CET, Bank of Canada 9:45 ET). | Never |
dateStatus | string | confirmed, or provisional when the agency marks the date as provisional (ONS, Eurostat). | Never |
country, countryName, currency | string | US/USD, EA/EUR, GB/GBP, CA/CAD, AU/AUD. | Never |
event | string | Official release name. | Never |
referencePeriod | string | Period the data refers to, as published (for example September 2026, Q3/2026). | Rate decisions and releases without a period |
category, importance | string | Our classification (see the FAQ). | Never |
status | string | released if the release time has passed when the Actor ran, otherwise scheduled. | Never |
actual | number | Headline value for the reference period, from the official statistics API. | Scheduled events, releases outside the covered indicators, or when the agency's API has not been updated yet |
forecast | null | Always null. No official source publishes a market consensus, and commercial consensus data cannot be redistributed. Kept for compatibility with other calendars. | Always |
previous | number | Same metric for the period before. | Releases outside the covered indicators |
unit, metric | string | Unit and exact definition of actual and previous. | When there are no values |
additionalValues | array | Other metrics of the same release (for example core CPI, unemployment rate, average hourly earnings). | Empty when there are none |
valuesSource | string | API the values come from. | When there are no values |
source, sourceUrl | string | Publishing agency and the page or file the event was read from. | Never |
license, attribution | string | Reuse licence and the credit line the agency asks for. | Never |
datetimeInRequestedTimezone | string | Release time in the timezone you chose. | Absent when the time zone is UTC or the agency's own |
input, scrapedAt | object, string | Date range of the run and the time the row was produced. | Never |
change | number | actual minus previous. For rates (unit %) it is in percentage points. Also given inside each additionalValues item, with changeUnit, changePercent and direction. | When actual or previous is missing |
changeUnit | string | percentage points for rates, otherwise the unit of the value. | When change is null |
changePercent | number | Percent change against previous, only for levels (for example job openings in thousands). | Rates, values that are already changes (payrolls), or when change is null |
direction | string | up, down or unchanged. | When change is null |
hoursUntilRelease | number | Hours from the start of the run to the release; negative when already released. | Never |
dayOfWeek | string | Weekday of the release in the agency's time zone. | Never |
valueIsComputed | boolean | true when actual and previous are computed from the official index or level (month over month, year over year), false when published as is. | When there are no values |
valuesPeriod | string | Observation the values belong to (2026-09, 2026-Q3). | When there are no values |
valuesSeriesUpdatedAt | ISO 8601 | Last update of the official series, as reported by the statistics API. | When the API does not report it or there are no values |
importanceReason | string | One sentence explaining the importance and category of the release. | Never |
valuesStatus | string | actual_published, awaiting_release (scheduled; previous only), released_value_pending (released, API not updated yet), not_matched, provider_unavailable, not_covered (no official values API for this release in this version) or not_requested (includeValues off). | Never |
dataQuality | string | complete (actual and previous), partial (one of them) or calendar_only (date, time and source only). | Never |
warnings | array | Plain-language notes on this row: standard instead of published time, provisional date, value still pending, API unavailable. | Empty when there is nothing to flag |
forecast is not shown in the Calendar view because it is always null; it stays in the data and in "All fields" for compatibility.
Key-value store records
| Record | Content |
|---|---|
RUN_SUMMARY | Status per country and source, events read and time taken per source, events removed by each filter, values coverage per statistics API, reconciliation between rows saved and events charged, HTTP statistics, warnings, and the links to INSIGHTS and CALENDAR.ics. |
INSIGHTS | nextHighImportance (event, time, hours until release, previous value), nextEvents (next five), largestMoves (five largest changes against the previous period), busiestDay, eventsByDay, eventsByCountry, eventsByImportance, eventsByCategory, dataQualityCounts, counts of released and scheduled events and calendarFileUrl. |
CALENDAR.ics | iCalendar file (RFC 5545) with one 15-minute entry per saved row, in UTC. Import it in Google Calendar (Settings > Import), Outlook or Apple Calendar. The link in the status message and in INSIGHTS is a signed link that opens without a token. Not written when the run saves no rows. |
INPUT, STATE | Your input, and the progress used to resume after a platform migration without duplicates or double charges. |
The Output tab links each view, the Calendar view as CSV, INSIGHTS, CALENDAR.ics and RUN_SUMMARY.
About actual values. actual is the latest official value for the reference period at the time of the run, so it includes any revision published since the first release. Percent changes marked "month over month" or "year over year" for BLS, ONS (monthly GDP, retail sales) and Statistics Canada are computed from the official index or level with one decimal, and can differ by 0.1 from the rounded figure in the press release.
Sources and coverage
| Country | Source | What is read | Dates covered | Licence |
|---|---|---|---|---|
| US | U.S. Bureau of Labor Statistics | Release schedule (CPI, jobs report, PPI, JOLTS and more); values from the BLS Public Data API | Past and future years | Public domain |
| US | U.S. Bureau of Economic Analysis | Release calendar (GDP, personal income and outlays, trade) | Past and future | Public domain |
| US | U.S. Census Bureau | Economic indicators calendar (retail sales, durable goods, housing starts, construction) | Current and next year | Public domain |
| US | Federal Reserve Board | FOMC rate decisions and minutes | 2021 onwards | Public domain |
| EA | Eurostat | Euro indicators release calendar; values from the Eurostat API | Past and future | CC BY 4.0 |
| EA | European Central Bank | Monetary policy decisions | Upcoming meetings | ECB reuse policy |
| GB | Office for National Statistics | Release calendar (economic releases only); values from ONS time series | Past and future | Open Government Licence v3.0 |
| CA | Statistics Canada | Major economic releases; values from the Web Data Service | 2012 onwards and future | Statistics Canada Open Licence |
| CA | Bank of Canada | Interest rate announcements | Current and next year | Bank of Canada terms (reuse with attribution) |
| AU | Australian Bureau of Statistics | Release calendar (economic releases only) | Upcoming (current month and the next 6) | CC BY 4.0 |
| AU | Reserve Bank of Australia | Cash rate decisions | Current year | CC BY 4.0 |
Bank of England dates are not included: the Bank's website terms allow only personal and internal use.
Pricing and cost calculator
Typical job cost (prices read from the live pricing on 4 November 2026, Free and Bronze plans): a week of U.S. high-importance releases (2 rows in the week of 4 November 2026) costs about USD 0.006; the default input (next 7 days, all five economies, high and medium importance: 11 rows) costs about USD 0.033. Add USD 0.00005 for the run start. Platform compute is included in the price; you pay nothing else.
Apify Store discounts: calendar-event costs 15% less on Silver and 30% less on Gold and above.
Pay per event: USD 0.003 per calendar-event, one charge per row saved to the dataset. The only other charge is Apify's standard start event (apify-actor-start), USD 0.00005 per run at the default memory.
| Event | When it is charged |
|---|---|
calendar-event | One calendar row (release or rate decision) that passed validation and was saved. |
Free plan: the USD 5 of monthly usage included in the Apify Free plan covers about 1,650 calendar rows (USD 0.003 each): about 100 runs of the default input (next 7 days, 16 rows).
Never charged: actual and previous values, sources that could not be read, invalid inputs, events removed by your filters, and the RUN_SUMMARY record. Your maximum cost per run is respected: the Actor stops before saving a row it cannot charge.
Rows measured in test runs (November 2026):
| Typical use | Rows | Cost |
|---|---|---|
| Next 7 days, all countries, high and medium importance (default input) | 16 | USD 0.048 |
| Next 7 days, all countries, all importance levels | 22 | USD 0.066 |
| One month (October 2026), all countries, high and medium importance | 49 | USD 0.147 |
| One month (October 2026), all countries, all importance levels | 86 | USD 0.258 |
| 35 days, United States only, high importance | 7 | USD 0.021 |
Formula: rows × 0.003. Prices shown are for the Free and Bronze plans; Silver and Gold pay less. Defects: if a run delivers a wrong time or value because of a defect in the Actor, open an issue with the run ID. Defects are fixed with priority, usually within 72 hours.
Integrations: schedules, API, webhooks, Sheets and AI agents
Schedules. Save an input such as {"dateFrom": "today", "dateTo": "today", "importance": ["high"]} as a task and schedule it every morning, or every 15 minutes during release hours with "releaseStatus": "released" to collect actual values as soon as the agencies publish them. Deduplicate with eventId.
API. Run the Actor and get the results in one call:
curl -X POST "https://api.apify.com/v2/acts/ocius-data~economic-calendar/run-sync-get-dataset-items?token=YOUR_API_TOKEN&format=json" \-H "Content-Type: application/json" \-d '{"dateFrom": "today", "dateTo": "+7d", "countries": ["US"], "importance": ["high"]}'
Python, with the official apify-client package:
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("ocius-data/economic-calendar").call(run_input={"dateFrom": "-30d", "dateTo": "today", "importance": ["high"]})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["datetimeUtc"], row["country"], row["event"], row["actual"], row["previous"], row["unit"])
Webhooks. In the task, open Integrations, add a webhook for ACTOR.RUN.SUCCEEDED and download the dataset from resource.defaultDatasetId.
Google Sheets, Zapier, Make and n8n. Use the Apify integration or app and map the fields of the Calendar view.
MCP and AI agents. Add ocius-data/economic-calendar to the Apify MCP server (https://mcp.apify.com); an agent can ask for {"dateFrom": "today", "dateTo": "+7d", "importance": ["high"]} and receive clean, sourced rows.
Statuses and errors
Statuses are in the RUN_SUMMARY record, never in the dataset.
| Status | Where | Meaning | What to do |
|---|---|---|---|
OK | Country, source | The calendar was read; the events in range are saved. | Nothing |
NO_RESULTS_CONFIRMED | Country | The calendars were read and no release matches your filters in the range. | Widen the range or add low importance. |
PARTIAL | Country | At least one source of the country could not be read; its events are missing. The warning names the source. | Run again later. |
TRUNCATED | Country | More events matched than maxEvents allowed. | Raise maxEvents. |
STOPPED_COST_LIMIT | Country | Your maximum cost per run was reached before all events were saved. | Raise the limit. |
BLOCKED | Source | The agency's website refused the request after all retries and proxy changes. | Run again later. |
ERROR_SOURCE | Source | The agency's website failed or changed. | Open an issue with the run ID. |
| Input error | Run | The run fails within seconds with a message that says which field to fix. | Correct the input. |
A calendar page that is read but yields no events is reported as ERROR_SOURCE (its layout probably changed), never as an empty result.
RUN_SUMMARY also lists, per source, the number of events read and the time taken; the events removed by each filter; the values coverage per statistics API; the reconciliation between rows saved and events charged; and warnings. When values from one statistics API are unavailable, the events are still saved with actual and previous empty, and a warning says so.
Known limits
- No consensus forecast. Official agencies do not publish a market consensus, so
forecastis always null and is not shown in the Calendar view (see the field dictionary). This is the main difference from Investing.com or ForexFactory calendars. - Values cover the main indicators only (listed in "Why this economic calendar"). Other releases have the date, time, period, importance and source, without values. U.S. GDP and PCE values are not included yet because the BEA API requires a personal key.
- Some calendars list only upcoming dates: ECB (upcoming meetings), ABS (current month and the next 6), RBA (current year) and Bank of Canada (current and next year). Past ranges for those sources return fewer events, and a note in
RUN_SUMMARYsays so. - Rescheduled releases appear at their new date once the agency updates its calendar; the
eventIdstays the same. - Release times are those published by the agencies. Central bank decision times marked
timeType: standardfollow the bank's standing practice. - Countries: five economies in this version. Requests for more are welcome in the Issues tab.
FAQ
How is importance decided? By release type, with fixed rules applied to the official release name. High: CPI and inflation flash estimates, the U.S. jobs report and other labour force surveys, GDP, retail sales, personal income and outlays, central bank rate decisions. Medium: producer prices, JOLTS and job vacancies, industrial production and manufacturing, trade and balance of payments, housing and construction, sentiment surveys, central bank minutes. Low: all other economic releases, and regional or state breakdowns.
Why are some releases missing for the UK and Australia? ONS and ABS also publish health, population and crime statistics. Only economic releases are kept.
Can I use the data in my product? Each row carries the licence and the credit line of its source. Public domain, Open Government Licence, CC BY 4.0 and the Statistics Canada Open Licence allow commercial reuse with attribution. The RBA asks that customers be told when data it publishes for free is part of a paid service: its data is available free at rba.gov.au. This is not legal advice.
How fresh are the values? They are read live from the statistics APIs during the run. Right at release time an agency's API can lag its press release by a few minutes; run again and the actual field is filled.
Related Actors from ocius-data
Built to the same standard (status per input in RUN_SUMMARY, actionable errors, pay only for valid data):
- Google Trends API: search interest over time and by region, useful next to macro releases.
Changelog
- 0.1.7 (November 2026) Additive:
CALENDAR.icsfile andINSIGHTSrecord;change,changeUnit,changePercent,direction,hoursUntilRelease,dayOfWeek,valueIsComputed,valuesPeriod,valuesSeriesUpdatedAt,importanceReason,valuesStatus,dataQualityandwarningson every row; labelled columns in every view and a new Data quality and licence view;forecastremoved from the Calendar view only; output links per view and as CSV; rows saved and charged in batches (faster). No field was removed or renamed and the price did not change. - 0.1 (November 2026) First version: official calendars of BLS, BEA, Census, Federal Reserve, Eurostat, ECB, ONS, Statistics Canada, Bank of Canada, ABS and RBA; importance and category per release; actual and previous values from the BLS, Eurostat, ONS and Statistics Canada APIs; UTC and local times; licence and attribution per row.
Tutorials and examples
Ready-to-import templates: Google Sheets, Make, Zapier and a webhook receiver.
- Tutorial: Economic calendar API from official sources: alerts for high-impact releases (JavaScript)
- Example code: JavaScript: high-impact release alert
- All examples: apify-data-apis-examples on GitHub
Rate this Actor
If this Actor saved you time, please consider leaving a rating or a short review on its Apify Store page. It helps other users find it and shows us what to improve. If something does not work as expected, please open an issue first so we can fix it.
Support
Open an issue on the Actor page. Issues are answered within one business day.