# UK Companies House Scraper: New Company Incorporations (`agents001/uk-companies-house-feed`) Actor

Returns new UK company incorporations from Companies House: company number, name, status, type, incorporation date, registered office address and SIC codes. Filter by date, SIC code, postcode and company type. Add your own free API key for live daily data and filing events.

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

## Pricing

from $2.00 / 1,000 company 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 Companies House Scraper: New Company Incorporations

Get newly incorporated UK companies as clean structured data: **one record per company** with company number, name, status, company type, incorporation date, registered office address (split into lines, town, postcode, postcode area and district) and SIC codes with their descriptions. Filter by incorporation date, SIC code, postcode area or district, company type and status.

Add your own free Companies House API key and you also get **filing events**: accounts filed, confirmation statements, new charges, registered office moves, share allotments, liquidation and insolvency notices, strike-off notices and more, with the form type and filing date.

Schedule it daily with **Only records not seen in previous runs** switched on to get just the companies or filings that are new since your last run.

### What you get

**Company records** (`recordType: "company"`):

| Field | Example |
|---|---|
| `companyNumber`, `companyName` | `17490939`, `THROUGH THE VYNE LTD` |
| `companyStatus`, `companyStatusDetail`, `companyStatusLabel` | `active`, `active-proposal-to-strike-off`, `Active` |
| `companyType`, `companySubtype`, `companyTypeLabel` | `ltd`, `community-interest-company`, `Private Limited Company` |
| `incorporationDate`, `dissolutionDate` | `2026-09-30` |
| `addressLine1`, `addressLine2`, `postTown`, `county`, `country` | Registered office address |
| `postcode`, `postcodeArea`, `postcodeDistrict` | `M12 6AE`, `M`, `M12` |
| `registeredAddress` | The full registered office address on one line |
| `sicCodes`, `sicDescriptions` | `["62012"]`, `["Business and domestic software development"]` |
| `accountsCategory`, `accountsLastMadeUpDate`, `accountsNextDueDate` | Accounts dates where published |
| `confirmationStatementLastMadeUpDate`, `confirmationStatementNextDueDate` | Confirmation statement dates |
| `companyUrl` | Link to the company on Companies House |
| `isNew`, `firstSeenAt` | Whether the record is new since the previous run with the same input |
| `dataSource`, `dataAsOf` | Which Companies House product the record came from, and its date |

**Filing records** (`recordType: "filing"`, API key needed):

| Field | Example |
|---|---|
| `filingType` | `AA`, `CS01`, `MR01`, `AD01`, `GAZ1`, `LIQ02` |
| `filingCategory` | `accounts`, `confirmation-statement`, `mortgage`, `address`, `gazette`, `insolvency` |
| `filingDate`, `actionDate` | `2026-10-20` |
| `filingDescription`, `filingDescriptionCode` | `Registered office address changed from ... on 20 October 2026` |
| `transactionId`, `filingUrl` | Link to the filed document (PDF) where one exists |
| `companyNumber`, `companyName`, `companyStatus`, `companyType`, `incorporationDate`, `postcode`, `sicCodes` | The company the filing belongs to |

The Output tab has two views: **Companies** and **Filing events**. A run report is saved in the key-value store as `RUN_SUMMARY`.

### Two data sources: with or without an API key

| | Without a key (default) | With your free API key |
|---|---|---|
| Source | Companies House Free Company Data Product, a monthly snapshot of every live UK company | Companies House Public Data API |
| Freshness | Updated monthly, within 5 working days of month end | Live, including companies registered today |
| "Last N days" counts back from | The snapshot date | Today |
| Dissolved companies | No (live companies only) | Yes |
| Filing events | No | Yes |
| Speed | 10 seconds to about 2 minutes (it reads up to 7 large files) | Fast for daily windows; about 2 requests a second |

**Getting a key:** register for free on the Companies House Developer Hub (developer.company-information.service.gov.uk), create an application and add a **REST** API key. Paste it into **Your Companies House API key**. The input field is secret: Apify stores it encrypted, and the Actor only sends it to the Companies House API. Each key may make 600 requests every 5 minutes, and the Actor paces itself to stay under that.

### Who it is for

- **Sales and business development teams** prospecting new companies in their sector and region: new software companies in Manchester, new restaurants in Bristol, new holding companies anywhere.
- **Accountants, banks, insurers and business service providers** who want every new company in their patch, every day.
- **M\&A, investment and credit analysts** watching filings for accounts, new charges, insolvency and strike-off notices across a list of companies.
- **Researchers and journalists** tracking company formation by sector and place.

### Quick start

1. Click **Start** with no input. You get up to 1,000 UK companies incorporated in the last 30 days of the latest monthly snapshot.
2. Add filters, for example SIC code `62` (all computer programming and consultancy) and postcode prefix `M` (Greater Manchester).
3. Add your free API key for live data, and schedule a daily run with `incorporatedWithinDays: 2` and `onlyNew: true` to get each day's new companies.
4. For filing events, set **What to return** to `filings` and either list the company numbers you want to watch, or let the Actor take companies from your search filters.

### Input

| Field | What it does | Default |
|---|---|---|
| `mode` | `companies` (one record per company) or `filings` (one record per filing event, needs a key) | `companies` |
| `incorporatedWithinDays` | Companies incorporated in the last N days. `0` means any date | 30 |
| `incorporatedFrom`, `incorporatedTo` | A fixed date range instead, YYYY-MM-DD | none |
| `sicCodes` | SIC 2007 codes or prefixes, for example `62012` or `62` | all |
| `postcodePrefixes` | Postcode areas, districts or sectors: `M`, `EC1`, `SW1A 1`. `EC1` also matches EC1A and EC1V; `M1` does not match M14 | all |
| `companyTypes` | Companies House type codes such as `ltd`, `llp`, `plc`, plus `community-interest-company` | all |
| `companyStatuses` | `active`, `liquidation`, `administration`, `receivership`, `voluntary-arrangement`, `insolvency-proceedings`, `dissolved` | all |
| `companyNumbers` | Look up these companies (other company filters are then ignored). In filings mode, the companies to watch | none |
| `filingCategories` | Filings mode: `accounts`, `confirmation-statement`, `mortgage`, `address`, `capital`, `gazette`, `insolvency`, `liquidation` and more | all |
| `filedWithinDays` | Filings mode: filings made in the last N days. `0` means all | 30 |
| `maxCompaniesForFilings` | Filings mode without company numbers: how many companies from the search to check | 100 |
| `apiKey` | Your free Companies House REST API key (secret) | none |
| `onlyNew` | Only return companies or filings not returned by a previous run with the same filters | false |
| `maxItems` | Stop after this many records. `0` means no limit | 1000 |

Example: every new tech company in London and Manchester, daily, with a key:

```json
{
  "apiKey": "<your key>",
  "incorporatedWithinDays": 2,
  "sicCodes": ["62", "63"],
  "postcodePrefixes": ["EC", "WC", "E", "N", "M"],
  "onlyNew": true
}
```

Example: accounts, charges and insolvency events for a watch list:

```json
{
  "apiKey": "<your key>",
  "mode": "filings",
  "companyNumbers": ["00445790", "SC123456"],
  "filingCategories": ["accounts", "mortgage", "insolvency", "liquidation", "gazette"],
  "filedWithinDays": 7,
  "onlyNew": true
}
```

### Output example

```json
{
  "recordType": "company",
  "companyNumber": "17490939",
  "companyName": "THROUGH THE VYNE LTD",
  "companyStatus": "active",
  "companyStatusDetail": null,
  "companyStatusLabel": "Active",
  "companyType": "ltd",
  "companySubtype": null,
  "companyTypeLabel": "Private Limited Company",
  "incorporationDate": "2026-09-30",
  "dissolutionDate": null,
  "postTown": "MANCHESTER",
  "postcode": "M12 6AE",
  "postcodeArea": "M",
  "postcodeDistrict": "M12",
  "sicCodes": ["62012", "70229", "73110", "73200"],
  "sicDescriptions": ["Business and domestic software development", "Management consultancy activities other than financial management", "Advertising agencies", "Market research and public opinion polling"],
  "accountsNextDueDate": "2028-06-30",
  "confirmationStatementNextDueDate": "2027-10-13",
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/17490939",
  "dataSource": "free-company-data-product",
  "dataAsOf": "2026-10-01",
  "isNew": true,
  "firstSeenAt": "2026-10-23"
}
```

### Pricing

This Actor uses **pay per event** pricing, with platform usage included:

- **$3.00 per 1,000 records** (`company-record` event, $0.003 each). Company records and filing records are both charged as one `company-record` event.

You only pay for records saved to your dataset, so filters, `onlyNew` and `maxItems` keep costs down. A daily `onlyNew` run for one sector and region typically returns tens of records. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

### How "only new" works

When `onlyNew` is on, the Actor remembers which company numbers (or filing transaction ids) it has already returned for this exact input in a key-value store in your account called `agents001-uk-companies-house-feed-state`. The next run only returns records that are not on that list. The first run returns everything that matches. Changing the filters starts a fresh history; adding or changing your API key does not. The store holds ids and dates only, and entries older than 400 days are removed.

With `onlyNew` off, the Actor does not open or update this store, so every record has `isNew` set to true. If a run stops with a message that it cannot open the store (for example because another Actor in your account already uses that name), enter a different name in **State store name** and run again.

### Data source, licence and privacy

All data comes from Companies House, the UK registrar of companies, through its official Public Data API (with your key) or its Free Company Data Product (without a key). Companies House states that it "imposes no rules or requirements on how the information on the public register is used", and its own material is published under the Open Government Licence v3.0. Contains public sector information from Companies House.

This Actor returns **company-level data only**. It never calls the officer or persons with significant control endpoints, never returns officer or PSC filings, drops "care of" address lines (which can name a person), and renders filing descriptions without any person's name. Some small companies use a home address as their registered office; that address is on the public register as the company's address. If you use the data for marketing, you remain responsible for complying with UK GDPR and PECR.

### FAQ

**Why do records without a key stop at the end of last month?**
The free snapshot is published monthly. Add your free API key for companies registered up to today.

**How are records ordered without a key?**
The monthly snapshot is split into 7 files sorted by company name. The Actor reads them in order, sorts each file's matches newest first, and stops when `maxItems` is reached. With an API key, results come newest day first across the whole run.

**Why is `companyType` empty for community interest companies without a key?**
The monthly snapshot labels them only as "Community Interest Company", so the Actor sets `companySubtype` to `community-interest-company` and leaves the base type empty. With a key, both are filled.

**Can I get directors or shareholders?**
No. Officers and persons with significant control are individuals, so this Actor does not collect them.

**Something looks wrong. What should I do?**
Open an issue on the Actor's Issues tab with the run link and your input (leave out your API key).

### Disclaimer

This Actor is independent and is not affiliated with, endorsed by or sponsored by Companies House or the UK Government. Check the official register before relying on any record.

# Actor input Schema

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

'companies' returns one record per company (new incorporations, or the companies you list). 'filings' returns one record per filing event (accounts, confirmation statements, charges, insolvency, strike-off notices and more) and needs your API key.

## `incorporatedWithinDays` (type: `integer`):

Only companies incorporated within this many days. With an API key the days count back from today. Without a key they count back from the date of the monthly snapshot. 0 means any date. Ignored when you set the dates below or list company numbers.

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

Start of a fixed incorporation date range, YYYY-MM-DD. Overrides 'last N days'.

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

End of a fixed incorporation date range, YYYY-MM-DD.

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

Only companies with any of these SIC 2007 codes. Give a full 5-digit code (62012) or a shorter prefix for a whole group (62 matches every computer programming and consultancy code).

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

Only companies whose registered office postcode is in any of these areas, districts or sectors. 'M' is all Manchester postcodes, 'EC1' is EC1 and its sub-districts (EC1A, EC1M, EC1V), 'SW1A 1' is one sector. 'M1' does not match M14.

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

Only these company types. Leave empty for all types.

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

Only companies with these statuses. Leave empty for all. The monthly snapshot holds live companies only, so 'dissolved' needs an API key.

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

Look up these companies by number instead of searching (for example 00445790 or SC123456). The other company filters are then ignored. In filings mode these are the companies whose filings you get. Without an API key, up to 500 numbers per run.

## `filingCategories` (type: `array`):

Filings mode only. Leave empty for every category. Officer and PSC filings are never returned because they are about individuals.

## `filedWithinDays` (type: `integer`):

Filings mode only. Only filings made within this many days. 0 means all filings.

## `maxCompaniesForFilings` (type: `integer`):

Filings mode without company numbers: how many companies from the search to read filings for. Each company is one or more API requests.

## `apiKey` (type: `string`):

Optional. A free REST API key from the Companies House Developer Hub (developer.company-information.service.gov.uk). With a key you get live data, dissolved companies and filing events. Without it the Actor uses the free monthly snapshot of live companies. The key is stored encrypted and only sent to the Companies House API.

## `onlyNew` (type: `boolean`):

Remember which companies or filings were already returned for this exact input and only return new ones. The first run returns everything that matches. Ideal for scheduled daily runs. Changing the filters starts a fresh history.

## `maxItems` (type: `integer`):

Stop after this many records. 0 means no limit. You pay per record returned.

## `stateStoreName` (type: `string`):

Only used when 'Only records not seen in previous runs' is on. Name of the key-value store in your account that keeps the onlyNew history. Each different input gets its own record inside it. If a run reports that it cannot open the store, enter a different name here.

## `requestDelaySecs` (type: `number`):

Minimum seconds between Companies House API requests. The API allows 600 requests per 5 minutes per key, so keep this at 0.5 or more.

## Actor input object example

```json
{
  "mode": "companies",
  "incorporatedWithinDays": 30,
  "sicCodes": [
    "62"
  ],
  "filedWithinDays": 30,
  "maxCompaniesForFilings": 100,
  "onlyNew": false,
  "maxItems": 1000,
  "stateStoreName": "agents001-uk-companies-house-feed-state",
  "requestDelaySecs": 0.55
}
```

# Actor output Schema

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

No description

## `filings` (type: `string`):

No description

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

No description

# 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 = {
    "sicCodes": [
        "62"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("agents001/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 = { "sicCodes": ["62"] }

# Run the Actor and wait for it to finish
run = client.actor("agents001/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 '{
  "sicCodes": [
    "62"
  ]
}' |
apify call agents001/uk-companies-house-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,agents001/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/eifcW6bZiZEzNy8Zb/builds/dxkO8iStlucREDQJk/openapi.json
