# UK Companies House Register and New Companies (`maliksaid/uk-companies-register`) Actor

Download UK companies from the Companies House register: number, name, status, type, SIC codes, registered office address and filing dates. Filter by SIC code, postcode area, status and incorporation date. Get new companies each month. No API key.

- **URL**: https://apify.com/maliksaid/uk-companies-register.md
- **Developed by:** [Malik Said](https://apify.com/maliksaid) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 companies

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 Register and New Companies

Get UK company data from the Companies House register as a clean table. Each record has the company number, name, status, type, SIC codes, registered office address and filing dates. Filter by industry, postcode area, status, type and incorporation date. Get the new companies incorporated each month. You need no API key.

The data comes from the Companies House Free Company Data Product. Companies House publishes it once a month. It lists every live company on the register.

### What it covers

| Item | Value |
|---|---|
| Source | Companies House Free Company Data Product |
| Companies in the file | 5,704,711 live companies (file dated 1 October 2026, counted on 21 October 2026) |
| Update | Monthly, within 5 working days of month end |
| Data up to | The end of the month before the file date |
| Coverage | England, Wales, Scotland and Northern Ireland |

### What you get

| Field | Meaning |
|---|---|
| `companyNumber` | Companies House registration number |
| `companyName` | Registered company name |
| `companyStatus` | Status, for example Active or Liquidation |
| `companyType` | Company type, for example Private Limited Company |
| `countryOfOrigin` | Country of origin |
| `incorporationDate` | Date of incorporation |
| `addressLine1`, `addressLine2`, `postTown`, `county`, `country`, `postcode` | Registered office address |
| `postcodeArea` | Letters at the start of the postcode, for example EC |
| `poBox` | Registered office PO box |
| `sicCodes`, `sicDescriptions` | Up to four SIC 2007 codes and their descriptions |
| `accountsCategory` | Category of the last accounts, for example MICRO ENTITY |
| `accountingReferenceDate` | Accounting reference date as dd-mm |
| `accountsNextDueDate`, `accountsLastMadeUpDate` | Accounts dates |
| `confirmationStatementNextDueDate`, `confirmationStatementLastMadeUpDate` | Confirmation statement dates |
| `accountsOverdue`, `confirmationStatementOverdue` | True when the next due date is before the file date. Null when the file has no due date |
| `mortgageChargesTotal`, `mortgageChargesOutstanding`, `mortgageChargesPartSatisfied`, `mortgageChargesSatisfied` | Counts of registered charges |
| `previousNames` | Earlier company names with the date of each change |
| `registerUrl` | Company page on the Companies House service |
| `uri` | Companies House URI |
| `snapshotDate` | Date of the monthly file the record came from |
| `scrapedAt` | When the Actor collected the record |

Sample record from a test run:

```json
{
    "id": "16092999",
    "companyNumber": "16092999",
    "companyName": "!ABRIDGE TAX LTD",
    "companyStatus": "Active",
    "companyType": "Private Limited Company",
    "countryOfOrigin": "United Kingdom",
    "incorporationDate": "2024-11-21",
    "dissolutionDate": null,
    "addressLine1": "82 GREAT NORTH ROAD",
    "addressLine2": "GREAT NORTH BUSINESS CENTRE",
    "postTown": "HATFIELD",
    "county": null,
    "country": "UNITED KINGDOM",
    "postcode": "AL9 5BL",
    "postcodeArea": "AL",
    "poBox": null,
    "sicCodes": ["62020"],
    "sicDescriptions": ["Information technology consultancy activities"],
    "accountsCategory": "MICRO ENTITY",
    "accountingReferenceDate": "30-11",
    "accountsNextDueDate": "2027-08-31",
    "accountsLastMadeUpDate": "2025-11-30",
    "confirmationStatementNextDueDate": "2026-12-04",
    "confirmationStatementLastMadeUpDate": "2025-11-20",
    "accountsOverdue": false,
    "confirmationStatementOverdue": false,
    "mortgageChargesTotal": 0,
    "mortgageChargesOutstanding": 0,
    "mortgageChargesPartSatisfied": 0,
    "mortgageChargesSatisfied": 0,
    "previousNames": [{ "name": "BLUECASE LTD", "changedOn": "2026-03-27" }],
    "registerUrl": "https://find-and-update.company-information.service.gov.uk/company/16092999",
    "uri": "http://business.data.gov.uk/id/company/16092999",
    "snapshotDate": "2026-10-01",
    "scrapedAt": "2026-10-21T12:33:56.497Z"
}
```

Empty fields are `null`. Many companies have no second address line, county or PO box. Companies without a SIC code have empty `sicCodes`. Overseas entities often have no UK postcode.

### How to use it

1. Set your filters, for example SIC code `62` and postcode area `EC`.
2. Set **Maximum companies**. One run saves at most 50,000 companies.
3. Run the Actor. Download the result as CSV, Excel or JSON.

To get new companies every month:

1. Turn on **New incorporations in the latest month**.
2. Turn on **Monitor mode**.
3. Schedule the Actor for the 8th of each month. The new file is out by then.

The file published in early October covers companies incorporated in September. In monitor mode, a second run on the same file with the same filters stops at once and costs only the start fee.

### Input

| Option | Default | Meaning |
|---|---|---|
| Company numbers | None | Look up companies by number, for example `00445790` or `SC123456`. The run stops once all are found |
| SIC codes | None (form example `62`) | Keep companies with a SIC code that starts with these digits |
| SIC description words | None | Keep companies whose SIC description has one of these words, for example `dental` |
| Postcode areas | None | Letters match an area (`M`, `EC`). With digits it matches a district (`SW1A`) or a full postcode |
| Post towns | None | Keep companies in these post towns, for example `LEEDS` |
| Company status | None (form example Active) | Keep these statuses |
| Company types | None | Keep types that contain these words, for example `Limited Liability Partnership` |
| Incorporated on or after | None | Date as yyyy-mm-dd |
| Incorporated on or before | None | Date as yyyy-mm-dd |
| New incorporations in the latest month | Off | Keep companies incorporated in the month the file covers |
| Overdue filings | Off | Keep companies with overdue accounts, an overdue confirmation statement, or either one |
| Company name keywords | None | Keep companies whose current or previous name has one of these words |
| Exclude name words | None | Drop companies whose current name has one of these words |
| Monitor mode | Off | Return only companies not returned before |
| Monitor state key | `default` | Name of the monitor memory |
| Maximum companies | 100 | Stop after this many companies. 0 means the 50,000 cap |

Example input for new IT companies in London EC:

```json
{
    "sicCodes": ["62"],
    "postcodeAreas": ["EC"],
    "companyStatuses": ["Active"],
    "newIncorporationsOnly": true,
    "maxItems": 1000
}
```

Look up a list of companies you already hold:

```json
{
    "companyNumbers": ["00445790", "SC123456", "1234567"]
}
```

Short numbers are padded with zeros, so `1234567` becomes `01234567`. The run stops as soon as every number is found. A number that is not in the file, such as a dissolved company, makes the run read the whole file (about 10 minutes), and the status message counts it as not found.

Find dental practices in Leeds without knowing SIC codes:

```json
{
    "sicKeywords": ["dental"],
    "postTowns": ["LEEDS"],
    "nameExcludeKeywords": ["holdings"]
}
```

### Overdue accounts and confirmation statements

Each record says whether the company's accounts or confirmation statement is overdue. A filing is overdue when its next due date is before the file date in `snapshotDate`. The file holds data up to the end of the month before, so a company may have filed since. Check `registerUrl` for the latest state before you contact a company.

To list only overdue companies, set **Overdue filings** to "Accounts overdue", "Confirmation statement overdue" or "Either one overdue". Companies that are up to date are skipped and cost nothing.

```json
{
    "sicCodes": ["62"],
    "companyStatuses": ["Active"],
    "onlyOverdue": "either",
    "maxItems": 200
}
```

### How long a run takes

The Actor reads the monthly file as a stream. A run with broad filters stops as soon as it has enough companies. The default input finished in 3 seconds in a test run.

A run with narrow filters reads the whole file of 5.7 million companies. In test runs that took 9 minutes at 512 MB of memory and 15 minutes at 256 MB. The default memory is 512 MB and the default timeout is 30 minutes.

### Pricing

You pay a start fee of $0.04 per run and $1 per 1,000 companies saved. Companies skipped by your filters or by monitor mode cost nothing. A run that saves 5,000 companies costs $5.04.

### Data sources and use

- The data comes from the public Companies House download site. It needs no login.
- Companies House states that it imposes no rules on how information on the public register is used. You are responsible for following data protection law where it applies.
- The Actor returns company-level fields only. It does not collect officers, directors, persons with significant control or any other named person.
- The Actor leaves out the "care of" address field, because it can hold a person's name.
- Up-to-date details for one company are on its Companies House page. Use `registerUrl`.

### Support

Report a problem in the Issues tab. Include the run link.

# Actor input Schema

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

Optional. Look up these companies by number, for example 00445790 or SC123456. Short numbers are padded with zeros. The run stops once every number is found. A number that is missing (for example a dissolved company) makes the run read the whole file. Other filters still apply, so clear them for a plain lookup.

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

Keep companies with at least one SIC code that starts with one of these digits. Use 2 digits for a division (62 = computer programming and IT), or a full 5-digit code (62020). Leave empty for every industry.

## `sicKeywords` (type: `array`):

Keep companies with a SIC description that has one of these words, for example dental or software. Whole words, any case.

## `postcodeAreas` (type: `array`):

Keep companies whose registered office is in one of these postcode areas or districts. Letters only match an area (M = Manchester, EC = London EC). With digits it matches a district (SW1A) or a full postcode. Leave empty for the whole UK.

## `postTowns` (type: `array`):

Keep companies whose registered office post town is one of these, for example LEEDS. Any case.

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

Keep companies with one of these statuses. The file holds live companies only. Leave empty for every status.

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

Keep companies whose type contains one of these words, for example Private Limited Company, Limited Liability Partnership, Community Interest Company or Public Limited Company. Case does not matter. Leave empty for every type.

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

Keep companies incorporated on or after this date (yyyy-mm-dd).

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

Keep companies incorporated on or before this date (yyyy-mm-dd).

## `newIncorporationsOnly` (type: `boolean`):

Keep only companies incorporated in the month the latest file covers. The file published in early October covers September. Schedule the Actor monthly with this on.

## `onlyOverdue` (type: `string`):

Keep only companies whose next accounts or confirmation statement was due before the file date. Off keeps every company. Skipped companies are not charged.

## `nameKeywords` (type: `array`):

Keep companies whose current or previous name contains one of these words. Whole words only. Leave empty to keep every name.

## `nameExcludeKeywords` (type: `array`):

Drop companies whose current name has one of these words, for example holdings. Whole words, any case.

## `monitorMode` (type: `boolean`):

Return only companies that earlier monitor-mode runs with the same state key did not return. If the same monthly file was already read in full with the same filters, the run ends at once and costs only the start fee.

## `stateKey` (type: `string`):

Name of the memory that monitor mode uses. Use a different key for each separate watch list.

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

Stop after saving this many companies. One run saves at most 50,000. Set 0 to use that cap.

## Actor input object example

```json
{
  "companyNumbers": [],
  "sicCodes": [
    "62"
  ],
  "sicKeywords": [],
  "postcodeAreas": [],
  "postTowns": [],
  "companyStatuses": [
    "Active"
  ],
  "companyTypes": [],
  "newIncorporationsOnly": false,
  "onlyOverdue": "off",
  "nameKeywords": [],
  "nameExcludeKeywords": [],
  "monitorMode": false,
  "stateKey": "default",
  "maxItems": 100
}
```

# Actor output Schema

## `results` (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"
    ],
    "companyStatuses": [
        "Active"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maliksaid/uk-companies-register").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"],
    "companyStatuses": ["Active"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maliksaid/uk-companies-register").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"
  ],
  "companyStatuses": [
    "Active"
  ],
  "maxItems": 100
}' |
apify call maliksaid/uk-companies-register --silent --output-dataset

```

## MCP server setup

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

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/Q3F9xdiEtAVQItdpg/builds/wy74uXW4H6Tyi8Yq7/openapi.json
