# UK Companies House Data by SIC Code & Postcode (Unofficial) (`syntrovia/uk-company-register-companies-house`) Actor

Unofficial tool. Build UK company lists from the Companies House Free Company Data Product: 5.7 million live companies. Filter by SIC code, postcode, town, county, incorporation date or company number. Company-level data only: no officers, no PSC, no street addresses. Updated monthly.

- **URL**: https://apify.com/syntrovia/uk-company-register-companies-house.md
- **Developed by:** [Syntrovia Data](https://apify.com/syntrovia) (community)
- **Categories:** Business, Lead generation
- **Features:** Limited permissions
- **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 Data by SIC Code & Postcode (Unofficial)

Unofficial tool, not affiliated with or endorsed by Companies House.

**Build UK company lists from the Companies House register by industry, area or incorporation date.** Filter the **5.7 million live companies** in the Companies House **Free Company Data Product** (the monthly bulk snapshot) by **SIC code, postcode area or district, post town, county, incorporation date or company number**, then narrow down by name, status, company type and accounts category. Download JSON, CSV or Excel.

**Try it now:** click **Try for free**, then **Start**. The prefilled input `{"sicCodes": ["62012"], "postcodeDistricts": ["M"], "maxItems": 20}` returns 20 software companies with a Manchester (`M`) postcode and costs $0.025.

**Looking for a Companies House scraper or API script?** This Actor returns the company-level fields (status, type, SIC codes, accounts and confirmation statement dates, charges) from the monthly bulk file, without scraping the Companies House website, so there is no API key to request and no API rate limit to manage.

Runs are fast because the monthly file (495 MB ZIP, 2.8 GB CSV) is pre-sorted once a month: a run reads only the small blocks that can contain matching companies, typically 1 to 15 blocks of about 15,500 companies each, instead of downloading the whole file.

- No API key, no login, no proxy.
- Company-level data only: **no officers, no persons with significant control (PSC), no street addresses**.
- Every result carries the `snapshotDate` it comes from.

### Sample company record

| companyNumber | companyName | companyStatus | incorporationDate | postcodeDistrict | sicCodes | accountsCategory |
|---|---|---|---|---|---|---|
| `01037515` | BLUJAY SOLUTIONS LTD | Active | 1972-01-07 | M50 | 62012 | MEDIUM |

From the snapshot of 1 Nov 2026, shortened to seven of 28 fields.

### What can this Actor do?

- **Lead lists by industry and area:** for example all software companies (SIC 62012) with a Manchester postcode, leaving out dormant ones.
- **Newly incorporated companies:** every company incorporated in the last 30 days before the snapshot, or between two dates.
- **Enrichment by company number:** status, type, incorporation date, SIC codes, accounts and confirmation statement dates for up to 5,000 numbers per run.
- **Market sizing:** count companies per SIC code, post town or postcode district.

### What data can you extract?

| Field | Example | Description |
|---|---|---|
| `companyNumber` | `08209948` | Companies House number (8 characters) |
| `companyName` | `EXAMPLE TRADING LTD` | Registered name |
| `companyStatus` | `Active` | Status as published (Active, Active - Proposal to Strike off, Liquidation, ...) |
| `companyCategory` | `Private Limited Company` | Company type |
| `countryOfOrigin` | `United Kingdom` | Country of origin |
| `incorporationDate` | `2012-09-11` | Incorporation date |
| `dissolutionDate` | `null` | Dissolution date, if the snapshot has one |
| `postTown` | `HARROGATE` | Registered office post town |
| `county` | `NORTH YORKSHIRE` | Registered office county, as written in the register |
| `country` | `ENGLAND` | Registered office country, as written in the register |
| `postcodeDistrict` | `HG1` | First half of the registered office postcode only |
| `sicCodes`, `sicDescriptions` | `["62012"]`, `["Business and domestic software development"]` | Up to 4 SIC 2007 codes |
| `accountsCategory` | `MICRO ENTITY` | Category of the last accounts filed |
| `accountsReferenceDay`, `accountsReferenceMonth` | `30`, `9` | Accounting reference date |
| `accountsNextDueDate`, `accountsLastMadeUpDate` | `2027-06-30`, `2025-09-30` | Accounts dates |
| `confirmationStatementNextDueDate`, `confirmationStatementLastMadeUpDate` | `2027-09-25`, `2026-09-11` | Confirmation statement dates |
| `mortgageCharges`, `mortgagesOutstanding`, `mortgagesPartSatisfied`, `mortgagesSatisfied` | `1`, `1`, `0`, `0` | Charges registered against the company |
| `limitedPartnershipGeneralPartners`, `limitedPartnershipLimitedPartners` | `null` | Limited partnerships only |
| `companiesHouseUrl` | `https://find-and-update.company-information.service.gov.uk/company/08209948` | Link to the official company page |
| `snapshotDate` | `2026-11-01` | Date of the monthly snapshot |

Not included, by design: officers and directors, persons with significant control, filing history, street address lines, care-of names, PO boxes, the second half of the postcode and previous company names. Post towns and counties are published only when at least 10 companies share the value (rare values are usually parts of a street address typed into the wrong box). A few registered names contain an e-mail address; the whole address is replaced with `[email removed]`.

### How to use it

1. Set at least one main filter: `sicCodes`, `postcodeDistricts`, `postTowns`, `counties`, `companyNumbers` or an incorporation date (`incorporatedWithinDays`, or `incorporatedFrom` / `incorporatedTo`).
2. Optionally narrow down with `nameContains`, `companyStatuses`, `companyCategories`, `accountsCategories` and `excludeDormant`, and set `maxItems`.
3. Run the Actor and export the dataset as JSON, CSV or Excel, or read it through the Apify API.

Filters are combined with AND. Inside the location group (`postcodeDistricts`, `postTowns`, `counties`) any match counts, so `["M"]` plus `["SALFORD"]` means "Manchester postcode area or Salford". A postcode area is letters only (`M`, `SW`); `M` does not include `ME` or `MK`.

To follow new companies every month, schedule the Actor monthly with `incorporatedWithinDays: 31` and your SIC codes or area. Companies House publishes the snapshot within 5 working days after the end of each month; the Actor switches to a new snapshot within a few days after that.

### How much does it cost?

This Actor uses **pay-per-event pricing with exactly three events**; nothing else is charged.

| Event | Price | When |
|---|---|---|
| Run start | $0.005 | Once per run, after the first register block was read and passed the layout check. Includes reading up to 3 blocks. |
| Register block | $0.0005 | Each block after the first 3 (about 15,500 companies scanned), charged once the block was read and passed the layout check, before its companies are saved. |
| Company | $0.001 | Each company saved to your dataset ($1.00 per 1,000). |

Nothing is charged for invalid input, when the register cannot be read, or when no block can contain a match (for example a post town that does not exist). A block that cannot be read or fails the layout check is never charged, and a block with matching companies is charged only when your maximum cost per run also covers at least one of them.

Example runs (snapshot of 1 Nov 2026):

| Input | Blocks read | Companies | Price |
|---|---|---|---|
| SIC 62012 with an `M` postcode, maxItems 20 | 1 | 20 | $0.025 |
| SIC 62012 with an `M` postcode, all | 9 | 3,063 | $3.07 |
| Post town TOBERMORY | 1 | 15 | $0.020 |
| 8 company numbers | 8 | 6 found | $0.014 |
| Incorporated 1-31 Oct 2026 | 13 | 66,457 | $66.47 |
| `incorporatedFrom: 1850-01-01` and `nameContains: ["ZZQX"]` (whole register, no match) | 361 | 0 | $0.18 |

Keep at least one selective filter (SIC code, postcode, town, county, company number or a recent date range): a run that has to scan the whole register reads about 361 blocks and takes about 4 minutes.

### Input example

```json
{
    "sicCodes": ["62012", "62020"],
    "postcodeDistricts": ["M", "SK"],
    "excludeDormant": true,
    "companyStatuses": ["Active"],
    "maxItems": 500
}
```

### Output example

```json
[
    {
        "companyNumber": "01037515",
        "companyName": "BLUJAY SOLUTIONS LTD",
        "companyStatus": "Active",
        "companyCategory": "Private Limited Company",
        "countryOfOrigin": "United Kingdom",
        "incorporationDate": "1972-01-07",
        "dissolutionDate": null,
        "postTown": "SALFORD",
        "county": null,
        "country": "UNITED KINGDOM",
        "postcodeDistrict": "M50",
        "sicCodes": ["62012"],
        "sicDescriptions": ["Business and domestic software development"],
        "accountsCategory": "MEDIUM",
        "accountsReferenceDay": 30,
        "accountsReferenceMonth": 6,
        "accountsNextDueDate": "2027-03-31",
        "accountsLastMadeUpDate": "2025-02-28",
        "confirmationStatementNextDueDate": "2027-04-22",
        "confirmationStatementLastMadeUpDate": "2026-04-08",
        "mortgageCharges": 19,
        "mortgagesOutstanding": 0,
        "mortgagesPartSatisfied": 0,
        "mortgagesSatisfied": 19,
        "limitedPartnershipGeneralPartners": null,
        "limitedPartnershipLimitedPartners": null,
        "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/01037515",
        "snapshotDate": "2026-11-01"
    }
]
```

Each run also stores `RUN_SUMMARY` (snapshot date, blocks read, rows scanned, companies saved, stop reason) and `ATTRIBUTION` in its key-value store.

### Data source and licence

Contains public sector information from Companies House (Free Company Data Product,
snapshot of <DATE>), reused under the terms Companies House publishes for its
public register and the Open Government Licence v3.0 where applicable.
Company-level data only: no officers, no persons with significant control.
Registered office addresses are shortened to post town and postcode district.
Unofficial tool, not affiliated with or endorsed by Companies House.

`<DATE>` is the `snapshotDate` of your results; the same text with the date filled in is saved as `ATTRIBUTION` in every run. Companies House does not support this tool. The data is only as current as the latest monthly snapshot: companies dissolved since then can still appear, and companies incorporated after it are not there yet.

### Limits and responsible use

- The only source is the free monthly bulk file that Companies House publishes for download. The Actor does not use the Companies House API and does not read the Find and Update company information website.
- The Actor never adds officers, PSC or filing documents. You are responsible for how you use the data, including UK data protection law and direct marketing rules (for example PECR) when you contact companies.
- Company names can contain the name of a person (for example a one-person company). Treat them with the same care as any business contact list.
- One run returns at most 1,000,000 companies.

### FAQ

**Is it legal?** The Free Company Data Product is published by Companies House for anyone to download and reuse. The Actor keeps company-level fields only and shortens registered office addresses. This is not legal advice; check the rules that apply to your use.

**Why does a run say "No company matches these filters"?** Check spelling of towns and counties as they appear in the register (the run log lists names that were not found), and remember that filters are combined with AND.

**How often is the data updated?** Monthly. Companies House publishes the snapshot within 5 working days after the end of each month. `snapshotDate` tells you which snapshot your results come from.

**Why did my run stop early?** It reached `maxItems` or the maximum cost per run you set; `RUN_SUMMARY` shows the stop reason.

### More data tools from Syntrovia Data

- [SAM.gov Federal Contract Opportunities (Unofficial)](https://apify.com/syntrovia/federal-opportunities-sam-gov-extract): U.S. federal bids and award notices from the public SAM.gov extract file.
- [Greenhouse & Lever Jobs API (Unofficial)](https://apify.com/syntrovia/ats-jobs-greenhouse-lever): open jobs from the Greenhouse and Lever boards you list, with only-new mode.
- [SEO Audit & Sitemap Checker](https://apify.com/syntrovia/sitemap-seo-check-http): status codes, redirects, titles, meta descriptions and 35+ issue codes for a site you may audit.

### Support

Report problems and data-removal requests in the **Issues** tab. We aim to review issues and data-removal requests within 72 hours.

# Changelog

This Actor's version history is a separate document: https://apify.com/syntrovia/uk-company-register-companies-house/changelog.md

# Actor input Schema

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

SIC 2007 codes or code prefixes (2 to 5 digits). "62012" matches one code, "620" every code starting with 620, "62" the whole division. A company matches when any of its up to 4 codes matches.

## `postcodeDistricts` (type: `array`):

Registered office postcode area (letters only, for example "M" for Manchester or "SW") or district (outward code, for example "SW1A" or "M1"). Area "M" does not include "ME" or "MK".

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

Registered office post town as written in the register, for example "MANCHESTER" (not case sensitive). Towns shared by fewer than 10 companies are not published.

## `counties` (type: `array`):

Registered office county as written in the register, for example "GREATER MANCHESTER" (not case sensitive). Many companies leave the county empty, so a county filter finds fewer companies than a postcode area.

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

Companies incorporated in the N days before the snapshot date (the register is a monthly snapshot, see snapshotDate in the results). Use this or the two dates below, not both.

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

Earliest incorporation date, YYYY-MM-DD.

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

Latest incorporation date, YYYY-MM-DD.

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

Look up these companies (up to 5,000). Short numbers are padded: "445790" becomes "00445790", "SC1234" becomes "SC001234". Dissolved companies are not in the register snapshot.

## `nameContains` (type: `array`):

Keep companies whose name contains any of these words or phrases (not case sensitive).

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

Exact statuses as published, for example "Active", "Active - Proposal to Strike off", "Liquidation", "In Administration". Empty keeps all.

## `companyCategories` (type: `array`):

Exact company categories as published, for example "Private Limited Company", "Limited Liability Partnership", "Community Interest Company", "Public Limited Company". Empty keeps all.

## `accountsCategories` (type: `array`):

Category of the last accounts filed, for example "MICRO ENTITY", "TOTAL EXEMPTION FULL", "SMALL", "FULL", "GROUP", "NO ACCOUNTS FILED". Empty keeps all.

## `excludeDormant` (type: `boolean`):

Drops companies whose last accounts were filed as DORMANT.

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

The run stops after saving this many companies.

## Actor input object example

```json
{
  "sicCodes": [
    "62012"
  ],
  "postcodeDistricts": [
    "M"
  ],
  "postTowns": [],
  "counties": [],
  "companyNumbers": [],
  "nameContains": [],
  "companyStatuses": [],
  "companyCategories": [],
  "accountsCategories": [],
  "excludeDormant": false,
  "maxItems": 20
}
```

# Actor output Schema

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

No description

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

No description

## `attribution` (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": [
        "62012"
    ],
    "postcodeDistricts": [
        "M"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("syntrovia/uk-company-register-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 = {
    "sicCodes": ["62012"],
    "postcodeDistricts": ["M"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("syntrovia/uk-company-register-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 '{
  "sicCodes": [
    "62012"
  ],
  "postcodeDistricts": [
    "M"
  ],
  "maxItems": 20
}' |
apify call syntrovia/uk-company-register-companies-house --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,syntrovia/uk-company-register-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/hW1E5hefbXhiynFmB/builds/KGLvUfl3X0hab9eBa/openapi.json
