# UK Companies House Scraper (`scrapewise/companies-house-scraper`) Actor

Scrape UK companies from Companies House without an API key: number, name, status, type, registered address, SIC codes, incorporation and dissolution dates, accounts and confirmation statement dates, overdue flags, previous names, filings and charges. Bulk filters. Error rows are free.

- **URL**: https://apify.com/scrapewise/companies-house-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 company delivereds

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

## UK Companies House Scraper: search, bulk filters and full company records

Scrape UK companies from [Companies House](https://find-and-update.company-information.service.gov.uk)
**without an API key, an account or a browser**: company number, name, status, type, registered
office address, postcode, SIC codes, incorporation and dissolution dates, and, when you ask for
it, the accounts and confirmation statement dates, overdue flags, SIC descriptions, previous
names, the latest filings and the charges (mortgages).

Built for lead generation (new companies by sector and town), KYB and due diligence, market
sizing by SIC code, credit and compliance checks (overdue accounts, charges, strike-off), and
CRM enrichment from a list of company numbers.

### At a glance

| | This Actor | scrapesage/companies-house-scraper (most used, 30 days) | logiover/uk-companies-house-bulk-scraper |
|---|---|---|---|
| Price per 1,000 companies, Free plan | **US$ 2.00** | US$ 4.00 | US$ 1.50 plus a start fee |
| Fee per run start | **None** | None | US$ 0.00005 per run |
| API key needed | No | No | No |
| Search by name, SIC, town, status, type, dates | Yes | Yes | SIC, location and status |
| More than 5,000 matches in one run | Yes, split by incorporation date automatically | Not stated on its page | Yes, from the bulk snapshot |
| Accounts, confirmation statement, overdue flags | Yes, optional, same price | Accounts dates | Not stated on its page |
| Latest filings and charges | Yes, optional, same price | Yes | No |
| Directors and PSCs (people) | **No, by design** | Yes, US$ 2.00 per 1,000 officers | No |
| Error rows (bad number, no matches) | Free, with an `errorCode` | Not stated on its page | Not stated on its page |
| Users in the last 30 days | New | 38 | 11 |
| Public run success, last 30 days | Every local and cloud test run succeeded | 99.9% (18,316 of 18,326) | 83.1% (59 of 71) |

Competitor figures were read from the public Apify API (`api.apify.com/v2/acts/<actor>`) on
**2026-09-28**; the Store shows the live numbers. A filtered export of 5,775 companies (every
active company with SIC 10710, bakeries) took 14 seconds and costs US$ 11.55 here.

### One real row

From a test run on 2026-09-28 (company number 00445790, with filings and charges on):

```json
{
  "type": "company",
  "companyNumber": "00445790",
  "companyName": "TESCO PLC",
  "companyStatus": "active",
  "companyType": "plc",
  "companyTypeLabel": "Public limited company",
  "incorporationDate": "1947-11-27",
  "dissolutionDate": null,
  "registeredOfficeAddress": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
  "postalCode": "AL7 1GA",
  "sicCodes": ["47110"],
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790",
  "source": "company",
  "query": "00445790",
  "companyStatusDetail": null,
  "incorporationLabel": "Incorporated on",
  "sicDescriptions": ["Retail sale in non-specialised stores with food, beverages or tobacco predominating"],
  "accountsNextMadeUpTo": "2027-02-26",
  "accountsNextDue": "2027-08-26",
  "accountsLastMadeUpTo": "2026-02-28",
  "accountsOverdue": false,
  "confirmationStatementNextDate": "2027-06-18",
  "confirmationStatementNextDue": "2027-07-02",
  "confirmationStatementLastDate": "2026-06-18",
  "confirmationStatementOverdue": false,
  "previousNames": [
    {"name": "TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY", "from": "1981-12-14", "to": "1983-08-25"},
    {"name": "TESCO STORES (HOLDINGS) LIMITED", "from": "1947-11-27", "to": "1981-12-14"}
  ],
  "filingHistory": [
    {
      "date": "2026-09-16",
      "type": "SH03",
      "description": "Purchase of own shares. Clarification hmrc confirmation received that appropriate duty has been paid on this repurchase",
      "documentUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790/filing-history/MzU0MzY3ODg5MGFkaXF6a2N4/document?format=pdf",
      "pages": 4
    }
  ],
  "charges": {
    "total": 9,
    "outstanding": 2,
    "satisfied": 7,
    "partSatisfied": 0,
    "items": [
      {"title": "Account security agreement", "createdOn": "2009-11-04", "deliveredOn": "2009-11-06", "status": "Outstanding", "satisfiedOn": null}
    ]
  }
}
```

A row from a filtered search has the first block of fields (number to `query`); the accounts,
filings and charges fields appear only when you switch them on.

### Three ways to use it

1. **Search by name or keyword** (`searchTerms` only): the Companies House name search, in its own
   relevance order, matching current and previous names. Up to 1,980 companies per term.
2. **Filtered search** (any of `sicCodes`, `location`, `companyStatus`, `companyType`,
   `incorporatedFrom`/`To`, `dissolvedFrom`/`To`, `nameExcludes`): Companies House's advanced
   search. Search terms, if given, must appear in the name. No ceiling: results above 5,000 are
   split by incorporation date and fetched piece by piece.
3. **Company numbers or links** (`companyNumbers`): the full record of each company.

### Input

| Field | Type | What it does |
|---|---|---|
| `searchTerms` | list | Company names or keywords, such as `bakery` or `Tesco`. |
| `companyNumbers` (also `companyUrls`, `startUrls`) | list | `00445790`, `SC241685`, `OC300001` or a Companies House link. Short numbers get their leading zeros. |
| `sicCodes` | list | 5-digit SIC 2007 codes, such as `62020`. Any of them matches. |
| `location` | text | Town, county or postcode of the registered office. |
| `companyStatus` | list | `active`, `dissolved`, `liquidation`, `administration`, `receivership`, `voluntary-arrangement`, `insolvency-proceedings`, `converted-closed`, `open`, `closed`, `removed`. |
| `companyType` | list | `ltd`, `plc`, `llp`, `limited-partnership`, `oversea-company`, `community-interest-company` and the other Companies House codes. |
| `incorporatedFrom`, `incorporatedTo` | `YYYY-MM-DD` or days | For example `incorporatedFrom: 7` = companies from the last week. |
| `dissolvedFrom`, `dissolvedTo` | `YYYY-MM-DD` or days | Recently dissolved companies. |
| `nameExcludes` | text | Leave out names containing this word. |
| `maxResults` (also `maxItems`) | integer, default 50 | Per search term or filter set. `0` = every match. |
| `includeDetails` | boolean | Status detail, accounts and confirmation statement dates, overdue flags, SIC descriptions, previous names. Always on for company numbers. |
| `includeFilingHistory` | boolean | The 25 latest filings with form type, description and PDF link. |
| `includeCharges` | boolean | Charges count and list (title, created, delivered, status). |
| `proxyConfiguration` | proxy | Apify datacenter proxy by default. |

An empty input runs the example search `bakery` and returns 50 companies.

### Price

**US$ 2.00 per 1,000 companies** on the Free plan, no start fee. The optional details, filings
and charges are included at the same price. Rows with an `errorCode` are free, a company is
never charged twice in a run, and if a detail you asked for could not be read, that row is
delivered with a `detailsError`, `filingHistoryError` or `chargesError` field and is not charged.

### Errors you may see

| `errorCode` | Meaning | Charged |
|---|---|---|
| `INVALID_URL` | not a Companies House number or link | no |
| `NOT_FOUND` | no company with this number | no |
| `NO_RESULTS` | the search or filters match no company | no |
| `INVALID_INPUT` | a SIC code, status, type or date is not valid | no |
| `BLOCKED` | Companies House did not answer after five attempts on new IPs; run again | no |
| `NOT_REACHED` | the run timeout arrived before this input | no |
| `UNEXPECTED` | a page came in a shape we did not expect; the rest of the run goes on | no |

### Good to know

- **Company data only.** Directors, secretaries, persons with significant control, the "persons
  entitled" of each charge and the filings that appoint or remove people are left out on
  purpose. If you need officers, this is not the right Actor.
- **Fast bulk exports.** Filtered searches use Companies House's own CSV export (5,000
  companies per request), so large lists come back in seconds, not pages.
- **Status in name search rows** comes from the result line (active, dissolved, liquidation,
  converted-closed). Company type and SIC codes come with filtered searches or with
  `includeDetails`.
- **Registered office** is the address filed at Companies House, as published there.
- Something broke? Open an issue on the Actor page.

### FAQ

**Do I need a Companies House API key?** No. The official API needs a key; this Actor reads the
public Find and Update Company Information service, which needs none.

**How do I get newly incorporated companies every week?** Set `incorporatedFrom: 7`, pick SIC
codes or a town, and `maxResults: 0`. Schedule it in Apify if you want a weekly list.

**Can I find companies with overdue accounts?** Yes. Run a filtered search with
`includeDetails: true` and keep rows with `accountsOverdue: true`.

**How fast is it?** A 5,775-company filtered export took 14 seconds in the cloud. With details on,
about 10 companies per second; with details, filings and charges, three pages per company.

**Can I use it from n8n, Make, Zapier or an AI agent?** Yes, through the Apify app or the Apify
MCP server. Error rows are free, so an agent can explore cheaply.

**What if a run is cut by its timeout?** The Actor stops 45 seconds before the limit and ends
successfully with what it delivered, telling you in the status message how to get the rest.

### Changelog

- **0.1 (2026-09-28)**: first version. Name search, filtered search with automatic split above
  5,000, company numbers, optional details, filings and charges, free error rows.

### Em português

Coleta empresas do registro britânico (Companies House) sem chave de API: número, nome, status,
tipo, endereço registrado, CNAE britânico (SIC), datas de constituição e dissolução, e, se pedir,
datas de balanço e declaração, atrasos, nomes anteriores, últimos documentos e garantias. Sem
dados de sócios ou diretores. US$ 2 por mil empresas, sem taxa de início; linha de erro não é
cobrada.

Keywords: companies house scraper, uk companies house, uk company search, companies house api
alternative, uk company data, sic code search, new uk companies, uk business leads, company
registration number lookup, KYB UK.

# Actor input Schema

## `searchTerms` (type: `array`):

One per line, such as 'bakery' or 'Tesco'. Without filters, each term runs the Companies House name search in its own relevance order (up to 1,980 companies per term). With any filter below, each term must appear in the company name and the filters apply.

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

One per line: a company number (00445790, SC241685, OC300001) or a Companies House page link. Each one returns the full company record.

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

Filter by nature of business, 5-digit SIC 2007 codes, such as 62020 (IT consultancy) or 56101 (restaurants). A company matches if it has any of them.

## `location` (type: `string`):

Town, county or postcode of the registered office, such as Manchester or SW1A.

## `companyStatus` (type: `array`):

Any of: active, dissolved, liquidation, receivership, administration, voluntary-arrangement, converted-closed, insolvency-proceedings, open, closed, removed. Empty = every status.

## `companyType` (type: `array`):

Any of the Companies House type codes, such as ltd, plc, llp, limited-partnership, oversea-company or community-interest-company. Empty = every type.

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

Only companies incorporated on or after this date (YYYY-MM-DD) or in the last N days (for example 7). Good for new company leads.

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

Only companies incorporated on or before this date (YYYY-MM-DD).

## `dissolvedFrom` (type: `string`):

Only companies dissolved on or after this date (YYYY-MM-DD) or in the last N days.

## `dissolvedTo` (type: `string`):

Only companies dissolved on or before this date (YYYY-MM-DD).

## `nameExcludes` (type: `string`):

Leave out companies whose name contains this word. Works together with the filters above.

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

Stop after this many companies for each search term (or for the filter set). 0 = every match. Filtered searches have no ceiling: large result sets are split by incorporation date automatically.

## `includeDetails` (type: `boolean`):

Opens each company's page for status detail (such as 'proposal to strike off'), last and next accounts dates, confirmation statement dates, overdue flags, SIC descriptions and previous names. Always on for company numbers. Same price per company.

## `includeFilingHistory` (type: `boolean`):

Adds the 25 most recent filings (date, form type, description, PDF link). Director and PSC appointment filings are left out. Same price per company.

## `includeCharges` (type: `boolean`):

Adds the count of charges registered, outstanding and satisfied, and each charge's title, dates and status. Same price per company.

## `proxyConfiguration` (type: `object`):

The default Apify Proxy (datacenter) works; tested with 48 of 48 requests and bulk exports without a block.

## Actor input object example

```json
{
  "searchTerms": [
    "bakery"
  ],
  "maxResults": 50,
  "includeDetails": false,
  "includeFilingHistory": false,
  "includeCharges": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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 = {
    "searchTerms": [
        "bakery"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/companies-house-scraper").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 = { "searchTerms": ["bakery"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/companies-house-scraper").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 '{
  "searchTerms": [
    "bakery"
  ]
}' |
apify call scrapewise/companies-house-scraper --silent --output-dataset

```

## MCP server setup

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

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/224zFSZ42CdGdfqSs/builds/r7vYidvKDIYWEBmXE/openapi.json
