# UK Companies House Feed: New Companies & Status Alerts (`seaf999ield/uk-companies-house-feed`) Actor

Daily feed of new UK company incorporations from the official Companies House API, filtered by SIC code, region, postcode and type, plus watchlist alerts for liquidation, administration, dissolution, overdue accounts and name/address changes. Company-level OGL data.

- **URL**: https://apify.com/seaf999ield/uk-companies-house-feed.md
- **Developed by:** [RustonRoad](https://apify.com/seaf999ield) (community)
- **Categories:** Lead generation, Business, Open source
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Companies House Feed: New Companies & Status Alerts

**A daily feed of every new UK company, plus alerts when companies you care about go into liquidation, administration or dissolution.** Built on the official **Companies House Public Data API** (Open Government Licence). No scraping, no browser, no login, and you don't need your own API key.

| Mode | What you get |
|---|---|
| 🆕 **new_companies** | Companies **incorporated** in a date range (default: yesterday). Filter by **SIC code**, **UK region**, **postcode prefix**, address text, **company type** and status |
| 👀 **watchlist** | Your list of company numbers, checked against the previous run. Outputs **only changes**: status (liquidation, administration, dissolved, strike-off proposal), **overdue accounts**, overdue confirmation statement, **name change**, **registered office change**, new insolvency history, with old and new values and Gazette / insolvency links |
| ⚠️ **status_changes** | **Dissolutions** in a date range (exact dates), plus companies that **newly entered administration, receivership, liquidation or insolvency proceedings** since your last run |

Company-level data only. **No directors, officers, PSCs or insolvency practitioner names** are requested or returned.

### Who uses it

- **Accountants and bookkeepers:** every new Ltd in your town each morning. They all need a year-end, a confirmation statement and a bank account, and you get the accounts due dates with each record.
- **Business insurers and brokers:** new companies by SIC code (construction, hospitality, haulage, care) for public liability, fleet and professional indemnity cover.
- **Banks, fintechs and payment providers:** a new-business acquisition feed for business accounts, card terminals and lending.
- **Web, marketing and IT agencies:** new businesses by region that need a website, domain, branding and IT.
- **New-business prospecting by SIC and region:** e.g. all new restaurants (56101) in Greater Manchester, or all new software companies (62012) in Scotland.
- **Supplier and customer due diligence / credit control:** watch your suppliers, customers or portfolio companies. Get alerted on liquidation, administration, strike-off and overdue accounts before you ship goods or extend credit.
- **Insolvency, turnaround and asset-recovery firms:** a daily list of companies entering administration or receivership and of new dissolutions.

### Input

| Field | Example | Notes |
|---|---|---|
| Mode | `new_companies` | or `watchlist`, `status_changes` |
| Days back | `1` | Last N full days ending **yesterday** (UK time). Ideal for a daily schedule with no overlap |
| Incorporated from / to | `2026-10-01` / `2026-10-07` | Explicit range, overrides Days back |
| SIC codes | `["62012","62020"]` | 5-digit SIC 2007 codes |
| UK regions | `["North West","Scotland"]` | Mapped from the postcode area |
| Postcode prefixes | `["M","SW1A","LS1 "]` | `M` matches the Manchester area only, not `ME` |
| Location text | `Bristol` | Address text match done by Companies House |
| Company types | `["ltd","llp"]` | |
| Fetch full company profile | `false` | On = official due dates, overdue flags and status detail (1 extra request per company) |
| Company numbers | `["00445790","00102498"]` | Watchlist mode |
| Monitor name | `my-suppliers` | Separate saved state per name |
| Max results | `1000` | Records to output per run. 0 = no limit |
| Companies House API key | *(optional, secret)* | Use your own free key for a dedicated quota |

**Example: yesterday's new software companies in London and the South East**

```json
{"mode":"new_companies","daysBack":1,"sicCodes":["62012","62020","62090"],"regions":["London","South East"],"maxResults":500}
```

**Example: watch three suppliers**

```json
{"mode":"watchlist","companyNumbers":["00445790","00102498","00214436"],"monitorName":"my-suppliers"}
```

**Example: insolvency and dissolution alerts for construction companies**

```json
{"mode":"status_changes","daysBack":1,"statusTypes":["dissolved","administration","receivership","liquidation"],"sicCodes":["41201","41202","43999"],"monitorName":"construction"}
```

### Output

One dataset item per company (**Companies** view) or per change (**Changes** view). A `RUN_SUMMARY` record in the key-value store holds counts, the date range, the filters and the API requests used.

**Company record (new_companies)**

```json
{"recordType":"company","companyNumber":"17527446","companyName":"EUCLID PROJECT LIMITED","companyStatus":"active","companyType":"ltd","incorporationDate":"2026-10-19","sicCodes":["62012","63110"],"sicDescriptions":["Business and domestic software development","Data processing, hosting and related activities"],"registeredOfficeAddress":"Wylam, Poplar Dock Marina, Boardwalk Place, London, E14 5SH, England","locality":"London","postcode":"E14 5SH","postcodeArea":"E","region":"London","jurisdiction":"england-wales","accountsNextDue":"2028-07-19","accountsNextMadeUpTo":"2027-10-31","confirmationStatementNextDue":"2027-11-01","confirmationStatementNextMadeUpTo":"2027-10-18","dueDatesSource":"calculated","companyUrl":"https://find-and-update.company-information.service.gov.uk/company/17527446","source":"Companies House Public Data API","licence":"Open Government Licence v3.0"}
```

**Change record (watchlist / status_changes)**

```json
{"recordType":"change","changeType":"STATUS_CHANGED","companyNumber":"NI645178","companyName":"EXAMPLE TRADING LIMITED","companyStatus":"administration","field":"companyStatus","oldValue":"active","newValue":"administration","isDistressSignal":true,"insolvencyCases":[{"caseNumber":"1","caseType":"in-administration","dates":[{"type":"administration-started-on","date":"2023-10-17"}]}],"companyUrl":"https://find-and-update.company-information.service.gov.uk/company/NI645178","insolvencyUrl":"https://find-and-update.company-information.service.gov.uk/company/NI645178/insolvency","gazetteUrl":"https://www.thegazette.co.uk/company/NI645178","detectedAt":"2026-10-20T09:00:00+00:00","previousCheckAt":"2026-10-19T09:00:00+00:00"}
```

Change types: `STATUS_CHANGED`, `NAME_CHANGED`, `ADDRESS_CHANGED`, `ACCOUNTS_OVERDUE`, `CONFIRMATION_STATEMENT_OVERDUE`, `INSOLVENCY_HISTORY_ADDED`, `COMPANY_NOT_FOUND`, `DISSOLVED`, `ENTERED_ADMINISTRATION`, `ENTERED_RECEIVERSHIP`, `ENTERED_LIQUIDATION`, `ENTERED_INSOLVENCY_PROCEEDINGS`, `ENTERED_VOLUNTARY_ARRANGEMENT`.

### How it works

- **new_companies** uses the Companies House advanced search, reading 5,000 records per request. Large date ranges are split automatically to get past the API's 10,000-result paging limit. For new companies, the accounts and confirmation statement due dates follow the statutory rules (first accounts 21 months after incorporation, or 18 for a PLC; first confirmation statement 1 year + 14 days). Turn on **Fetch full company profile** to get the official values instead.
- **watchlist** fetches each profile and compares it with the snapshot saved in the named key-value store `ch-watchlist-<monitorName>`. **The first run saves the baseline only**; changes appear from the second run.
- **status_changes**: dissolutions come with their official date. Companies House has no "date entered administration" filter, so for insolvency statuses the actor compares the full list against your previous run (the first run is a baseline). Liquidation covers 100k+ companies, so add filters or raise **Max API requests**.
- **Rate limits:** requests are throttled to ~550 per 5 minutes (Companies House allows 600 per key), with back-off on HTTP 429 and a per-run request cap.

**Schedule it daily** (e.g. 07:00 UK time) and send results to Google Sheets, HubSpot, Slack, email, Make, Zapier or n8n through Apify integrations and webhooks.

### Pricing

Pay per event: you pay only for the records you receive.

| Event | Price | When |
|---|---|---|
| Company record | **$0.003** ($3 per 1,000) | Each company returned in new_companies mode |
| Status change alert | **$0.01** | Each detected change in watchlist / status_changes mode |

A baseline watchlist run, or a day with no changes, costs almost nothing. Use **Max results** to cap your spend per run.

### Data, licence and privacy

- **Source:** [Companies House Public Data API](https://developer.company-information.service.gov.uk/). Contains public sector information licensed under the **Open Government Licence v3.0**. Attribution is included on every record.
- **Company-level only:** no officers, directors, PSCs or insolvency practitioners. The address "care of" line is dropped. For very small companies the registered office can be a home address; use the data in line with UK GDPR and PECR (e.g. B2B marketing rules).
- **Regions** are derived from the postcode area and are approximate where an area crosses a regional boundary.
- This is a data feed, not credit, legal or insolvency advice.

### FAQ

- **Do I need a Companies House API key?** No. Optionally add your own free key for a dedicated quota.
- **Why is my first watchlist run empty?** It's the baseline. Changes are reported from the next run.
- **How many companies are incorporated per day?** Usually 2,000–4,000 on a working day. Filter by SIC code or region to keep your feed focused.
- **Can I get historical incorporations?** Yes. Set an explicit Incorporated from / to range.

*Keywords: Companies House API, new UK companies list, new company incorporations UK, newly registered companies, UK company leads, companies by SIC code, Companies House monitoring, company status alerts, liquidation alerts, administration alerts, dissolved companies list, supplier due diligence UK.*

# Actor input Schema

## `mode` (type: `string`):

What to fetch. 'new_companies' is a daily lead feed of new incorporations. 'watchlist' monitors your list of company numbers and outputs only changes since the previous run. 'status_changes' outputs dissolutions in a date range and companies that newly entered an insolvency status since the previous run.

## `companiesHouseApiKey` (type: `string`):

Optional: your own free Companies House REST API key (developer.company-information.service.gov.uk). If empty, the actor's built-in key is used. Using your own key gives you a dedicated 600 requests / 5 min quota.

## `daysBack` (type: `integer`):

Used when no explicit From date is set: covers the last N full days, ending yesterday (UK time). 1 = yesterday only, ideal for a daily schedule.

## `incorporatedFrom` (type: `string`):

new_companies: first incorporation date to include. Overrides 'Days back'.

## `incorporatedTo` (type: `string`):

new_companies: last incorporation date to include (default: yesterday, or today if a From date is set).

## `changedFrom` (type: `string`):

status_changes: first dissolution date to include. Overrides 'Days back'.

## `changedTo` (type: `string`):

status_changes: last dissolution date to include.

## `sicCodes` (type: `array`):

Only companies with any of these 5-digit SIC 2007 codes, e.g. 62012 (software development), 56101 (restaurants), 41100 (property development), 69201 (accounting). Empty = all industries.

## `regions` (type: `array`):

Only companies whose registered office postcode is in these regions (mapped from the postcode area). Empty = all.

## `postcodePrefixes` (type: `array`):

Registered office postcode starts with, e.g. 'M' (Manchester area only, not 'ME'), 'SW1A', 'LS1 ', 'EH'. Empty = all.

## `location` (type: `string`):

Free-text match on the registered office address done by Companies House, e.g. 'Bristol'.

## `companyTypes` (type: `array`):

Only these company types. Empty = all.

## `companyStatuses` (type: `array`):

new_companies only: current status filter. Empty = all (newly incorporated companies are almost always 'active').

## `fetchFullProfile` (type: `boolean`):

new_companies: call the company profile endpoint for each record (1 extra API request per company). Gives jurisdiction, status detail and the official accounts / confirmation-statement dates. Off = due dates are calculated with the statutory rules for new companies (dueDatesSource = 'calculated'), which is much faster.

## `companyNumbers` (type: `array`):

Watchlist mode: Companies House numbers to monitor, e.g. 00445790, SC123456. Leading zeros are added for numeric numbers.

## `monitorName` (type: `string`):

State is saved under this name (named key-value store ch-watchlist-<name> or ch-status-<name>), so you can run separate monitors, e.g. one per client. A new name starts a new baseline.

## `changeTypes` (type: `array`):

Watchlist: which changes to output. Empty = all.

## `statusTypes` (type: `array`):

status_changes: 'dissolved' uses exact dissolution dates in the date range. The insolvency statuses are compared with the previous run of the same monitor (first run = baseline). 'liquidation' covers 100k+ companies, so use it with filters or a higher request cap.

## `maxWatchlistSize` (type: `integer`):

Safety cap on how many company numbers are checked per run (1 API request each).

## `maxResults` (type: `integer`):

Maximum records to output (and be charged for) per run. 0 = no limit.

## `maxRequests` (type: `integer`):

Cap on Companies House API requests per run. The actor throttles to ~550 requests / 5 min and backs off on HTTP 429.

## Actor input object example

```json
{
  "mode": "new_companies",
  "daysBack": 1,
  "sicCodes": [],
  "regions": [],
  "postcodePrefixes": [],
  "companyTypes": [],
  "companyStatuses": [],
  "fetchFullProfile": false,
  "companyNumbers": [
    "00445790",
    "00102498",
    "01026167"
  ],
  "monitorName": "default",
  "changeTypes": [],
  "statusTypes": [
    "dissolved",
    "administration",
    "receivership",
    "insolvency-proceedings"
  ],
  "maxWatchlistSize": 2000,
  "maxResults": 100,
  "maxRequests": 1000
}
```

# Actor output Schema

## `companies` (type: `string`):

New company records (new_companies mode).

## `changes` (type: `string`):

Change alerts (watchlist / status_changes modes).

## `runSummary` (type: `string`):

JSON with counts, date range, filters, API requests and baseline flags.

# 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 = {
    "mode": "new_companies",
    "daysBack": 1,
    "companyNumbers": [
        "00445790",
        "00102498",
        "01026167"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("seaf999ield/uk-companies-house-feed").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 = {
    "mode": "new_companies",
    "daysBack": 1,
    "companyNumbers": [
        "00445790",
        "00102498",
        "01026167",
    ],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("seaf999ield/uk-companies-house-feed").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 '{
  "mode": "new_companies",
  "daysBack": 1,
  "companyNumbers": [
    "00445790",
    "00102498",
    "01026167"
  ],
  "maxResults": 100
}' |
apify call seaf999ield/uk-companies-house-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seaf999ield/uk-companies-house-feed"
        }
    }
}
```

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/DM4M6y0ZynWs5JBCb/builds/Ef7DeyO211paQUnRj/openapi.json
