# Companies House Search: New UK Companies and Leads by SIC Code (`plainrecordlabs/uk-companies-house-filter`) Actor

UK companies from the Companies House register, filtered by SIC code, postcode, town, status, incorporation date and overdue accounts. Find new companies and business leads with registered address, SIC codes and filing dates, then export to CSV. Unofficial tool.

- **URL**: https://apify.com/plainrecordlabs/uk-companies-house-filter.md
- **Developed by:** [Plain Record Labs](https://apify.com/plainrecordlabs) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
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

## Companies House Search: New UK Companies and Leads by SIC Code

Build a list of UK companies from the Companies House register. Filter by industry (SIC code), postcode, town,
status, company type, incorporation date and overdue accounts. Each row is one company with its registered office
address, SIC codes, filing dates and a link to its page on Companies House.

Press Start with the defaults to get active food and drink businesses (SIC 56) incorporated in the last 30 days,
newest first.

> This is an unofficial tool, not affiliated with Companies House. It reads the register's monthly snapshot, so a
> company's status or filing dates can be up to about a month behind the live register. Open the
> `companiesHouseUrl` for the current record.

### What people use it for

- **Accountants and bookkeepers:** companies in your area with accounts or confirmation statements overdue.
- **Sales teams:** new restaurants, builders or IT firms by postcode or town, right after they register.
- **Researchers:** counts and lists of companies by industry and region.

### Input

| Field | What it does |
|---|---|
| **SIC codes** | Industry codes or prefixes. `56` is food and drink service, `5610` restaurants, `62020` IT consultancy. |
| **Postcode prefixes** | Postcode areas or districts, like `M`, `M1`, `SW1A` or `EH3 6`. `B` does not match `BN`. |
| **Towns** | Post towns as written on the register, like `LEEDS` or `HOVE`. |
| **Incorporated within (days)** | Companies registered in the last N days. 0 = any date. |
| **Incorporated from / to** | Dates as YYYY-MM-DD. A from date overrides the days field. |
| **Statuses** | `Active` by default. Others: `Active - Proposal to Strike off`, `Liquidation`, `In Administration`. Clear it for all. |
| **Company types** | Matches the register's category, like `Private Limited Company` or `PRI/LTD BY GUAR`. |
| **Account categories** | Like `MICRO ENTITY`, `DORMANT`, `TOTAL EXEMPTION FULL`, `FULL`. |
| **Accounts overdue** | Only companies whose next accounts due date has passed. |
| **Confirmation statement overdue** | Only companies whose confirmation statement due date has passed. |
| **Company name contains** | Matches current or previous names. |
| **Max results** | A cap on how many companies one run returns. |

A run with a SIC code or a recent incorporation date reads only that part of the register and takes seconds. A run
with neither scans the 5.7 million companies until it has enough results. A short scan costs nothing extra. One that
reads past the first 50 of the register's 746 parts takes up to about 10 minutes and adds a one-time scan fee (see
the Pricing tab).

### Output

One item per company:

```json
{
  "companyName": "EXAMPLE BAKERY LTD",
  "companyNumber": "15000000",
  "status": "Active",
  "companyType": "Private Limited Company",
  "incorporationDate": "2026-09-14",
  "sicCodes": ["10710 Manufacture of bread"],
  "addressLine1": "1 Example Street",
  "addressLine2": null,
  "town": "MANCHESTER",
  "county": null,
  "country": "ENGLAND",
  "postcode": "M1 1AA",
  "accountsCategory": "NO ACCOUNTS FILED",
  "accountsNextDue": "2027-06-14",
  "accountsLastMadeUpTo": null,
  "accountsOverdue": false,
  "confirmationStatementNextDue": "2027-09-27",
  "confirmationStatementLastMadeUpTo": null,
  "confirmationStatementOverdue": false,
  "outstandingCharges": 0,
  "previousNames": [],
  "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/15000000",
  "registerSnapshot": "2026-10-01"
}
```

The example is illustrative. Real values come from the register.

- The address is the registered office, which for many small companies is an accountant's or agent's address.
- Officers, owners and contact details are not in this data and are not included.
- `accountsOverdue` and `confirmationStatementOverdue` compare the due dates in the snapshot with today, so a
  company that filed after the snapshot can still show as overdue. Check the `companiesHouseUrl` before acting.
- Financial figures from filed accounts are not included yet.
- Dissolved companies are not in the snapshot.

### Where the data comes from

The Companies House Free Company Data Product, a snapshot of every live company on the register published each
month. Our index rebuilds when a new snapshot appears. This Actor reads that index only.

### FAQ

**How do I get a list of new companies registered in the UK?**
Set **Incorporated within (days)** to 7 or 30 and run it. Add SIC codes or postcode prefixes to narrow it to a trade
or an area. Results come newest first.

**Can I export Companies House data to Excel or CSV?**
Yes. Every run's results download from the Storage tab as CSV, Excel or JSON.

**How do I find companies by SIC code?**
Put the code or its first digits in **SIC codes**. `5610` finds licensed and unlicensed restaurants, `43` finds
building trades. A company matches if any of its SIC codes starts with what you entered.

**Does it include directors or contact details?**
No. It returns company records only: name, number, registered office, SIC codes and filing dates. No officers,
owners, emails or phone numbers.

**How current is the data?**
It is the monthly register snapshot, so status and filing dates can be up to about a month old. The
`registerSnapshot` field says which month. Companies registered after the snapshot show up the next month.

**Why do some companies with overdue accounts have due dates years ago?**
The register keeps some companies marked Active long after they stopped filing. To get companies that only recently
fell behind, add **Incorporated from** (for example 2022-01-01) next to **Accounts overdue**.

### Pricing

You pay per company returned, plus a one-time fee on runs that scan the whole register. Prices are on the Pricing
tab. **Max results** caps what one run can cost.

### Feedback

Need a field or a filter? Open an issue on the Issues tab.

# Actor input Schema

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

Industry codes or prefixes, for example 56 (food and drink service), 5610 (restaurants) or 62020 (IT consultancy). Leave empty for every industry.

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

Postcode areas or districts, for example M, M1, SW1A or EH3 6. B matches Birmingham postcodes only, not BN.

## `towns` (type: `array`):

Post towns as written on the register, for example LEEDS or HOVE.

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

Companies registered in the last N days. 0 = any date.

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

Earliest incorporation date, YYYY-MM-DD. Overrides the days field.

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

Latest incorporation date, YYYY-MM-DD.

## `statuses` (type: `array`):

Company statuses to keep, written as the register writes them, for example Active, Liquidation or In Administration. The README lists the exact strike-off status. Clear the list for all.

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

Keep companies whose register category contains any of these, for example Private Limited Company or PRI/LTD BY GUAR.

## `accountCategories` (type: `array`):

For example MICRO ENTITY, DORMANT, TOTAL EXEMPTION FULL or FULL.

## `accountsOverdue` (type: `boolean`):

Only companies whose next accounts due date in the snapshot has passed.

## `confirmationStatementOverdue` (type: `boolean`):

Only companies whose confirmation statement due date in the snapshot has passed.

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

Words matched at the start of a word in the current or previous names.

## `maxResults` (type: `integer`):

Most companies one run returns. 0 = no cap.

## Actor input object example

```json
{
  "sicCodes": [
    "56"
  ],
  "postcodePrefixes": [],
  "towns": [],
  "incorporatedWithinDays": 30,
  "statuses": [
    "Active"
  ],
  "companyTypes": [],
  "accountCategories": [],
  "accountsOverdue": false,
  "confirmationStatementOverdue": false,
  "nameKeywords": [],
  "maxResults": 100
}
```

# Actor output Schema

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

One item per company that matched.

## `summary` (type: `string`):

How many companies were returned and which register snapshot they came from.

# 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": [
        "56"
    ],
    "incorporatedWithinDays": 30,
    "statuses": [
        "Active"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrecordlabs/uk-companies-house-filter").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": ["56"],
    "incorporatedWithinDays": 30,
    "statuses": ["Active"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("plainrecordlabs/uk-companies-house-filter").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": [
    "56"
  ],
  "incorporatedWithinDays": 30,
  "statuses": [
    "Active"
  ],
  "maxResults": 100
}' |
apify call plainrecordlabs/uk-companies-house-filter --silent --output-dataset

```

## MCP server setup

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

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/oFbOg0Xwawge7vu0Y/builds/VXhfkHh6xwRgLqe3u/openapi.json
