# UK Companies House Company Data & Monthly Changes (`ayuki/uk-companies-house`) Actor

Search UK Companies House company data by SIC code, postcode, status, company type and incorporation date, or get monthly new incorporations, dissolutions and status changes. Bulk open data, no API key, company-only fields.

- **URL**: https://apify.com/ayuki/uk-companies-house.md
- **Developed by:** [LV Data Tools](https://apify.com/ayuki) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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 Company Data & Monthly Changes

Search and export **UK company data from Companies House** without an API key. Filter the full UK register (≈5.6 million companies) by **SIC code, postcode, company status, company type and incorporation date**, or get a **monthly change feed of new incorporations, dissolved companies and status changes** (for example companies entering liquidation or administration).

Unofficial tool built on the Companies House Free Company Data Product. **Source: Companies House Free Company Data Product. Contains public sector information**

### What you can do

- Build lists of UK companies in an industry (SIC 2007 codes, e.g. `62` for IT, `56101` for restaurants) and area (postcode prefix, e.g. `EC1`, `M14`, `EH`).
- Find companies incorporated in a date range, e.g. all new Private Limited Companies in Manchester last quarter.
- Monitor the register month to month: newly registered companies, companies dissolved or removed, and status changes such as *Active → Liquidation*.
- Export to JSON, CSV, Excel or via the Apify API, and schedule monthly runs.

Company-only data: **no directors, officers, PSC or shareholder data**.

### Modes

| Mode | What it returns |
|---|---|
| `snapshot` | Companies from the newest monthly snapshot that match your filters. Stops as soon as `maxItems` matches are found. |
| `monthlyDiff` | Differences between the newest and the previous monthly snapshot: `new` (on the register now, absent last month: mostly new incorporations, occasionally restorations), `dissolved` (status became *Dissolved* or the company is no longer on the register), `statusChanged` (any other status change). |

The diff is computed from two monthly bulk snapshots, so no Companies House API key is needed. Companies House publishes a new snapshot within about 5 working days after month end; the Actor picks the newest automatically (or set `snapshotDate`).

### Input

| Field | Description |
|---|---|
| `mode` | `snapshot` (default) or `monthlyDiff` |
| `changeTypes` | `new`, `dissolved`, `statusChanged` (monthlyDiff; default all) |
| `sicCodes` | SIC codes or prefixes; any match counts |
| `postcodePrefixes` | Registered-office postcode prefixes, spaces ignored |
| `companyStatuses` | e.g. `Active`, `Liquidation`, `In Administration` |
| `companyTypes` | e.g. `Private Limited Company`, `Limited Liability Partnership` |
| `incorporatedFrom` / `incorporatedTo` | YYYY-MM-DD, inclusive |
| `snapshotDate` | Optional `YYYY-MM-01`; default newest |
| `maxItems` | Max results, default **100** |

Example: new IT companies in London EC postcodes this month

```json
{"mode": "monthlyDiff", "changeTypes": ["new"], "sicCodes": ["62"], "postcodePrefixes": ["EC"], "maxItems": 100}
```

In `monthlyDiff`, `companyStatuses` applies to the latest status; companies no longer on the register are matched on the other filters.

### Output

```json
{
  "companyNumber": "16092999",
  "companyName": "EXAMPLE TAX LTD",
  "companyStatus": "Active",
  "companyType": "Private Limited Company",
  "countryOfOrigin": "United Kingdom",
  "incorporationDate": "2024-11-21",
  "dissolutionDate": null,
  "registeredAddress": {"poBox": null, "addressLine1": "82 Great North Road", "addressLine2": null, "postTown": "HATFIELD", "county": null, "country": "UNITED KINGDOM", "postCode": "AL9 5BL"},
  "sicCodes": [{"code": "62020", "description": "Information technology consultancy activities"}],
  "accountsCategory": "MICRO ENTITY",
  "accountsNextDueDate": "2027-08-31",
  "accountsLastMadeUpDate": "2025-11-30",
  "confirmationStatementNextDueDate": "2026-12-04",
  "confirmationStatementLastMadeUpDate": "2025-11-20",
  "mortgageCharges": 0,
  "mortgageChargesOutstanding": 0,
  "previousNames": [{"name": "OLD NAME LTD", "changeDate": "2026-03-27"}],
  "url": "https://find-and-update.company-information.service.gov.uk/company/16092999",
  "snapshotDate": "2026-10-01",
  "changeType": null,
  "previousStatus": null,
  "attribution": "Source: Companies House Free Company Data Product. Contains public sector information"
}
```

Run counters are saved to the `RUN_STATS` key-value record.

### Performance and cost

The ≈500 MB monthly ZIP is streamed and decompressed on the fly (never written to disk). A selective `snapshot` query stops early once `maxItems` results are found; a rare filter may scan the whole file (a few minutes). `monthlyDiff` reads both snapshots (and the previous one twice when `dissolved` is requested), typically 10–20 minutes, with a compact in-memory index (~100 MB). 2–4 GB memory is recommended.

### Data source and terms

**Source: Companies House Free Company Data Product. Contains public sector information**

Companies House places no restriction on how the information in the Free Company Data Product is used; copyright in filed documents remains with the filing companies. This Actor is not affiliated with or endorsed by Companies House, uses no Companies House logo or crest, and does not present the data as licensed under the Open Government Licence. Keep the `attribution` field when you redistribute records. The Actor's price pays for the processing service, not for the data.

### Personal data

The output contains company attributes only. Directors, PSC and officer data are not used. The registered-office "care of" line is dropped. Some registered offices are home addresses and some company names contain personal names; treat the output as potentially containing personal data under UK GDPR. **Do not use this Actor for lead generation targeting individuals, person enrichment or profiling.**

### Privacy notice

Controller: **Artyom Kutnevskiy (trading as LV Data Tools), contact lvdatatools@gmail.com**. Version 0.1, 2026-10-14.

- **Data concerned:** company-level records from the Companies House Free Company Data Product: company number, name, status, type, registered-office address, SIC codes, key dates, accounts/confirmation-statement dates, charge counts and previous company names. **No directors, officers, persons with significant control (PSC), shareholders or other person records are requested or output.** The registered-office "care of" line is never output, because it can name an individual.
- **Incidental personal data:** some small companies use a home address as the registered office, and a company name can contain a person's name. These values are published by Companies House as part of the public register and are output only as company attributes.
- **Minimisation:** company fields only, from a fixed allowlist. No person enrichment, no matching to other sources, no contact details (emails/phones are not part of the source). The Actor must not be used for lead generation or profiling of individuals.
- **Source:** Companies House Free Company Data Product monthly bulk ZIP (`download.companieshouse.gov.uk`), streamed and processed in memory. No Companies House API key is used or embedded.
- **Source terms:** Source: Companies House Free Company Data Product. Contains public sector information. Companies House places no restriction on how the information is used (FOI disclosure log 362); copyright in underlying filings stays with the filing companies. The data is not presented as licensed under the Open Government Licence, and no Companies House logo or crest is used. The Actor is unofficial.
- **Roles:** the publisher (LV Data Tools) is controller for the Actor's own source collection and minimisation, and acts as processor for each user's run output under §5.2 of the Apify Standard Actor Contract, while the user is controller of that output and its reuse.
- **Purpose:** business and market research on UK companies: industry and area screening, monitoring new incorporations, dissolutions and status changes. No profiling of people or automated decision-making about individuals.
- **Legal basis:** Art. 6(1)(f) UK GDPR / GDPR (legitimate interest), with minimisation as described. Users must establish the basis for their own reuse.
- **Recipients:** the user running the Actor and recipients they choose. Apify Technologies s.r.o. provides the hosting platform. Datasets are not automatically sent to other parties by this Actor.
- **Retention:** LV Data Tools keeps no separate copy of output. Snapshots are streamed and not stored. Output datasets and `RUN_STATS` follow the user's Apify storage/retention settings. Logs contain counters only, not records.
- **Transfers:** hosting may involve transfers outside the UK/EEA depending on Apify's infrastructure; see [Apify's privacy policy](https://apify.com/privacy-policy).
- **Rights:** access, rectification, erasure, restriction, objection (Art. 21) and complaint to a supervisory authority: UK Information Commissioner's Office ([ico.org.uk](https://ico.org.uk/)) or Latvia's Datu valsts inspekcija ([dvi.gov.lv](https://www.dvi.gov.lv/)). Requests concerning the Actor go to lvdatatools@gmail.com; for a user's exported dataset, contact that user as well. Corrections to the register itself are made via Companies House.
- **Individual notification / Art. 14(5)(b) assessment (2026-10-14):** the Actor outputs no person records; individuals appear only incidentally (home registered-office addresses, names within company names) in a public register. The publisher holds no contact details for them, and contacting them would require collecting more personal data. Individual notification would involve disproportionate effort; safeguards are this public notice, company-only fields, removal of the "care of" line, and individual handling of objections.

### FAQ

**Do I need a Companies House API key?** No. The Actor uses the free monthly bulk product only.

**How fresh is the data?** Monthly. Each snapshot is compiled up to the end of the previous month.

**Why might a "dissolved" company not show a dissolution date?** Dissolved companies usually drop out of the bulk product, so the record shows last month's data with `companyStatus` = "Not in latest snapshot (dissolved or removed)" and `previousStatus`.

**Is this official?** No. It is an independent tool built on Companies House open bulk data.

# Actor input Schema

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

snapshot = filter the latest monthly company snapshot. monthlyDiff = companies that are new, dissolved/removed or changed status between the latest and the previous monthly snapshot.

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

Which changes to return in monthlyDiff mode.

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

SIC 2007 codes or prefixes, e.g. 62020 or 62 (all IT). A company matches if any of its SIC codes starts with any value.

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

Registered-office postcode prefixes, e.g. EC1, SW1A, M1. Spaces and case are ignored. Note: 'M1' also matches M11-M19; add the space-free outward code plus a digit (e.g. 'M14') for precision.

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

Exact status values, e.g. Active, Liquidation, In Administration, Active - Proposal to Strike off. Case-insensitive. In monthlyDiff it applies to the latest status (not to removed companies).

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

Exact Companies House categories, e.g. Private Limited Company, Public Limited Company, Limited Liability Partnership, Community Interest Company. Case-insensitive.

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

YYYY-MM-DD, inclusive.

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

YYYY-MM-DD, inclusive.

## `snapshotDate` (type: `string`):

Advanced. Monthly snapshot to use as 'latest' (YYYY-MM-01). Empty = newest published. Companies House only keeps recent months online.

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

Maximum companies to return.

## Actor input object example

```json
{
  "mode": "snapshot",
  "changeTypes": [
    "new",
    "dissolved",
    "statusChanged"
  ],
  "sicCodes": [
    "62"
  ],
  "maxItems": 100
}
```

# Actor output Schema

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

No description

## `stats` (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 = {
    "mode": "snapshot",
    "sicCodes": [
        "62"
    ],
    "maxItems": 100
};

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

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

```

## MCP server setup

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

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/mXqQ0O1Xn42JeP0NS/builds/yJmebkraEXe2n0Z9s/openapi.json
