# UK Economic Calendar — ONS Release Dates & Postponements (`nexgensignal/uk-ons-release-calendar-records`) Actor

The UK Office for National Statistics release calendar: upcoming, published and cancelled releases with dates, confirmed or provisional status, postponements and the ONS's change notices. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/uk-ons-release-calendar-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 ons release records

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

## UK Economic Calendar — ONS Release Dates & Postponements

**Official source. No API key. Pay per record.**

This actor gives you the UK Office for National Statistics (ONS) release calendar as structured records, read from the ONS's own public search API. Every release the ONS has announced is here: what is coming out, when, whether the date is confirmed or still provisional, whether it has been postponed, and — for every date change — the ONS's own change notice and the previous date. Published and cancelled releases are included too, back to 2016.

On 27 September 2026 the calendar held **9,818 releases**: 404 upcoming (284 with a confirmed date, 120 provisional), 9,092 published and 322 cancelled. The forward calendar ran to February 2028 — Consumer price inflation, for example, was already dated monthly through January 2028.

Use it three ways:

- **Forward calendar.** `nextDays: 14` returns every ONS release due in the next two weeks, soonest first (26 releases on 27 September 2026, including GDP quarterly national accounts and the Balance of payments on 30 September).
- **Postponement watch.** `onlyDateChanges: true` returns only releases whose date the ONS has moved, with the reason in the ONS's words. On 27 September 2026, 59 releases dated from 27 September 2025 onward carried at least one date change.
- **Release history.** Published releases by date range or topic, for back-testing, archives and "what did the ONS publish when" questions.

### Who buys this and for what job

- **Macro traders, economists and research desks** who need UK data release times (CPI, GDP, labour market, retail sales, public finances) in their own calendar or trading system, from the source rather than a re-keyed third-party calendar.
- **Financial news, data and newsletter teams** building "the week ahead" pieces and alerts.
- **Fintech and market-data products** that show an economic calendar to their users and want the UK part straight from the ONS.
- **Public-affairs, policy and consultancy teams** tracking when the statistics they care about will land — and when they slip.
- **Data teams** keeping a clean, deduplicated release table keyed on the ONS's own release URI.

### Sample output

![Sample output — UK Economic Calendar](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/uk-ons-release-calendar-records.png)

```json
{
  "record_id": "ONS:/releases/physicalenergyflowaccountspefa2026",
  "release_uri": "/releases/physicalenergyflowaccountspefa2026",
  "release_url": "https://www.ons.gov.uk/releases/physicalenergyflowaccountspefa2026",
  "calendar_status": "upcoming",
  "title": "Physical energy flow accounts (PEFA) 2026",
  "summary": "Physical energy flow accounts (PEFA) record the flows of energy from the environment to the economy, within the economy, and from the economy back to the environment.",
  "release_date": "2026-09-28T08:30:00.000Z",
  "provisional_date": null,
  "published": false,
  "cancelled": false,
  "finalised": true,
  "postponed": true,
  "census": false,
  "date_change_count": 1,
  "date_changes": [
    {
      "change_notice": "We are postponing the Physical energy flow accounts (PEFA) 2026 release, due to be published on 18 September. This is because of a late resupply of data from our data supplier following queries raised during our quality assurance processes. This release will now be published on 28 September.",
      "previous_date": "2026-09-18T08:30:00.000Z"
    }
  ],
  "source": "Office for National Statistics — release calendar, read from the ONS public search API (https://api.beta.ons.gov.uk/v1/search/releases)",
  "licence": "Open Government Licence v3.0 — the ONS states that its statistics and content are published under the Open Government Licence (https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/).",
  "attribution": "Source: Office for National Statistics licensed under the Open Government Licence v.3.0; reformatted by NexGen Signal.",
  "observed_at": "2026-09-27T16:21:27Z"
}
```

### Pricing

| Apify plan | Price per record |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold and above | $0.0335 |

You pay only for records delivered to your dataset. `maxRecords` caps what a run can cost: 500 records cost $25 on the Free plan. Filtering is free — the actor reads the calendar and you pay only for what matches.

### Input

| Field | What it does | Default |
|---|---|---|
| `releaseTypes` | Which parts of the calendar: `upcoming`, `published`, `cancelled` | upcoming and published |
| `nextDays` | Only releases dated from today to N days ahead | not set |
| `lastDays` | Only releases dated in the last N days (and any later) | not set |
| `fromDate`, `toDate` | Only releases dated between two days (YYYY-MM-DD, UTC) | not set |
| `query` | Words passed to the ONS search, e.g. `inflation`, `GDP`, `labour market` | none |
| `titleContains` | Keep only titles containing this exact phrase (not case-sensitive), e.g. `Consumer price inflation` | none |
| `onlyDateChanges` | Only releases the ONS has re-dated, with its change notices | off |
| `excludeCensus` | Drop releases the ONS flags as Census releases | off |
| `sortBy` | `calendar` (upcoming soonest first, then published newest first, then cancelled), `newest` or `oldest` | calendar |
| `maxRecords` | Maximum records delivered and billed | 10 |

**Default changed on 30 Sep 2026:** if you leave `maxRecords` out, a run now returns up to **10** records (it was 500). Set `maxRecords` yourself to get more — the maximum is unchanged.

Example — the UK data week ahead:

```json
{"nextDays": 7, "releaseTypes": ["upcoming"], "maxRecords": 200}
```

Example — every CPI release date, past and future:

```json
{"query": "inflation", "titleContains": "consumer price inflation", "releaseTypes": ["published", "upcoming"], "sortBy": "newest", "maxRecords": 500}
```

(On 27 September 2026 the first rows of that run were the ONS's scheduled CPI releases for December 2027 down to July 2027.)

### Output

| Field | Meaning |
|---|---|
| `record_id` | `ONS:<release uri>` — unique per release |
| `release_uri`, `release_url` | The ONS's release path and the release page on www.ons.gov.uk |
| `calendar_status` | `upcoming`, `published` or `cancelled` — the ONS calendar list the release came from |
| `title`, `summary` | As the ONS publishes them |
| `release_date` | Release date and time, UTC (ISO 8601) — e.g. 07:00 UK time in summer is `06:00:00.000Z` |
| `provisional_date` | For provisional releases, the ONS's wording, e.g. `October 2026` |
| `published`, `cancelled`, `finalised`, `postponed`, `census` | The ONS's own flags; `finalised: false` means the date is still provisional |
| `date_change_count`, `date_changes` | Every date change the ONS has recorded: `change_notice` (its explanation) and `previous_date` |
| `source`, `licence`, `attribution`, `observed_at` | Provenance on every record |

Values are the ONS's as published. Nothing is renamed, re-timed or estimated; the actor does not convert times to UK local time.

### Cost guidance

The forward calendar is about 400 releases in total, so a full forward pull costs about $13 on Gold ($20 on Free). A "next 14 days" run on 27 September 2026 returned 26 records (under $1 on Gold). The postponement watch over a year's window was 59 records. The full history of about 9,800 releases is about $330 on Gold, once; after that a daily or weekly `nextDays` or `lastDays` run keeps you current for a few dollars a month.

### How a run works

The actor checks robots.txt on the API host (api.beta.ons.gov.uk serves none — HTTP 404 — which is recorded in the run receipt as "no policy", not as permission), then asks the ONS search API for each release type. Large date ranges are split into windows small enough to come back in one response each, because offset paging on this API is not stable: in testing, paging through the published list by offset returned 9,091 of 9,092 releases on some runs. With single-response windows every test run returned all 9,092, and each run's receipt compares what came back with the total the ONS reports for each type. Matching records are pushed to your dataset first and charged only after they are delivered; if you set a maximum charge, the run stops cleanly when it is reached. Test runs took 4–35 seconds. If the ONS API cannot be reached after several retries, the run ends with a clear message and nothing is charged.

### Honest limitations

- **UK releases only, ONS only.** This is the ONS's own calendar. Releases by other UK producers (HM Treasury, the Bank of England, HMRC and other departments) that appear on the wider GOV.UK research and statistics calendar are not in it.
- **No figures.** The calendar says what is released and when — not the numbers, forecasts or "actual vs consensus" that trading calendars show.
- **History starts in 2016.** The ONS calendar API holds published releases from February 2016.
- **Dates are UTC.** The ONS publishes times in UTC; a 07:00 UK release in summer appears as 06:00Z.
- **Provisional dates can be vague.** On 27 September 2026, 120 upcoming releases were not yet finalised (`finalised: false`). Many carry the ONS's provisional wording in `provisional_date` — a month such as "October 2026", or sometimes a day — but not all do, so use `finalised` to tell confirmed dates from provisional ones.
- **Search words are the ONS's search.** `query` uses the ONS's own matching, which is broad; `titleContains` keeps only titles containing your exact phrase (not case-sensitive).
- **The API host is labelled beta.** The ONS has served its calendar from api.beta.ons.gov.uk for years; if it moves, the run reports it rather than failing silently.

### Licence and attribution

The ONS states that its statistics and content are published under the **Open Government Licence v3.0**. Every record carries the ONS's attribution form: *Source: Office for National Statistics licensed under the Open Government Licence v.3.0; reformatted by NexGen Signal.* This actor is not affiliated with or endorsed by the Office for National Statistics.

### Differentiation

Economic-calendar actors on the Store — such as scrapemint/forexfactory-economic-calendar, pintostudio/economic-calendar-data-investing-com, gochujang/economic-calendar-tracker and solidcode/economic-calendar-data-scraper — read third-party sites (ForexFactory, Investing.com) that list a selection of headline events. This actor reads the statistics producer itself: every ONS release rather than a headline selection, confirmed versus provisional status, the ONS's own postponement notices with previous dates, and cancelled releases, all under an open government licence you can redistribute with attribution.

### The NexGen Signal family

Part of NexGen Signal — official-source data products, no API keys, pay per record. Related actors for the numbers behind the releases:

- [UK GDP Four-Decimal Time Series - ONS](https://apify.com/nexgensignal/uk-gdp-four-decimal-time-series)
- [UK CPIH Inflation Time Series - ONS](https://apify.com/nexgensignal/uk-cpih-time-series-observations)
- [UK Labour Market Time Series - ONS](https://apify.com/nexgensignal/uk-labour-market-time-series)
- [UK Retail Sales Index Monthly - ONS](https://apify.com/nexgensignal/uk-retail-sales-index-observations)
- [UK Construction Output Monthly - ONS](https://apify.com/nexgensignal/uk-construction-output-observations)

# Actor input Schema

## `releaseTypes` (type: `array`):

Which parts of the ONS release calendar to read. Upcoming covers confirmed and provisional release dates.

## `nextDays` (type: `integer`):

Only releases dated from today to N days ahead — the forward calendar. Leave empty for no limit.

## `lastDays` (type: `integer`):

Only releases dated in the last N days (and any later). Leave empty for no limit.

## `fromDate` (type: `string`):

Optional. Only releases dated on or after this day (YYYY-MM-DD, UTC).

## `toDate` (type: `string`):

Optional. Only releases dated on or before this day (YYYY-MM-DD, UTC).

## `query` (type: `string`):

Optional. Passed to the ONS search, e.g. inflation, GDP, labour market. The ONS matches titles and summaries.

## `titleContains` (type: `string`):

Optional. Keep only releases whose title contains this text exactly (not case-sensitive), e.g. Consumer price inflation.

## `onlyDateChanges` (type: `boolean`):

Keep only releases whose date the ONS has changed, with the ONS's change notice and the previous date.

## `excludeCensus` (type: `boolean`):

Drop releases the ONS flags as Census releases.

## `sortBy` (type: `string`):

Which releases come first when more match than your maximum.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed in this run. The whole calendar is about 9,800 releases.

## Actor input object example

```json
{
  "releaseTypes": [
    "upcoming",
    "published"
  ],
  "onlyDateChanges": false,
  "excludeCensus": false,
  "sortBy": "calendar",
  "maxRecords": 10
}
```

# Actor output Schema

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

The delivered records.

# 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 = {
    "releaseTypes": [
        "upcoming",
        "published"
    ],
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/uk-ons-release-calendar-records").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 = {
    "releaseTypes": [
        "upcoming",
        "published",
    ],
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/uk-ons-release-calendar-records").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 '{
  "releaseTypes": [
    "upcoming",
    "published"
  ],
  "maxRecords": 10
}' |
apify call nexgensignal/uk-ons-release-calendar-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/uk-ons-release-calendar-records"
        }
    }
}
```

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/s1DT1lSNoJ8ZKJ7YG/builds/2YKCm7S0u2ZdOOiUX/openapi.json
