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

Get UK company records from the public Companies House register: status, type, incorporation date, registered office, SIC codes, previous names, accounts and confirmation-statement deadlines, directors, owners (PSCs) and filings. Search by name or number. No API key.

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

## Pricing

from $1.50 / 1,000 results

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

![banner](https://anyx.solutions/banners/companies-house-scraper.png)

## Companies House Scraper

**UK company records from the public Companies House register — profile, registered office, SIC codes, filing deadlines, officers, owners and filings — as clean JSON.**

Companies House is the official register of every company in the United Kingdom. This Actor reads
its public register pages and returns one clean record per company: number, name, status, type,
incorporation and dissolution dates, the registered office address (in full and split into lines,
town, postcode and country), SIC codes with their descriptions, previous names, and the accounts
and confirmation-statement dates. It adds the company's officers by default, and on request its
persons with significant control (the owners) and its latest filings. Paste a register search,
an advanced-search result or a company page, or simply type company names or numbers; there is no
login and no API key to set up. Built for lead generation, KYC and supplier checks, sales
prospecting, and company research.

### ⚡ Quick start

```json
{
  "startUrls": [
    {
      "url": "https://find-and-update.company-information.service.gov.uk/search/companies?q=tesco"
    }
  ],
  "maxItems": 5
}
```

Or look companies up directly:

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

### 🧩 Input

| Field                                  | Type    | Required | Default                      | Description                                                                                                                                                                                                                                       |
| -------------------------------------- | ------- | -------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`                            | array   | no       | —                            | Companies House URLs: a search (`…/search/companies?q=tesco`), an advanced-search results page (`…/advanced-search/get-results?…`, with its incorporation date, SIC code, status and location filters), or a company page (`…/company/00445790`). |
| `maxItems`                             | integer | no       | —                            | Maximum number of companies per search URL or search term. The input form starts at 5; leave it empty to get every result.                                                                                                                        |
| `searchTerms`                          | array   | no       | —                            | Company names to search for, one per line. Each returns the register's matches, best first.                                                                                                                                                       |
| `companyNumbers`                       | array   | no       | —                            | Company registration numbers to look up, such as `00445790` or `SC123456`.                                                                                                                                                                        |
| `includeOfficers`                      | boolean | no       | `true`                       | Add the company's current and resigned officers from the People tab.                                                                                                                                                                              |
| `includePersonsWithSignificantControl` | boolean | no       | `false`                      | Add the persons with significant control (owners) and their natures of control.                                                                                                                                                                   |
| `includeFilingHistory`                 | boolean | no       | `false`                      | Add the 25 most recent filings with their PDF links.                                                                                                                                                                                              |
| `proxyConfiguration`                   | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. The register needs no proxy.                                                                                                                                                                                                      |

Use at least one of `startUrls`, `searchTerms` or `companyNumbers`.

**Advanced search.** Open
[Advanced company search](https://find-and-update.company-information.service.gov.uk/advanced-search),
set the filters you need (name, location, status, company type, SIC codes, incorporation or
dissolution dates), run the search and paste the results-page URL into `startUrls`.

### 📤 Output

Each company is one dataset row. Dates are ISO 8601 (`YYYY-MM-DD`). The example below was run with
`includeFilingHistory` on; its officer list is shortened to two entries, and the officers' names,
ids and addresses are replaced with placeholders.

#### Fields

| Field                            | Type    | Description                                                                                                                                                                                                                                                                                                                 |
| -------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `companyNumber`                  | string  | Company registration number.                                                                                                                                                                                                                                                                                                |
| `name`                           | string  | Registered company name.                                                                                                                                                                                                                                                                                                    |
| `status`                         | string  | Company status, e.g. `Active`, `Dissolved`, `Liquidation`.                                                                                                                                                                                                                                                                  |
| `type`                           | string  | Company type, e.g. `Private limited Company`.                                                                                                                                                                                                                                                                               |
| `incorporationDate`              | string  | Date of incorporation (or registration).                                                                                                                                                                                                                                                                                    |
| `dissolutionDate`                | string  | Date the company was dissolved, when it has been.                                                                                                                                                                                                                                                                           |
| `registeredOfficeAddress`        | string  | Registered office address in full, as the register shows it.                                                                                                                                                                                                                                                                |
| `addressLines`                   | array   | Street lines of the registered office (best effort).                                                                                                                                                                                                                                                                        |
| `locality`                       | string  | Town or city of the registered office (best effort).                                                                                                                                                                                                                                                                        |
| `postalCode`                     | string  | Postcode of the registered office.                                                                                                                                                                                                                                                                                          |
| `country`                        | string  | Country of the registered office, when the register states it.                                                                                                                                                                                                                                                              |
| `sicCodes`                       | array   | Nature of business: `code` and `description` per SIC code.                                                                                                                                                                                                                                                                  |
| `previousNames`                  | array   | Former names with the `from` and `to` dates they were used.                                                                                                                                                                                                                                                                 |
| `accountsNextMadeUpTo`           | string  | End of the next accounting period.                                                                                                                                                                                                                                                                                          |
| `accountsNextDueBy`              | string  | Date the next accounts are due.                                                                                                                                                                                                                                                                                             |
| `accountsLastMadeUpTo`           | string  | End of the period covered by the last accounts filed.                                                                                                                                                                                                                                                                       |
| `accountsOverdue`                | boolean | Whether the register marks the accounts as overdue.                                                                                                                                                                                                                                                                         |
| `confirmationStatementNextDate`  | string  | Date of the next confirmation statement.                                                                                                                                                                                                                                                                                    |
| `confirmationStatementNextDueBy` | string  | Date the next confirmation statement is due.                                                                                                                                                                                                                                                                                |
| `confirmationStatementLastDate`  | string  | Date of the last confirmation statement.                                                                                                                                                                                                                                                                                    |
| `confirmationStatementOverdue`   | boolean | Whether the register marks the confirmation statement as overdue.                                                                                                                                                                                                                                                           |
| `url`                            | string  | The company's page on the register.                                                                                                                                                                                                                                                                                         |
| `officers`                       | array   | Officers: `name`, `officerId`, `officerUrl`, `role`, `status`, `appointedOn`, `appointedBefore`, `resignedOn`, `dateOfBirth` (year and month only, `YYYY-MM`), `nationality`, `countryOfResidence`, `registrationNumber` (corporate officers) and correspondence `address`. `null` when `includeOfficers` is off.           |
| `personsWithSignificantControl`  | array   | Owners: `name`, `status`, `notifiedOn`, `ceasedOn`, `dateOfBirth` (`YYYY-MM`), `nationality`, `countryOfResidence`, `legalForm`, `governingLaw`, `placeRegistered`, `registrationNumber`, `countryRegistered`, `naturesOfControl` and `address`. `null` when not requested; empty when the company lists none or is exempt. |
| `filingHistory`                  | array   | Latest filings: `date`, `type` (form code), `description`, `documentUrl` (PDF) and `pages`. `null` when not requested.                                                                                                                                                                                                      |

<details><summary>Example output</summary>

```json
{
  "companyNumber": "00445790",
  "name": "TESCO PLC",
  "status": "Active",
  "type": "Public limited Company",
  "incorporationDate": "1947-11-27",
  "dissolutionDate": null,
  "registeredOfficeAddress": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
  "addressLines": ["Tesco House", "Shire Park", "Kestrel Way"],
  "locality": "Welwyn Garden City",
  "postalCode": "AL7 1GA",
  "country": "United Kingdom",
  "sicCodes": [
    {
      "code": "47110",
      "description": "Retail sale in non-specialised stores with food, beverages or tobacco predominating"
    }
  ],
  "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"
    }
  ],
  "accountsNextMadeUpTo": "2027-02-26",
  "accountsNextDueBy": "2027-08-26",
  "accountsLastMadeUpTo": "2026-02-28",
  "accountsOverdue": false,
  "confirmationStatementNextDate": "2027-06-18",
  "confirmationStatementNextDueBy": "2027-07-02",
  "confirmationStatementLastDate": "2026-06-18",
  "confirmationStatementOverdue": false,
  "url": "https://find-and-update.company-information.service.gov.uk/company/00445790",
  "officers": [
    {
      "name": "EXAMPLE, Person 1",
      "officerId": "example-officer-1",
      "officerUrl": "https://find-and-update.company-information.service.gov.uk/officers/example-officer-1/appointments",
      "role": "Secretary",
      "status": "Active",
      "appointedOn": "2025-04-14",
      "appointedBefore": null,
      "resignedOn": null,
      "dateOfBirth": null,
      "nationality": null,
      "countryOfResidence": null,
      "registrationNumber": null,
      "address": "1 Example Street, Exampletown, EX1 1AA"
    },
    {
      "name": "EXAMPLE, Person 12",
      "officerId": "example-officer-12",
      "officerUrl": "https://find-and-update.company-information.service.gov.uk/officers/example-officer-12/appointments",
      "role": "Secretary",
      "status": "Resigned",
      "appointedOn": null,
      "appointedBefore": "1991-06-07",
      "resignedOn": "2004-03-15",
      "dateOfBirth": null,
      "nationality": "British",
      "countryOfResidence": null,
      "registrationNumber": null,
      "address": "1 Example Street, Exampletown, EX1 1AA"
    }
  ],
  "personsWithSignificantControl": null,
  "filingHistory": [
    {
      "date": "2026-08-26",
      "type": "SH06",
      "description": "Cancellation of shares. Statement of capital on 7 July 2026; GBP 397,007,409.26",
      "documentUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790/filing-history/MzUzOTMzNzQ1OWFkaXF6a2N4/document?format=pdf&download=0",
      "pages": 4
    }
  ]
}
```

</details>

### 💡 Use cases

- **Lead generation** — build lists of UK companies by name, location, SIC code or incorporation date, with their directors.
- **KYC and supplier checks** — confirm a company is active, see who runs and owns it, and check its filing deadlines.
- **Sales prospecting** — find newly incorporated companies in your sector and reach the directors.
- **Research and journalism** — trace former names, officer changes and ownership across groups of companies.
- **Compliance monitoring** — watch for overdue accounts, dissolutions and new filings on companies you work with.

### ❓ FAQ

- **Do I need a Companies House API key or account?** No. The Actor reads the same public register pages anyone can open in a browser.
- **Do I need a proxy?** No. It runs without one by default and keeps its request rate polite.
- **Why is a date of birth only a year and month?** That is all the public register shows. The Actor never outputs anything the register does not publish.
- **Is it legal to use officer and owner data?** The data is public register information. Names, partial birth dates and correspondence addresses are still personal data under UK GDPR, so you are responsible for having a lawful basis for how you store and use them.
- **Why are some fields empty?** Not every company has every detail: dissolved companies have no upcoming deadlines, new ones have no accounts yet, and the register states the country of an address only sometimes. Empty fields are `null`.
- **Can I search by industry, location or incorporation date?** Yes. Use the register's advanced company search, then paste its results URL into `startUrls`.
- **How many companies can I get?** `maxItems` caps each search or search term. Company numbers and company URLs always return their one company.

### 🔗 More scrapers by Anyx

- [SEC EDGAR Scraper](https://apify.com/anyxsolutions/sec-edgar-scraper)
- [Google Maps Email Extractor](https://apify.com/anyxsolutions/google-maps-email-extractor)
- [TED Tenders Scraper](https://apify.com/anyxsolutions/ted-tenders-scraper)
- [WHOIS Scraper](https://apify.com/anyxsolutions/whois-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [find-and-update.company-information.service.gov.uk](https://find-and-update.company-information.service.gov.uk/). Register data © Crown copyright, used under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/).

# Actor input Schema

## `startUrls` (type: `array`):

Companies House register URLs, for example a search such as https://find-and-update.company-information.service.gov.uk/search/companies?q=tesco, an advanced-search results page (…/advanced-search/get-results?…), or a company page such as https://find-and-update.company-information.service.gov.uk/company/00445790.

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

Maximum number of companies to return per search URL or search term. Leave empty to get every result the search lists.

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

Company names to look up, one per line, for example Tesco or "Rolls-Royce Holdings". Each runs a register search and returns the matches, best first.

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

Company registration numbers to look up, one per line, for example 00445790 or SC123456. Short numbers are padded with zeros.

## `includeOfficers` (type: `boolean`):

Add the company's current and resigned officers (directors, secretaries, members) from the People tab. Adds one request per 35 officers.

## `includePersonsWithSignificantControl` (type: `boolean`):

Add the people and companies with significant control (owners) and how they control the company. Adds one request per company.

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

Add the 25 most recent filings (date, form type, description and PDF link). Adds one request per company.

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

Proxy settings. The Companies House register needs no proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://find-and-update.company-information.service.gov.uk/search/companies?q=tesco"
    }
  ],
  "maxItems": 5,
  "includeOfficers": true,
  "includePersonsWithSignificantControl": false,
  "includeFilingHistory": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://find-and-update.company-information.service.gov.uk/search/companies?q=tesco"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/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 = {
    "startUrls": [{ "url": "https://find-and-update.company-information.service.gov.uk/search/companies?q=tesco" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/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 '{
  "startUrls": [
    {
      "url": "https://find-and-update.company-information.service.gov.uk/search/companies?q=tesco"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/companies-house-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anyxsolutions/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/AS2yCOHQc8JXxb2uK/builds/nQbQcUNhXda26oym8/openapi.json
