# Companies House Data API: UK Company Register (`smoked_drift/uk-companies-house-data`) Actor

Companies House data for 5M+ UK companies: search the official register by SIC code, status, location and incorporation date. Returns company number, name, registered address, accounts, mortgages, SIC codes and previous names as JSON. Open Government Licence v3.0.

- **URL**: https://apify.com/smoked\_drift/uk-companies-house-data.md
- **Developed by:** [Titouan MARTY](https://apify.com/smoked_drift) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.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.

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 Company Data API: Companies House Register

Search over 5 million UK companies from the official Companies House register. Filter by SIC code, status, location, company type and incorporation date. Get company number, name, registered address, accounts, mortgages, SIC codes and previous names as clean JSON.

**No scraping.** Companies House publishes its register as a monthly bulk file for direct download. This Actor downloads the published archive, streams it, filters and normalises it — no browser, no proxy, no selectors to break.

***

### What you get

One dataset item per company:

| Group | Fields |
| --- | --- |
| **Identity** | company number, name, status, legal category, country of origin |
| **Dates** | incorporation date, dissolution date (ISO-8601) |
| **Registered address** | care of, PO box, line 1, line 2, town, county, country, postcode |
| **Accounts** | reference day and month, next due date, last made up date, account category |
| **Confirmation statement** | next due date, last made up date |
| **Mortgages** | charges, outstanding, part satisfied, satisfied |
| **SIC codes** | up to four codes, each split into code and description |
| **Previous names** | up to ten former names with the date of change |
| **Provenance** | register snapshot date, licence, attribution |

Every row carries the licence and the attribution string, because the Open Government Licence requires it.

***

### Sample output

Real row, from the September 2026 register snapshot:

```json
{
  "companyNumber": "16092999",
  "companyName": "!ABRIDGE TAX LTD",
  "status": "Active",
  "category": "Private Limited Company",
  "countryOfOrigin": "United Kingdom",
  "incorporationDate": "2024-11-21",
  "dissolutionDate": null,
  "registeredAddress": {
    "careOf": null,
    "poBox": null,
    "line1": "82 GREAT NORTH ROAD",
    "line2": "GREAT NORTH BUSINESS CENTRE",
    "postTown": "HATFIELD",
    "county": null,
    "country": "UNITED KINGDOM",
    "postCode": "AL9 5BL"
  },
  "accounts": {
    "accountRefDay": 30,
    "accountRefMonth": 11,
    "nextDueDate": "2027-08-31",
    "lastMadeUpDate": "2025-11-30",
    "category": "MICRO ENTITY"
  },
  "confirmationStatement": { "nextDueDate": "2026-12-04", "lastMadeUpDate": "2025-11-20" },
  "mortgages": { "charges": 0, "outstanding": 0, "partSatisfied": 0, "satisfied": 0 },
  "sicCodes": [
    { "code": "62020", "description": "Information technology consultancy activities" }
  ],
  "previousNames": [
    { "name": "BLUECASE LTD", "changedOn": "2026-03-27" }
  ],
  "companyUri": "http://business.data.gov.uk/id/company/16092999",
  "source": {
    "provider": "UK Companies House",
    "snapshot": "2026-09-01",
    "licence": "Open Government Licence v3.0"
  }
}
```

***

### Usage

#### Recent IT consultancies

```json
{
  "sicCodes": ["62020"],
  "activeOnly": true,
  "incorporatedAfter": "2026-01-01",
  "maxItems": 2000
}
```

#### Look up specific companies

```json
{
  "companyNumbers": ["08209948", "09446231"]
}
```

The fastest path: the Actor still scans the register, but it emits only what you asked for.

#### Companies in a city, by postcode

```json
{
  "postcodePrefix": "M",
  "status": ["Active"],
  "maxItems": 5000
}
```

#### Companies that changed their name

```json
{
  "hasPreviousNames": true,
  "activeOnly": true,
  "incorporatedAfter": "2025-01-01"
}
```

A rename is often the signal you want in due diligence: a company that has already traded under another identity.

***

### Filters

| Field | Notes |
| --- | --- |
| `sicCodes` | UK SIC 2007 codes. Matches if **any** of the company's four codes is listed |
| `sicText` | Free-text match on the SIC description instead of the code |
| `companyNumbers` | Exact lookups |
| `status` | Register status values, e.g. `Active`, `Dissolved`, `Liquidation` |
| `activeOnly` | Shortcut for `status: ["Active"]` |
| `category` | `Private Limited Company`, `PLC`, `LLP`, `Limited Partnership`… |
| `postcodePrefix` | Postcode prefix, spaces ignored |
| `postTown` | Registered town, substring match |
| `nameContains` | Company name, substring match |
| `incorporatedAfter` / `incorporatedBefore` | ISO dates |
| `hasPreviousNames` | Only companies that have traded under another name |
| `maxItems` | Hard cap on returned companies |

***

### Pricing

| Event | Charged | Covers |
| --- | --- | --- |
| `register-scan` | once per run | downloading and parsing the published register archive |
| `company-record` | once per company returned | the normalised company record |

The scan is a fixed cost per run — roughly 490 MB of archive, read every time — which is why it is charged once rather than folded into the per-company price. After that you pay only for what you keep.

A narrow run that returns 100 companies costs about $0.10 + $0.10. A run returning 5,000 costs about $5.10. `maxItems` is the lever: it caps the per-company part and nothing else.

***

### Reliability

- The source is a **monthly published archive**, not a web page. No browser, no anti-bot handling, no selectors.
- The file format has been stable for years: 55 fixed columns.
- If this month's file is not published yet, the Actor reads the download index and falls back to the most recent snapshot rather than failing.
- Every row carries the snapshot date, so you always know how fresh the data is.

***

### Notes and limits

- **Results come in register order, not a random sample.** The published archive is split into seven parts and the Actor reads them in order, stopping as soon as `maxItems` is reached. With a low cap you therefore get the first N matches alphabetically by company name, not N matches drawn from the whole register. If you need full coverage of a filter, leave `maxItems` generous — the register scan is charged once per run, so a bigger cap costs you only the extra per-company records.
- **The register is a snapshot.** It reflects Companies House's data as of the first of the month, not real time. If you need a filing within minutes of it landing, use the Companies House API instead.
- **The header of the published file is not clean** — several column names carry leading spaces, including `CompanyNumber`. This Actor strips them. If you parse the file yourself, that will bite you.
- **Financial figures are not included.** The bulk product carries registration data and filing dates, not the numbers inside the accounts.
- **Company names are as registered**, including oddities like the leading `!` in the sample above.
- **Attribution is required.** Contains public sector information licensed under the Open Government Licence v3.0.

***

### Data source

[Companies House](https://download.companieshouse.gov.uk/en_output.html) publishes a monthly bulk data product covering the whole UK register. It is Crown copyright, available under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/), which permits commercial use including redistribution inside a product, provided the source is acknowledged. This Actor acknowledges it on every output row.

***

### Related Actors

From the same publisher:

- [Football Data API](https://apify.com/smoked_drift/european-football-results-odds) — European football results, match statistics, closing odds and line movement across 22 leagues
- [Football Odds Comparison](https://apify.com/smoked_drift/football-odds-comparison) — best available price per outcome and open-to-close movement
- [Football Stats & Elo Ratings](https://apify.com/smoked_drift/football-team-stats-elo) — one row per club with Elo, record, splits and form

***

### Support

Found a field that should be exposed, or a filter you need? Open an issue on this Actor's **Issues** tab.

# Actor input Schema

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

UK SIC 2007 codes, e.g. 62020 for IT consultancy, 68209 for letting of real estate. A company matches if any of its four SIC codes is listed here.

## `sicText` (type: `string`):

Free-text match against the SIC description instead of the code, e.g. 'consultancy' or 'software'.

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

Look up specific companies by their Companies House number, e.g. 08209948. Fastest path: no filtering needed beyond this.

## `status` (type: `array`):

Register status values. Leave empty for all. 'Active' is the one you usually want for prospecting.

## `activeOnly` (type: `boolean`):

Shortcut for status = Active. Ignored when 'Company status' is set.

## `category` (type: `array`):

Legal form, e.g. 'Private Limited Company', 'PLC', 'LLP', 'Limited Partnership'.

## `postcodePrefix` (type: `string`):

Registered address postcode prefix, e.g. 'EC1', 'M', 'BS3'. Spaces are ignored. A cheap way to search a city or region.

## `postTown` (type: `string`):

Match on the registered address town, e.g. 'Manchester'.

## `nameContains` (type: `string`):

Case-insensitive substring match on the company name.

## `incorporatedAfter` (type: `string`):

ISO date, e.g. 2026-01-01. Useful for finding newly formed companies.

## `incorporatedBefore` (type: `string`):

ISO date, e.g. 2026-09-01.

## `hasPreviousNames` (type: `boolean`):

Set to true to return only companies that have traded under another name. Leave unchecked to ignore. Renamed companies are a useful signal in due diligence.

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

Hard cap on returned companies. The register holds over 5 million, so keep this explicit. A run that scans the register costs the same either way.

## Actor input object example

```json
{
  "sicCodes": [
    "62020"
  ],
  "status": [
    "Active"
  ],
  "activeOnly": true,
  "maxItems": 1000
}
```

# Actor output Schema

## `companies` (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": [
        "62020"
    ],
    "status": [
        "Active"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("smoked_drift/uk-companies-house-data").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": ["62020"],
    "status": ["Active"],
}

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

```

## MCP server setup

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

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/8yYXy1lCUDpDvaVXP/builds/OWLRit0vTHq6uH1Xb/openapi.json
