UK Economic Calendar: ONS Release Dates for CPI, GDP & Jobs avatar

UK Economic Calendar: ONS Release Dates for CPI, GDP & Jobs

Pricing

from $1.40 / 1,000 calendar row returneds

Go to Apify Store
UK Economic Calendar: ONS Release Dates for CPI, GDP & Jobs

UK Economic Calendar: ONS Release Dates for CPI, GDP & Jobs

Scheduled and past UK statistics releases from the official ONS calendar: title, exact UTC release moment, London date and time, reference period, confirmed or provisional status, cancellations, summary and links. Filter by keyword, status and date window.

Pricing

from $1.40 / 1,000 calendar row returneds

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scheduled and past UK statistics releases from the official ONS calendar: title, exact UTC release moment, London date and time, reference period, confirmed or provisional status, cancellations, summary and links. Filter by keyword, status and date window.

Every row is one publication of the Office for National Statistics — what it is called, the period it covers, the exact moment it goes live (in UTC and in UK wall-clock time), whether that date is confirmed or still provisional, and the page it will appear on. About 400 entries are scheduled ahead, 9 000 have already been published and 300 were dropped; you pick a window, a keyword and a status. Built for trading desks, macro researchers, newsrooms, data pipelines and agents that need the UK release schedule as data instead of a web page. Read straight from the publisher's own keyless JSON: no API key, no proxy, no browser. It is a calendar of when, not a feed of how much — actual, forecast and previous figures are not part of this source.

Use cases

  • Timing a model or a trade around a print: ask for the next consumer price inflation, GDP and labour market releases and schedule the refresh on the exact minute — hoursUntilRelease counts down, releaseDateUtc is the moment to fire.
  • Editorial and content calendars: everything ONS publishes in the next 30 days with UK weekday, time and summary, so a newsroom planner or a "what's coming" widget fills itself.
  • Pipelines that wait for a file: watch a keyword with onlyNew: true on a schedule and get a row only when something changes — a new date, a postponement, or a cancellation that means the file will never arrive.
  • Agents and chat tools: mode: "nextRelease" answers "when is the next UK inflation figure" with one row per topic, small enough to hand to a model together with fields.
  • Event studies and backtests: past releases with dateFrom/dateTo give the publication moment as it happened, so a study or a replay lines up with the minute the data became public.
  • Wiring a release to its data: with includeDetails each row carries the datasets, bulletins and API datasets that publication points to, the ONS enquiries contact and the next-release date as ONS states it.

Input

Nothing is required. With the defaults a run returns the next 30 scheduled releases of the coming 90 days that match the prefilled keyword.

FieldTypeDefaultAllowed values / notes
modestringcalendarcalendar = one row per release in a window; nextRelease = one row per topic, the next release still ahead. See Modes
querystring— (prefilled consumer price inflation)Free-text keyword over titles and summaries, or a time series ID. Empty = every release in the window. Used in calendar mode
topicsstring[]— (prefilled CPI / GDP / labour market)One keyword per topic, one row each. Used in nextRelease mode
releaseStatusstringupcomingupcoming, published, cancelled, all. See Statuses
confirmationstringanyany, confirmed, provisional. See Confirmed vs provisional
dateFromstring—Earliest release date, YYYY-MM-DD, UK calendar date, inclusive
dateTostring—Latest release date, YYYY-MM-DD, inclusive
withinDaysinteger901–1095. Used only when both dates are empty. See Date windows
censusOnlybooleanfalseKeep only entries ONS tags as census output (a handful at a time)
sortOrderstringsoonestsoonest, latest, relevance (needs a keyword)
includeDetailsbooleanfalseOne extra request per row for the release page's own data. See Details
onlyNewbooleanfalseOutput only entries not seen by an earlier run with the same filters. See Monitoring with onlyNew
maxItemsinteger301–1000
fieldsstring[]allKeep only these output fields, in this order

Reference

Modes

ModeWhat one row isNotes
calendarA release inside the windowUses query, releaseStatus, confirmation, the dates, censusOnly, sortOrder
nextReleaseA topic from topicsThe next matching release still ahead; date filters do not apply. A topic with nothing scheduled yields a row with found: false and a note instead of disappearing

Statuses

releaseStatusWhich part of the calendarRows today
upcomingScheduled, not published yet~400
publishedAlready out, back to 2016~9 000
cancelledDropped from the calendar~320
allThe three lists merged; each row keeps its own status—

Confirmed vs provisional

ONS confirms a date roughly four weeks ahead. Until then the entry carries a provisional date — sometimes a day, sometimes only a month — and it can still move. isProvisional is the flag, provisionalDateText is the date exactly as ONS printed it ("19 January 2028 9:30am", "January 2028", or empty). confirmation: "confirmed" keeps the dates that are safe to plan against, "provisional" keeps the ones worth watching.

Date windows

dateFrom / dateTo are UK calendar dates and both are inclusive. When both are empty, withinDays builds the window from today:

StatusWindow from withinDays
upcomingtoday → today + N
publishedtoday − N → today
cancelled, alltoday − N → today + N (cancellations mostly sit in the past)

The window that was actually used is in the run's status message and in the SUMMARY record. In nextRelease mode there is no window: it always looks from now to the end of the calendar.

Finding a keyword

The search runs over release titles and summaries and ranks by relevance, so a keyword pulls in neighbours: a search for consumer price inflation also returns "Consumer trends". Use the wording of a release title (public sector finances, private rent and house prices, labour market, retail sales, deaths registered), or a time series ID such as D7G7. In nextRelease mode the topic is ranked against the titles of the matches, including initials — gross domestic product therefore answers with a "GDP …" release — and the earliest match wins a tie.

Details

includeDetails: true reads each release's own page data and adds nextReleaseText, isNationalStatistic, isWelshStatistic, contactName, contactEmail, contactTelephone, cancellationNotice, relatedDatasets, relatedDocuments and relatedApiDatasets. That is one extra request per row, so keep maxItems small. Fields ONS leaves blank come back as null or an empty list; a release page that cannot be read leaves the calendar fields untouched and the run says so.

Monitoring with onlyNew

onlyNew remembers release page plus release moment in the actor's own key-value store, one history per filter set. A rescheduled or postponed release therefore counts as new, and a scheduled task emits exactly the changes to the calendar. The first run returns everything it finds; a run with nothing new ends successfully with zero rows.

Examples

When do UK price statistics land? (trading desk)

{ "mode": "calendar", "query": "inflation", "releaseStatus": "upcoming", "withinDays": 180, "sortOrder": "soonest", "maxItems": 12 }

Everything ONS publishes in the next 30 days (newsroom planner)

{ "mode": "calendar", "releaseStatus": "upcoming", "withinDays": 30, "sortOrder": "soonest", "maxItems": 40 }

One answer per indicator, for an agent or a dashboard

{ "mode": "nextRelease", "topics": ["consumer price inflation", "gross domestic product", "labour market overview"], "maxItems": 5 }

When did each past release actually go live? (backtest)

{ "mode": "calendar", "query": "public sector finances", "releaseStatus": "published", "dateFrom": "2026-01-01", "dateTo": "2026-08-31", "sortOrder": "latest", "maxItems": 12 }

What is only pencilled in? (long-horizon planning)

{ "mode": "calendar", "releaseStatus": "upcoming", "confirmation": "provisional", "withinDays": 730, "sortOrder": "latest", "maxItems": 20 }

What was dropped from the calendar? (pipeline owner)

{ "mode": "calendar", "releaseStatus": "cancelled", "dateFrom": "2026-01-01", "dateTo": "2026-12-31", "sortOrder": "latest", "maxItems": 15 }

Release → datasets, bulletins and contact (analyst)

{ "mode": "calendar", "query": "private rent and house prices", "releaseStatus": "published", "withinDays": 365, "includeDetails": true, "sortOrder": "latest", "maxItems": 6 }

Output

One real row from a cloud run (query: "inflation", releaseStatus: "upcoming"):

{
"releaseTitle": "Consumer price inflation, UK: September 2026",
"referencePeriod": "September 2026",
"releaseDateUtc": "2026-10-21T06:00:00.000Z",
"releaseDateLondon": "2026-10-21",
"releaseTimeLondon": "07:00",
"dayOfWeek": "Wednesday",
"status": "upcoming",
"isProvisional": false,
"provisionalDateText": null,
"isPostponed": false,
"isCensus": false,
"hoursUntilRelease": 652.9,
"summary": "Price indices percentage changes and weights for the different measures of consumer price inflation.",
"dateChanges": [],
"uri": "/releases/consumerpriceinflationukseptember2026",
"url": "https://www.ons.gov.uk/releases/consumerpriceinflationukseptember2026",
"fetchedAt": "2026-09-24T01:06:13.477Z"
}
FieldTypeMeaning
releaseTitlestringTitle as ONS publishes it
referencePeriodstring | nullThe period the release is about, derived from the title; null when the title carries none
releaseDateUtcstringThe release moment, ISO 8601 UTC (…Z)
releaseDateLondonstringUK calendar date, YYYY-MM-DD (derived)
releaseTimeLondonstringUK wall-clock time, HH:MM — in practice 07:00 or 09:30 (derived)
dayOfWeekstringWeekday in the UK (derived)
statusstringupcoming, published or cancelled
isProvisionalbooleantrue while ONS has not confirmed the date
provisionalDateTextstring | nullThe provisional date exactly as ONS printed it
isPostponedbooleanONS moved this release
isCensusbooleanTagged as census output
hoursUntilReleasenumber | nullHours left, one decimal; null for published and cancelled rows
summarystring | nullThe release's own summary line
dateChangesarray{ previousDateUtc, note } per move, when ONS records one
matchedTopicstringnextRelease mode: the topic that produced the row
foundbooleannextRelease mode: false on a row that says nothing is scheduled
uristringPath of the release page
urlstringFull link to the release page
fetchedAtstringRun time, ISO 8601 UTC

With includeDetails: true each row also carries nextReleaseText, isNationalStatistic, isWelshStatistic, contactName, contactEmail, contactTelephone, cancellationNotice (array), relatedDatasets, relatedDocuments and relatedApiDatasets (arrays of { title, url }).

A SUMMARY record in the run's key-value store repeats the mode, the window that was used, how many entries the calendar held for each list, how many rows each filter dropped and the source note.

Dataset views: Release calendar (the table), Still ahead (topic, hours until, weekday, provisional date), Release details (next release, contact, linked datasets and bulletins, date changes).

Use it from code / agents

curl -X POST "https://api.apify.com/v2/acts/yadroo~ons-release-calendar/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"nextRelease","topics":["consumer price inflation","gross domestic product"],"fields":["matchedTopic","releaseTitle","releaseDateUtc","hoursUntilRelease"],"maxItems":5}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/ons-release-calendar').call({
mode: 'calendar',
releaseStatus: 'upcoming',
withinDays: 30,
maxItems: 40,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/ons-release-calendar").call(run_input={
"mode": "calendar",
"query": "public sector finances",
"releaseStatus": "published",
"dateFrom": "2026-01-01",
"dateTo": "2026-08-31",
"maxItems": 12,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

fields trims every row to the keys you name, which keeps a calendar answer small enough to paste into a prompt.

MCP: add https://mcp.apify.com to Claude / Cursor / any MCP client and call the yadroo/ons-release-calendar tool with the same JSON input.

Pricing

Pay per event: $0.001 to start a run plus $0.002 per dataset row on the free tier (lower on paid tiers: $0.0018 bronze, $0.0016 silver, $0.0014 gold and above). Typical runs:

RunRowsCost
Next release per indicator (nextRelease, 3 topics)3$0.007
Default run: one keyword, 90 days30$0.061
A month of the whole calendar~60$0.121
Six published releases with includeDetails6$0.013

Compute is included in practice: the actor runs at 256 MB without a browser, and a calendar run of 30 rows takes a few seconds and one request.

Limits & FAQ

  • The schedule, not the numbers. ONS publishes the calendar without actual, forecast or previous values, so those are not in the output. The figures live in the datasets and bulletins each release links to (includeDetails).
  • ONS only. Other UK publishers (the Bank of England, HMRC, DWP, the devolved statistical offices) keep their own calendars and are not in this source, even when ONS links to their data.
  • Dates move, and that is the point. Anything more than about four weeks out is usually provisional (isProvisional: true); postponements arrive as isPostponed with the previous date in dateChanges. Provisional entries reach roughly two years ahead and no further, so a longer window simply returns fewer rows.
  • provisionalDateText is often empty. ONS prints it for some provisional entries and not for others. The working moment in releaseDateUtc is always there.
  • referencePeriod is parsed from the title, because ONS does not publish it as a field. It covers the common shapes (September 2026, April to June 2026, year ending March 2026, 2025, week ending 18 September 2026) and stays null when a title carries no period — a missing period rather than an invented one.
  • Keyword search is relevance-based. It reads titles and summaries, so results can include neighbouring releases; filter further on releaseTitle if you need an exact family. This is also why nextRelease ranks the matches against the topic instead of taking the first one.
  • UK time is derived, never assumed. ONS states the release moment in UTC, which is 08:30Z for a 09:30 summer release and 09:30Z for the same release in winter. releaseTimeLondon applies the real daylight-saving rules — do not rebuild it with a fixed offset.
  • Paging. The list endpoint serves up to 1000 entries per request and the actor stops as soon as maxItems rows are collected. Entries sharing a release moment can swap places between pages, so paging is deduplicated by release page.
  • Empty results are not silent. A run whose filters match nothing ends with a message naming the keyword, window and status instead of an empty success — except with onlyNew, where zero rows is the normal "nothing changed" answer.
  • Beta endpoint. The JSON search lives on a host ONS labels "beta". If its shape changes, the run fails with a message naming the endpoint rather than returning half-filled rows.
  • Politeness and blocks. A calendar run makes one request, a detail run one more per row with at most four in flight. There is no login, no captcha and no anti-bot wall involved; www.ons.gov.uk serves no robots.txt (it answers 404), so there is nothing to honour there and the actor stays modest anyway.
  • Licence and credit. The output contains public sector information from the Office for National Statistics, licensed under the Open Government Licence v3.0. Every row links to the ONS page it came from. The only contact data is the enquiries mailbox ONS publishes on a release page, and only with includeDetails.

Made by Yadroo. Sibling actors: bls-release-calendar, world-bank-indicators, uk-planning-applications, sec-company-financials, fx-rates.