# Companies House Scraper — UK Company Data, No API Key (`studio-amba/companies-house-scraper`) Actor

Extract UK company data from Companies House without an API key. Search by name, look up company numbers, or bulk-filter by SIC code, status and incorporation date (5,000 rows per query). Optional enrichment adds officers, PSCs, filings and charges.

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

## Pricing

from $12.00 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Companies House Scraper

Extract UK company data from [Companies House](https://find-and-update.company-information.service.gov.uk/), the official UK company register. No API key, no registration, no rate-limit paperwork. Search by company name, look up specific company numbers, or bulk-filter the whole register by SIC code, status, incorporation date and location.

Companies House holds records on 5.5+ million live UK companies (plus millions of dissolved ones): company profiles, officers, persons with significant control (PSC), filing history and registered charges. This actor reads all of it from the public register.

### What you get

- **Company profiles**: name, company number, status, type, incorporation date, dissolution date, registered office address, SIC codes
- **Officers** (optional): name, role, appointment date, active/resigned status (first 20 per company)
- **Persons with significant control** (optional): name, notification date, natures of control (ownership percentage bands, voting rights, right to appoint directors)
- **Filing history count** and **registered charges count** (optional)
- **Latest accounts date** (optional): the date the last filed accounts were made up to

### Three ways to use it

#### 1. Search by company name

Set `searchQuery` to any name keyword. Companies House caps name search at roughly 1,000 results per query, so narrow keywords work best.

```json
{
    "searchQuery": "plumbing ltd",
    "maxResults": 100
}
````

#### 2. Bulk extraction with filters

Set `bulkFilters` to pull companies by SIC code, status, incorporation date range or location. This uses the register's CSV export under the hood: one request returns up to 5,000 companies, and the actor automatically splits date windows when a filter matches more than that.

```json
{
    "bulkFilters": {
        "sicCodes": ["62012"],
        "companyStatus": "active",
        "incorporatedFrom": "2026-01-01",
        "incorporatedTo": "2026-06-30",
        "location": "manchester"
    },
    "maxResults": 5000
}
```

This is the fastest mode by far. Bulk results include SIC codes and exact incorporation dates.

#### 3. Direct company number lookup

Set `companyNumbers` to fetch specific companies straight from their profile pages. Company numbers are 8 characters and can have prefixes (`SC` for Scotland, `NI` for Northern Ireland, `OC` for LLPs). Keep leading zeros.

```json
{
    "companyNumbers": ["00445790", "SC123456", "NI071452"]
}
```

### Detail enrichment

Add `"fetchDetails": true` to any mode and the actor visits each company's profile pages to add officers, PSCs, latest accounts date, filings count and charges count. This costs about 5 extra requests per company, so expect longer runs on large result sets. Long runs are migration-safe: the actor persists its progress and resumes where it left off instead of starting over.

### How to scrape Companies House data

1. Open the actor and set your input. For a quick start, just set `searchQuery` to a company name keyword.
2. For lead lists by industry, use `bulkFilters` with the [SIC codes](https://resources.companieshouse.gov.uk/sic/) of the sectors you care about and `"companyStatus": "active"`.
3. Enable `fetchDetails` if you need directors, PSCs or filing activity per company.
4. Run the actor. Results land in the dataset and can be exported as JSON, CSV or Excel.
5. Schedule the run (for example weekly, filtered on recent incorporation dates) to keep a fresh feed of new UK companies.

No Companies House account or API key is needed for any of this. The data is Crown copyright open government data and free to reuse.

### Sample output

```json
{
    "companyNumber": "00445790",
    "name": "TESCO PLC",
    "status": "active",
    "companyType": "Public limited Company",
    "incorporationDate": "1947-11-27",
    "dissolvedDate": null,
    "registeredAddress": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
    "sicCodes": ["47110 - Retail sale in non-specialised stores with food, beverages or tobacco predominating"],
    "url": "https://find-and-update.company-information.service.gov.uk/company/00445790",
    "officers": [
        {
            "name": "TAYLOR, Christopher Jon",
            "role": "Secretary",
            "appointedOn": "2023-01-16",
            "officerStatus": "Active"
        }
    ],
    "personsWithSignificantControl": [],
    "latestAccountsDate": "2025-02-26",
    "filingsCount": 250,
    "chargesCount": 9,
    "scrapedAt": "2026-07-11T18:56:47.200Z"
}
```

### Input reference

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQuery` | string | `"construction ltd"` | Company name keyword search |
| `companyNumbers` | array | — | Direct lookup by company number (overrides other modes) |
| `bulkFilters` | object | — | SIC codes, status, incorporation date range, location |
| `fetchDetails` | boolean | `false` | Add officers, PSCs, accounts date, filings and charges counts |
| `maxResults` | integer | `100` | Maximum companies to return |
| `proxyConfiguration` | object | Apify proxy | Datacenter proxy is plenty; the site has no anti-bot protection |

Notes:

- Name search does not expose SIC codes (the register's search index doesn't include them). Use `bulkFilters`, `companyNumbers` or `fetchDetails` when you need SIC codes.
- Officer dates of birth are month/year only on the public register (UK privacy rules), so this actor does not output full birth dates.
- `status` values follow the register: `active`, `dissolved`, `liquidation`, `receivership`, and so on.

### Use cases

- **Lead generation**: pull every active company in a SIC code and region, with registered addresses
- **KYC / due diligence**: verify company status, officers and PSCs before doing business
- **Market research**: track incorporation volumes by sector over time
- **Data enrichment**: resolve company numbers from your CRM to full register records
- **Insolvency monitoring**: filter on dissolved or liquidation status by sector

### Pricing

You pay per result plus a small actor start fee. A run of 1,000 companies without details typically finishes in under a minute. With `fetchDetails` enabled, budget roughly 5 requests per company; the actor runs about 8 companies in parallel.

### Related scrapers

More official European company registers from the same developer:

- **[KVK Scraper](https://apify.com/studio-amba/kvk-scraper)** — Dutch company register (Kamer van Koophandel)
- **[Handelsregister Scraper](https://apify.com/studio-amba/handelsregister-scraper)** — German company register
- **[KRS Scraper](https://apify.com/studio-amba/krs-scraper)** — Polish National Court Register
- **[Pappers Scraper](https://apify.com/studio-amba/pappers-scraper)** — French company data
- **[ARES Scraper](https://apify.com/studio-amba/ares-scraper)** — Czech business register

### Support

Found a bug or want a feature? Open an issue on the actor's Issues tab. Feedback directly improves this scraper.

# Actor input Schema

## `searchQuery` (type: `string`):

Search companies by name keyword (e.g. 'construction ltd', 'tesco', 'plumbing'). Ignored when Company Numbers or Bulk Filters are provided. Defaults to 'construction ltd' if no input is given at all.

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

Direct lookup of specific companies by their 8-character company number (e.g. '00445790', 'SC123456', 'NI071452'). Keep leading zeros. When provided, this overrides Search Query and Bulk Filters. Each number is resolved from its company profile page (includes SIC codes).

## `bulkFilters` (type: `object`):

Filtered bulk extraction via the Companies House advanced-search CSV export (up to 5,000 companies per request, auto date-windowed beyond that). Keys: sicCodes (array of 5-digit SIC codes, e.g. \["62012"]), companyStatus (active | dissolved | open | closed), incorporatedFrom / incorporatedTo (ISO dates, e.g. "2026-01-01"), location (registered office address text, e.g. "manchester"). Overrides Search Query when provided.

## `fetchDetails` (type: `boolean`):

Visit each company's profile pages to add officers (first 20), persons with significant control, latest accounts date, filings count and charges count. Multiplies requests per company (about 5x) — expect longer runs on large result sets. Runs are migration-safe and resume where they left off.

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

Maximum number of company records to return.

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

Apify proxy configuration. Companies House is a public government site with no anti-bot protection — the default datacenter proxy is plenty.

## Actor input object example

```json
{
  "searchQuery": "construction ltd",
  "fetchDetails": false,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "construction ltd",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/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 = {
    "searchQuery": "construction ltd",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/companies-house-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "construction ltd",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/companies-house-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/companies-house-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Companies House Scraper — UK Company Data, No API Key",
        "description": "Extract UK company data from Companies House without an API key. Search by name, look up company numbers, or bulk-filter by SIC code, status and incorporation date (5,000 rows per query). Optional enrichment adds officers, PSCs, filings and charges.",
        "version": "0.0",
        "x-build-id": "bWhF48uWi6CwUwc3W"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~companies-house-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-companies-house-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~companies-house-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-companies-house-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~companies-house-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-companies-house-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search companies by name keyword (e.g. 'construction ltd', 'tesco', 'plumbing'). Ignored when Company Numbers or Bulk Filters are provided. Defaults to 'construction ltd' if no input is given at all."
                    },
                    "companyNumbers": {
                        "title": "Company Numbers",
                        "type": "array",
                        "description": "Direct lookup of specific companies by their 8-character company number (e.g. '00445790', 'SC123456', 'NI071452'). Keep leading zeros. When provided, this overrides Search Query and Bulk Filters. Each number is resolved from its company profile page (includes SIC codes).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "bulkFilters": {
                        "title": "Bulk Filters",
                        "type": "object",
                        "description": "Filtered bulk extraction via the Companies House advanced-search CSV export (up to 5,000 companies per request, auto date-windowed beyond that). Keys: sicCodes (array of 5-digit SIC codes, e.g. [\"62012\"]), companyStatus (active | dissolved | open | closed), incorporatedFrom / incorporatedTo (ISO dates, e.g. \"2026-01-01\"), location (registered office address text, e.g. \"manchester\"). Overrides Search Query when provided."
                    },
                    "fetchDetails": {
                        "title": "Fetch Company Details",
                        "type": "boolean",
                        "description": "Visit each company's profile pages to add officers (first 20), persons with significant control, latest accounts date, filings count and charges count. Multiplies requests per company (about 5x) — expect longer runs on large result sets. Runs are migration-safe and resume where they left off.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of company records to return.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy configuration. Companies House is a public government site with no anti-bot protection — the default datacenter proxy is plenty."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
