Canada Economic Calendar: StatCan CPI, GDP & Jobs Release Dates
Pricing
from $1.40 / 1,000 calendar entry returneds
Canada Economic Calendar: StatCan CPI, GDP & Jobs Release Dates
Canada's official statistics release schedule: every release due in the coming two weeks plus the release-date history and published future dates of the 28 major economic indicators — title, reference period, the 08:30 Eastern moment in UTC, status and the release link.
Pricing
from $1.40 / 1,000 calendar entry returneds
Rating
0.0
(0)
Developer
Samat Makatov
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Canada's official statistics release schedule: every release due in the coming two weeks plus the release-date history and published future dates of the 28 major economic indicators — title, reference period, the 08:30 Eastern moment in UTC, status and the release link.
The rows come from Statistics Canada's own schedule of The Daily — the two-week list of upcoming releases and the machine-readable schedule of the major economic indicators, which reaches back to March 2012 and forward as far as the office has published. Each row says what is released, which period the number covers, and the exact moment it becomes public, already converted to UTC (08:30 Eastern is 12:30Z in summer and 13:30Z in winter). No API key, no proxy, no browser — one plain GET request per run in upcoming, two in the other modes and in upcoming with an indicators filter.
This is a calendar, not a data feed: it carries release moments and reference periods, never actual, forecast or previous figures.
Need it tailored to your workflow? Missing a field, a filter, another source or a different output format? Open an issue and describe what you need — we read every request and adapt the actor.
Use cases
- Trading and risk desks: line a Canadian macro model up with the minute the number lands —
releaseDateUtcandhoursUntilReleaseneed no timezone arithmetic on your side. - Newsroom and content planning: the two-week window lists every release, including the small surveys and the studies that never reach a market calendar.
- Agents and chatbots:
nextReleaseanswers "when is the next Canadian CPI / GDP / jobs number" with exactly one row per topic, so a tool call always has the same shape. - Event studies and backtests: pull the release dates of one indicator for any range back to 2012, each with the link to the release that was published that morning.
- Data engineering: schedule ingestion and refresh jobs against the published calendar instead of polling a source that is not out yet.
- Calendar monitoring: run it on a schedule with
onlyNewand get a row only when something is added or moved.
Input
Nothing is required — with default settings the run returns the next two weeks of releases. The Console form starts with an example: upcoming filtered to CPI, GDP by industry and the Labour Force Survey over the next 30 days.
| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
mode | string | upcoming | upcoming, keyIndicators, nextRelease — see Modes |
query | string | — | Keyword kept against the release title and the reference period, case-insensitive (price index, trade, crop). Used in upcoming and keyIndicators |
indicators | string[] | — | Short codes from the indicator dictionary; empty = no indicator filter. Used in upcoming (then the major-indicator schedule is read too, so dates past the two-week page come back) and keyIndicators; not used in nextRelease |
topics | string[] | — | One keyword per question; each returns one row. Required in nextRelease, not used in the other modes |
dateFrom | string | — | Earliest release date, YYYY-MM-DD (an Eastern calendar date) |
dateTo | string | — | Latest release date, YYYY-MM-DD |
withinDays | integer | 14 | 1–1095 (the Console form starts at 30). Sets the window length when dateTo is empty: N days from today, or from dateFrom when only that is set. Exception: nextRelease with both dates empty reads the whole published schedule — see Date windows |
onlyUpcoming | boolean | false | Drop releases whose 08:30 Eastern moment has passed. Always on in nextRelease |
onlyNew | boolean | false | Output only entries missing from the previous run with the same filters. Entries delivered earlier do not use up maxItems; new entries beyond maxItems or beyond your maximum cost per run come in the next run |
sortOrder | string | soonest | soonest or latest (by release moment) |
maxItems | integer | 30 | 1–1000 |
fields | string[] | all | Keep only these output fields, in this order. releaseTitle is always kept (in nextRelease: matchedTopic and found). A wrong letter case or a one-letter slip is corrected and named in the status; unknown names are skipped; a list without a single output column fails the run |
Reference
Modes
| Mode | Reads | Covers | Answers |
|---|---|---|---|
upcoming | the two-week schedule (with indicators: also the major-indicator schedule) | about 14 days around today, ~50 releases; with indicators, those indicators over the whole window | "everything Canada publishes in the coming two weeks", "the CPI and jobs dates of the next month" |
keyIndicators | the major-indicator schedule and the two-week page | March 2012 → as far ahead as the office has published | "every CPI date since 2012", "the major indicators still ahead" |
nextRelease | both lists | the whole published schedule, from now on | "when is the next GDP" — one row per topic |
keyIndicators keeps only releases whose title is one of the 28 dictionary titles; everything else on the two-week page is dropped in that mode. An indicators filter does the same for the chosen codes in upcoming and keyIndicators. The same release printed on both lists is returned once, with the article link if one exists.
Date windows
- Both
dateFromanddateToempty → the window is today up towithinDaysdays ahead (innextRelease: the whole published schedule). - Only
dateFrom→withinDaysdays from it. OnlydateTo→ everything from 2012 up to it. - Dates are the Eastern calendar dates the schedule prints; every row also carries the moment in UTC.
- A window that reaches past the end of the published schedule returns the releases that exist, and the run's status message says where the schedule stops. It is not an error.
The 28 major economic indicators
indicatorCode is filled by matching the release title against these printed titles, longest title first. A variant keeps the code of the title it extends: Wholesale trade: Advance indicator → wholesale-trade. A title that is not in the list gets indicatorCode: null and isKeyIndicator: false — it is never matched to the nearest neighbour.
| Code | Printed title |
|---|---|
cpi | Consumer Price Index |
labour-force-survey | Labour Force Survey |
gdp-by-industry | Gross domestic product by industry |
gdp-income-expenditure | Gross domestic product, income and expenditure |
gdp-by-industry-provinces | Gross domestic product by industry: Provinces and territories |
retail-trade | Retail trade |
wholesale-trade | Wholesale trade |
merchandise-trade | Canadian international merchandise trade |
manufacturing | Monthly Survey of Manufacturing |
payroll-employment | Payroll employment, earnings and hours, and job vacancies |
building-permits | Building permits |
investment-building-construction | Investment in building construction |
investment-non-residential | Investment in non-residential building construction |
non-residential-capital-repair | Non-residential capital and repair expenditures |
ippi-rmpi | Industrial product and raw materials price indexes |
balance-of-payments | Canada's balance of international payments |
international-investment-position | Canada's international investment position |
securities-transactions | Canada's international transactions in securities |
national-balance-sheet | National balance sheet and financial flow accounts |
quarterly-financial-statistics | Quarterly financial statistics for enterprises |
labour-productivity | Labour productivity, hourly compensation and unit labour cost |
tourism-indicators | National tourism indicators |
travel-canada | Travel between Canada and other countries |
farm-income | Farm income |
field-crop-estimates | Model-based principal field crop estimates |
field-crop-areas | Principal field crop areas |
field-crop-production | Production of principal field crops |
field-crop-stocks | Stocks of principal field crops |
indicators is a choice field: only the codes above are accepted, and any other value is rejected by the input validation before the run starts. To follow a release that is not in the list, or to match by wording, use query (or topics in nextRelease) — the search is never quietly widened.
Source lists
source | What it is | Time range | Article link |
|---|---|---|---|
upcoming-schedule | the two-week list of every forthcoming release | the current window, ~14 days | no — the row links to the schedule page |
key-indicators | the machine-readable schedule of the 28 indicators | March 2012 onwards | yes for releases already published |
Examples
Everything Canada publishes in the next two weeks — trading desks, newsroom planning.
{ "mode": "upcoming", "withinDays": 14, "sortOrder": "soonest", "maxItems": 25 }
The CPI, GDP and jobs dates of the coming month — the Console's starting example; the indicator filter reaches past the two-week page.
{ "mode": "upcoming", "indicators": ["cpi", "gdp-by-industry", "labour-force-survey"], "withinDays": 30 }
Consumer Price Index release dates of 2024 and 2025 — event studies that need the moment the number became public.
{ "mode": "keyIndicators", "indicators": ["cpi"], "dateFrom": "2024-01-01", "dateTo": "2025-12-31", "maxItems": 30 }
When is the next GDP, jobs and retail number — one row per topic for an agent or a dashboard tile.
{ "mode": "nextRelease", "topics": ["gross domestic product", "labour force survey", "retail trade"], "maxItems": 5 }
Only the major indicators still ahead — a Canada macro panel.
{ "mode": "keyIndicators", "onlyUpcoming": true, "withinDays": 120, "sortOrder": "soonest", "maxItems": 20 }
The whole 2026 schedule by indicator — planning refresh jobs and reporting deadlines for a year.
{ "mode": "keyIndicators", "dateFrom": "2026-01-01", "dateTo": "2026-12-31", "sortOrder": "soonest", "maxItems": 60 }
The trade family of releases for 2025 — one keyword collects merchandise, retail and wholesale trade.
{ "mode": "keyIndicators", "query": "trade", "dateFrom": "2025-01-01", "dateTo": "2025-12-31", "maxItems": 40 }
Output
A real row from cloud run AYTJWJefDsBHbGtka (mode: "keyIndicators", indicators: ["cpi"], 2024–2025, 24 rows):
{"releaseTitle": "Consumer Price Index","referencePeriod": "December 2023","releaseDateEastern": "2024-01-16","releaseTimeEastern": "08:30","releaseDateUtc": "2024-01-16T13:30:00.000Z","dayOfWeek": "Tuesday","hoursUntilRelease": -23576.4,"status": "published","isKeyIndicator": true,"indicatorCode": "cpi","dailyUrl": "https://www150.statcan.gc.ca/daily-quotidien/240116/dq240116a-eng.htm","scheduleWindow": null,"source": "key-indicators","mode": "keyIndicators","url": "https://www150.statcan.gc.ca/daily-quotidien/240116/dq240116a-eng.htm","fetchedAt": "2026-09-24T21:51:56.586Z"}
| Field | Type | Meaning |
|---|---|---|
releaseTitle | string | The release as the schedule names it; null only on a found: false topic row |
referencePeriod | string | null | The period the numbers cover (July 2026, second quarter 2026, 2024/2025); null when the source prints none |
releaseDateEastern | string | null | Release date, YYYY-MM-DD, the Eastern calendar date the schedule prints; null only on a found: false topic row |
releaseTimeEastern | string | null | Always 08:30 — the moment the bulletin is published, not a per-release time (null on a found: false row) |
releaseDateUtc | string | null | The release moment in ISO-8601 UTC, daylight saving already applied (null on a found: false row) |
dayOfWeek | string | null | Weekday of the release date |
hoursUntilRelease | number | null | Hours from the run to the release; negative once it is out |
status | string | null | scheduled before the moment, published after it |
isKeyIndicator | boolean | Whether the title is one of the 28 major economic indicators |
indicatorCode | string | null | The dictionary code, or null for a release outside the 28 |
dailyUrl | string | null | The published release article, when it exists |
scheduleWindow | string | null | The two-week window the row was printed in (upcoming-schedule rows) |
source | string | null | upcoming-schedule or key-indicators |
mode | string | The mode that produced the row |
url | string | The article when known, otherwise the schedule page the row came from |
fetchedAt | string | Fetch time, ISO-8601 UTC |
matchedTopic | string | nextRelease only: the topic this row answers; always kept when fields narrows the row |
found | boolean | nextRelease only: false when nothing is scheduled for that topic yet (the release columns are then null); always kept when fields narrows the row |
Dataset views: Release calendar (the full calendar), Major indicators (indicator code, dates, article link), Next release per topic. The dataset schema carries a title, description and example for every column, so agents and MCP clients see the row shape before the first run.
A SUMMARY record goes to the run's key-value store: the window, the pages read, how many entries were parsed, how many duplicates were merged, where the published schedule ends, how many rows were written, skipped as already delivered (onlyNew) or cut, why the run stopped (stoppedBy: your spending limit, the run timeout or an abort), and the inputs the chosen mode does not use (inputsNotUsed).
Use it from code / agents
curl -X POST "https://api.apify.com/v2/acts/yadroo~statcan-release-calendar/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"nextRelease","topics":["consumer price index","gross domestic product"],"maxItems":5}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('yadroo/statcan-release-calendar').call({mode: 'upcoming',withinDays: 14,maxItems: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("yadroo/statcan-release-calendar").call(run_input={"mode": "keyIndicators", "indicators": ["cpi"], "dateFrom": "2024-01-01", "dateTo": "2025-12-31", "maxItems": 30,})items = client.dataset(run["defaultDatasetId"]).list_items().items
MCP: add https://mcp.apify.com to Claude / Cursor / any MCP client and call the yadroo/statcan-release-calendar tool with the same JSON input. For an agent, nextRelease is the safest shape: one row per topic, found: false instead of a missing row, so the answer never depends on how many rows came back. fields trims the payload, e.g. ["releaseTitle", "referencePeriod", "releaseDateUtc", "hoursUntilRelease"].
Pricing
Pay per event: $0.001 per run start + $0.002 per dataset row. The start event is charged on every run, including runs that return no rows.
| Run | Rows | Cost |
|---|---|---|
The next two weeks (upcoming, maxItems 25) | 25 | 0.001 + 25 × 0.002 = $0.051 |
Next release for 3 topics (nextRelease) | 3 | 0.001 + 3 × 0.002 = $0.007 |
A full year of the major indicators (keyIndicators, 2026, maxItems 200) | 200 (the year holds about 200) | 0.001 + 200 × 0.002 = $0.401 |
Store discounts apply to the row price only: Bronze −10 % ($0.0018), Silver −20 % ($0.0016), Gold and above −30 % ($0.0014). The start event is $0.001 on every plan. Platform usage is included in these prices — there is no separate compute charge.
The run respects your Maximum cost per run: it stores and charges only the rows that limit pays for, then ends with the status "Stopped at your spending limit: N rows delivered". With onlyNew, the rows it could not deliver are not marked as seen and come in the next run.
Limits & FAQ
How far ahead does the schedule go? Two different distances. The two-week list covers about 14 days and is refreshed by the office; the major-indicator schedule reaches further — on 24 September 2026 it ran to 31 March 2027, roughly two quarters ahead. There is no fixed horizon: the run's status message and the coverageEnd field of SUMMARY say where the published schedule ends on the day you run it.
Why is every time 08:30? Because everything in The Daily is published at 08:30 Eastern on working days. The source prints no per-release time, so releaseTimeEastern is the bulletin's time and releaseDateUtc is that moment converted (12:30Z under daylight time, 13:30Z in winter). The actor never invents a more precise time.
Are the dates final? No. The source states the list is compiled for planning purposes and may be updated. Dates move, and statutory holidays shift a whole week. Use onlyNew on a scheduled run to be told when an entry appears or changes — a rescheduled release counts as new.
Do I get the numbers themselves? No. This actor returns the calendar: what is released, for which period, when. Actual, forecast and previous values are not part of the schedule and are not produced here.
Why does a two-week run sometimes return fewer rows than maxItems? Because the window only holds what it holds — around 50 releases, of which the ones from today onwards are returned by default. Set dateFrom to an earlier date to include the days of the window that have already passed.
Nothing matched my filter — is that an error? No, it is an empty result with an explanation in the status message. An input the actor cannot honour (a malformed date, nextRelease without topics, a fields list without a single output column) fails the run instead, with a message naming the value to change; an unknown indicator code is refused by the input validation before the run starts. An input the chosen mode does not use (topics outside nextRelease, indicators in nextRelease) is noted in the log and in SUMMARY.inputsNotUsed, not in the status message. With onlyNew, a run whose matches were all delivered before ends with zero rows and says how many it held back as already seen.
Rate limits and politeness. One GET request per run in upcoming, two in the other modes and with an indicators filter, with the 2-second crawl delay the site's robots.txt asks for, plus bounded retries on throttling. No login, no captcha, no proxy. A source that keeps failing ends the run with a status naming the error; a run near its timeout stops reading and keeps what it has. If the two-week page ever answers in a layout the actor does not know, plain upcoming fails with a status that says so (no rows, no row charges) instead of returning an empty success, the other modes say they used the major-indicator schedule only, and the page is kept — without contact details — as UNREAD_PAGE in the run's key-value store.
Personal data. The two-week page prints a media contact name and phone number beside each release. They are parsed away and never written to the dataset.
Languages. English titles only; the French edition of the schedule is not read.
Made by Yadroo. Data source: Statistics Canada, release schedule of The Daily, used under the Statistics Canada Open Licence. Statistics Canada does not endorse this actor.
Sibling actors: bls-release-calendar · ons-release-calendar · us-treasury-yields · world-bank-indicators · sec-company-financials