UK Companies House Search by SIC Code

Filter the UK Companies House register by SIC code, postcode, town, status, company type, incorporation date and overdue accounts, with registered address and filing dates. Company records only, no directors or PSCs, read from the monthly snapshot, so a record can be up to about a month behind. It runs as an Apify Actor through Apify's hosted MCP server, so you need an Apify account and API token. Paid per company, 0.0015 USD a company on the Free plan plus a small start fee. Unofficial tool, not affiliated with Companies House.

Hosted MCP Server

npx add-mcp 'https://mcp.apify.com/?tools=plainrecordlabs/uk-companies-house-filter'

Installs into Claude Code, Codex, Cursor and more

Documentation

UK Companies House Scraper: SIC Code Search, Overdue Accounts (plainrecordlabs/uk-companies-house-filter) Actor

Companies House registry data: filter the UK company register by SIC code, postcode, town, status, incorporation date and overdue accounts. Find new companies and business leads with address, SIC codes and filing dates. Monthly snapshot, no directors or PSCs. No API key needed. Unofficial tool.

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. 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 section below.

Each client library has reference documentation the quickstart does not restate: JavaScript/TypeScript (npm install apify-client) and Python (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.

How to use

  1. Pick what to filter on. Put industry codes in SIC codes, like 56 or 62020, and areas in Postcode prefixes or Towns.
  2. Optional: set Incorporated within (days) for new companies, or Incorporated from and Incorporated to as YYYY-MM-DD.
  3. Optional: change Statuses, Company types or Account categories, or turn on Accounts overdue or Confirmation statement overdue.
  4. Set Max results. It also caps what one run can cost.
  5. Press Start. When the run ends, open the Output tab or download the results from the Storage tab as CSV, Excel or JSON.
  6. A run with a SIC code or a recent incorporation date takes seconds. A run with neither can scan the whole register, which takes longer and adds a one-time scan fee.

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

FieldWhat it does
SIC codesIndustry codes or prefixes. 56 is food and drink service, 5610 restaurants, 62020 IT consultancy.
Postcode prefixesPostcode areas or districts, like M, M1, SW1A or EH3 6. B does not match BN.
TownsPost towns as written on the register, like LEEDS or HOVE.
Incorporated within (days)Companies registered in the N days before the register snapshot date (the registerSnapshot field). 0 = any date.
Incorporated from / toDates as YYYY-MM-DD. A from date overrides the days field.
StatusesActive by default. Others: Active - Proposal to Strike off, Liquidation, In Administration. Clear it for all.
Company typesMatches the register's category, like Private Limited Company or PRI/LTD BY GUAR.
Account categoriesLike MICRO ENTITY, DORMANT, TOTAL EXEMPTION FULL, FULL.
Accounts overdueOnly companies whose next accounts due date has passed.
Confirmation statement overdueOnly companies whose confirmation statement due date has passed.
Company name containsMatches current or previous names.
Max resultsA 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:

{
  "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.
FieldWhat it holds
companyName, companyNumberThe company name and its Companies House number.
status, companyType, incorporationDateStatus, register category and the date it was registered.
sicCodesSIC codes with their descriptions.
addressLine1, addressLine2, town, county, country, postcodeThe registered office address.
accountsCategory, accountsNextDue, accountsOverdueLast accounts type, next due date and whether it has passed.
confirmationStatementNextDue, confirmationStatementOverdueThe same for the confirmation statement.
outstandingCharges, previousNamesSecured loans on the register, and earlier names.
companiesHouseUrl, registerSnapshotThe live record, and the snapshot month the row came from.

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. The days count back from the snapshot date, so 30 gives the newest month in the snapshot. 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.

Use it from an AI agent or MCP

AI agents can find and run this Actor through the Apify MCP server. Its search-actors tool finds it, fetch-actor-details reads the input and output fields described above, and call-actor runs it on your Apify account at the prices on the Pricing tab. To give an agent only this Actor as a tool, add it to the server URL: https://mcp.apify.com?tools=plainrecordlabs/uk-companies-house-filter.

For example, this input finds active restaurants with a Manchester (M) postcode registered in the last 30 days:

{ "sicCodes": ["5610"], "postcodePrefixes": ["M"], "incorporatedWithinDays": 30 }

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. Case does not matter, but the whole town name must match.

incorporatedWithinDays (type: integer):

Companies registered in the N days before the register snapshot date, for example 30 for the newest month in the snapshot. 0 = any date.

incorporatedFrom (type: string):

Earliest incorporation date, YYYY-MM-DD, for example 2026-01-01. Overrides the days field.

incorporatedTo (type: string):

Latest incorporation date, YYYY-MM-DD, for example 2026-06-30.

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):

Keep companies whose last accounts category is one of these, written in full, for example MICRO ENTITY, DORMANT, TOTAL EXEMPTION FULL or FULL. Case does not matter.

accountsOverdue (type: boolean):

Only companies whose next accounts due date in the snapshot has passed, for example to find businesses that may need an accountant.

confirmationStatementOverdue (type: boolean):

Only companies whose confirmation statement due date in the snapshot has passed, for example to find companies behind on their yearly filing.

nameKeywords (type: array):

Words matched at the start of a word in the current or previous names, for example "Bakery" or "Tech". Case does not matter, so "tech" also finds TECHNOLOGIES.

maxResults (type: integer):

Most companies one run returns, for example 500. 0 = no cap.

Actor input object example

{
  "sicCodes": [
    "56",
    "62020"
  ],
  "postcodePrefixes": [
    "M1",
    "SW1A"
  ],
  "towns": [
    "LEEDS"
  ],
  "incorporatedWithinDays": 30,
  "incorporatedFrom": "2026-01-01",
  "incorporatedTo": "2026-06-30",
  "statuses": [
    "Active"
  ],
  "companyTypes": [
    "Private Limited Company"
  ],
  "accountCategories": [
    "MICRO ENTITY",
    "DORMANT"
  ],
  "accountsOverdue": true,
  "confirmationStatementOverdue": false,
  "nameKeywords": [
    "Bakery",
    "Tech"
  ],
  "maxResults": 500
}

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

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

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

echo '{
  "sicCodes": [
    "56"
  ],
  "incorporatedWithinDays": 30,
  "statuses": [
    "Active"
  ],
  "maxResults": 100
}' |
apify call plainrecordlabs/uk-companies-house-filter --silent --output-dataset

MCP server setup

{
    "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/NuYIjjuaBri1mbUNf/openapi.json