# UK Companies House Scraper - Officers, PSC, Filings $1.50/1K (`plotpointtech/uk-companies-house-scraper`) Actor

Export UK companies, directors, PSC owners, filing history with PDF links, charges and insolvency from the official Companies House API using your free key. Search by name, SIC code, location or date. $1.50 per 1,000 records.

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

## Pricing

from $0.93 / 1,000 records

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: Companies, Officers, PSC & Filings

**Search the UK company register and export clean company profiles, directors and other officers, persons with significant control (PSC), filing history with document links, charges and insolvency cases, straight from the official Companies House Public Data API.** You use your own free Companies House API key, so the data is live and official. No key yet? The tool still returns basic company records from the free data Companies House publishes for reuse. **$1.50 per 1,000 records.**

### What does this Companies House scraper do?

- **Searches companies by name or keyword**, like the search box on the Companies House website.
- **Advanced search** by SIC code (nature of business), registered office location (town, county or postcode district), incorporation date range, company status, company type and words the name must or must not contain. Ideal for lists such as "software companies in Manchester incorporated this year".
- **Looks up company numbers in bulk** (leading zeros added automatically, Scottish `SC` and Northern Irish `NI` numbers supported).
- **Returns six kinds of records** for every company found, each as its own clean row:
  - **Company profile**: status, type, incorporation date, SIC codes with descriptions, registered office address, accounts and confirmation statement dates (and whether they are overdue), previous names, charge and insolvency flags.
  - **Officers**: directors, secretaries and LLP members with role, appointment and resignation dates, nationality, occupation, country of residence, month and year of birth, correspondence address and a link to all their appointments.
  - **Persons with significant control (PSC)**: individuals and corporate owners, natures of control in plain English (for example "Ownership of shares - 75% or more"), notified and ceased dates, corporate registration details.
  - **Filing history**: date, form type, category, readable description (for example "Group of companies' accounts made up to 2026-02-28"), page count and **a direct link to the PDF document**.
  - **Charges**: charge code, status, lender (persons entitled), created/delivered/satisfied dates and particulars.
  - **Insolvency**: case type, key dates and insolvency practitioners.
- **Respects the Companies House rate limit** (600 requests per 5 minutes per key) automatically, including when your key is used by other software at the same time.

### Who uses it?

- **B2B sales and lead generation teams** building lists of UK companies by industry (SIC code), area and age, with the names of current directors.
- **Compliance, KYC and KYB teams** checking company status, directors and beneficial owners (PSC) for onboarding and periodic reviews.
- **Accountants, lenders and credit analysts** tracking accounts deadlines, overdue filings, charges and insolvency.
- **Researchers, journalists and analysts** studying company formation, ownership and industries.

### How to use it

1. **Get your free API key (about 2 minutes):**
   1. Go to the [Companies House Developer Hub](https://developer.company-information.service.gov.uk/) and click **Sign in / Register**. Create a Companies House account with your email address and confirm it.
   2. Open **Your applications** and click **Create an application**. Give it any name (for example "Apify"), a short description, and choose the **Live** environment.
   3. Inside the application click **Create new key**, choose **REST**, and leave the JavaScript domain and IP address restrictions empty (Apify's IP addresses change between runs).
   4. Copy the key and paste it into **Your Companies House API key**. The key is stored as a secret input.
2. Enter **company numbers**, a **name search** and/or **advanced search** filters.
3. Choose the **Records to return** (company, officers, PSC, filings, charges, insolvency) and set the limits.
4. Run it and download the results as Excel, CSV or JSON, or send them to your CRM.

Companies House does not charge for the API. Your key's quota (600 requests per 5 minutes) is yours alone, and the tool paces itself to stay inside it.

#### Without an API key

If you leave the key empty, the tool uses the keyless data Companies House publishes for reuse:

- **Company numbers** are looked up in the Companies House URI service (basic company details).
- **Name and advanced searches** are run against the official monthly **Free Company Data Product**, a snapshot of all ~5.5 million live companies. The tool streams the snapshot and stops downloading as soon as it has enough matches; a search that matches few companies may read the whole snapshot (usually under a minute).

Keyless records are company records only (no officers, PSC, filings, charges or insolvency), the snapshot is updated monthly and it contains live companies only (no dissolved companies). You can also force this source with **Data source: Monthly snapshot**, which is handy for very large exports because it uses no API quota.

### Input example

```json
{
  "apiKey": "YOUR_COMPANIES_HOUSE_API_KEY",
  "sicCodes": ["62012"],
  "location": "Manchester",
  "incorporatedFrom": "2025-01-01",
  "companyStatus": ["active"],
  "recordTypes": ["company", "officers", "psc"],
  "currentOnly": true,
  "maxCompanies": 200,
  "maxResults": 2000
}
```

| Field | What it does |
|---|---|
| `apiKey` | Your free Companies House REST API key (secret). Optional, but needed for live data and for everything except company records. |
| `companyNumbers` | Company registration numbers to look up. |
| `searchQuery` | Name or keyword search. |
| `sicCodes`, `location`, `incorporatedFrom`, `incorporatedTo`, `companyStatus`, `companyType`, `nameIncludes`, `nameExcludes` | Advanced search filters. Dates use YYYY-MM-DD. |
| `recordTypes` | Any of `company`, `officers`, `psc`, `filings`, `charges`, `insolvency`. Default: `company`. |
| `currentOnly` | Skip resigned officers and ceased PSCs (default on). |
| `filingCategories` | Only these filing categories, e.g. `accounts`, `confirmation-statement`, `officers`. |
| `fullProfiles` | Fetch the full profile for each search result (adds accounts and confirmation statement dates, previous names, flags). One extra API request per company. |
| `maxCompanies` | Maximum companies taken from each search. |
| `maxItemsPerCompany` | Maximum officers / PSCs / filings / charges per company. |
| `maxResults` | Maximum rows in total (you pay per row). |
| `dataSource` | `auto` (default), `api` or `snapshot`. |

If you run the tool with no input at all, it runs a small demo search (software development companies registered in Manchester) without a key.

### Output example

A real company record from the default run (keyless snapshot):

```json
{
  "recordType": "company",
  "companyNumber": "07368876",
  "companyName": "1-WEB SERVICE LTD.",
  "companyStatus": "active",
  "companyStatusDetail": "Active",
  "companyType": "ltd",
  "companyTypeText": "Private Limited Company",
  "companySubtype": null,
  "jurisdiction": "United Kingdom",
  "incorporationDate": "2010-09-08",
  "cessationDate": null,
  "sicCodes": ["62012"],
  "sicDescriptions": ["62012 - Business and domestic software development"],
  "registeredAddress": "23 KINGSHILL ROAD, MANCHESTER, M21 9HD, ENGLAND",
  "addressLine1": "23 KINGSHILL ROAD",
  "addressLine2": null,
  "locality": "MANCHESTER",
  "region": null,
  "postalCode": "M21 9HD",
  "country": "ENGLAND",
  "accountsType": "MICRO ENTITY",
  "accountsLastMadeUpTo": "2025-09-30",
  "accountsNextDue": "2027-06-30",
  "accountsOverdue": null,
  "confirmationStatementLastMadeUpTo": "2026-04-15",
  "confirmationStatementNextDue": "2027-04-29",
  "confirmationStatementOverdue": null,
  "hasCharges": false,
  "hasInsolvencyHistory": null,
  "hasBeenLiquidated": null,
  "previousNames": [],
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/07368876",
  "dataSource": "Companies House Free Company Data Product (snapshot 2026-11-01)",
  "scrapedAt": "2026-11-01T19:16:42Z"
}
```

Other record types share `recordType`, `companyNumber`, `companyName`, `companyUrl` and `dataSource`, plus their own fields:

| `recordType` | Main fields |
|---|---|
| `officer` | `name`, `officerRole`, `appointedOn`, `resignedOn`, `isActive`, `nationality`, `occupation`, `countryOfResidence`, `birthYear`, `birthMonth`, `address`, `officerId`, `officerAppointmentsUrl` |
| `psc` | `name`, `kind`, `pscType`, `naturesOfControl`, `naturesOfControlText`, `notifiedOn`, `ceasedOn`, `isActive`, `nationality`, `birthYear`, `birthMonth`, `address`, `corporateRegistrationNumber` |
| `filing` | `transactionId`, `date`, `category`, `formType`, `description`, `pages`, `documentPdfUrl`, `documentMetadataUrl`, `documentContentApiUrl` |
| `charge` | `chargeCode`, `status`, `classification`, `createdOn`, `deliveredOn`, `satisfiedOn`, `personsEntitled`, `particulars`, `containsFloatingCharge`, `containsNegativePledge` |
| `insolvency` | `caseNumber`, `caseType`, `caseTypeText`, `dates`, `practitioners`, `insolvencyStatus` |

`documentPdfUrl` opens the filed document as a PDF on the public Companies House website. `documentContentApiUrl` is the Document API address for downloading it with your key.

### How much does it cost?

**$1.50 per 1,000 records** ($0.0015 per row), plus a $0.00005 start fee per run. Companies that are not found are logged and not charged. The Companies House API itself is free.

| You collect | Rows | You pay |
|---|---|---|
| Demo run: 20 software companies in Manchester | 20 | $0.03 |
| 1,000 companies from an advanced search, profiles only | 1,000 | $1.50 |
| 1,000 companies plus their current directors (about 2 each) | about 3,000 | about $4.50 |
| KYB pack for 50 companies: profile, current officers, PSC, last 20 filings, charges | about 1,400 | about $2.10 |

**Volume discounts on higher Apify plans.** The prices above are for the Apify Free plan. On paid plans the per-result price drops automatically: about 15% lower on Bronze, 25% lower on Silver and 38% lower on Gold and above.

### Use it via API, Make, Zapier, n8n or an AI agent

**Apify API.** Start a run and get the results back in one HTTP request (replace `YOUR_API_TOKEN` with the token from Apify Console > Settings > Integrations):

```bash
curl -X POST "https://api.apify.com/v2/acts/plotpointtech~uk-companies-house-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apiKey": "YOUR_COMPANIES_HOUSE_API_KEY", "companyNumbers": ["00445790"], "recordTypes": ["company", "officers", "psc"]}'
```

For longer jobs, start the run asynchronously and read the dataset when it finishes. Official `apify-client` libraries exist for Python and JavaScript; the **API** tab on this page has ready-made code.

**No-code automation.** Connect the tool to **Make, Zapier, n8n, Google Sheets, Slack, Airtable** or any webhook with Apify integrations, and use **Schedules** in Apify Console to run it daily or weekly, for example to collect newly incorporated companies in your sector.

**AI agents (MCP).** Give Claude, ChatGPT, Cursor, VS Code or any MCP-compatible agent direct access to this tool through the hosted Apify MCP server. Add this server URL to your client:

```
https://mcp.apify.com?tools=plotpointtech/uk-companies-house-scraper
```

The agent can then call the tool with the same input fields shown above and read the results.

### FAQ

**Is it legal to use Companies House data? What about GDPR?**
The register is public by law: the Companies Act 2006 requires Companies House to make company and officer information available for public inspection, and Companies House states that it imposes no rules on how register information is used. The API and the Free Company Data Product are official services Companies House provides so that people and technology providers can use the data. However, officer and PSC names, nationalities, months and years of birth and service addresses are **personal data** under the UK GDPR and the Data Protection Act 2018. If you store or use them (for example for marketing), you are the data controller and are responsible for having a lawful basis, telling people how you use their data where required, keeping it accurate and up to date, and following the Privacy and Electronic Communications Regulations (PECR) for email and phone marketing. Companies House does not check the accuracy of what companies file.

**Is it allowed to use my API key with a third-party tool like this?**
Yes. Companies House issues free keys to anyone who registers an application on its Developer Hub and describes the API as a way for both consumers and technology providers to access live company data. You register your own application and key, the quota is yours, and the tool keeps within the published rate limit of 600 requests per 5 minutes. Keep your key private; you can regenerate or delete it on the Developer Hub at any time.

**How fast is it?**
With a key, each company needs one request per record type, and the API allows 600 requests per 5 minutes, so about 120 companies a minute for one record type. The tool paces itself and logs an estimate. Keyless snapshot searches typically finish in seconds to a minute.

**Does it include email addresses or phone numbers?**
No. Companies House does not publish them. To find contact details on company websites, combine it with our Email & Contact Scraper.

**Why are some officers' full dates of birth missing?**
Companies House publishes only the month and year of birth, and only service addresses (not home addresses) for individuals.

**Can I get dissolved companies?**
Yes, with an API key: use the name search, company numbers, or the advanced search with status `dissolved`. The keyless snapshot contains live companies only.

**What does "Companies House API rejected the API key" mean?**
Check that you copied a **REST** key (not a streaming key) from a **Live** application and that it has no IP address restriction.

### Related tools from Plot Point Technologies

- [Email & Contact Scraper - Website Emails, Phones & Socials](https://apify.com/plotpointtech/website-contact-finder): emails, phones and social links from any list of company websites.
- [Government Tenders Scraper - EU TED, UK & Canada Contracts](https://apify.com/plotpointtech/government-tenders-feed): open public contracts from the UK, EU and Canada in one format.
- [WHOIS & Domain Lookup - Bulk RDAP, DNS, SSL & Mail Provider](https://apify.com/plotpointtech/bulk-domain-lookup): registration, DNS and mail provider data for company domains.
- [SEC Form D Scraper - New Startup Funding Leads Daily](https://apify.com/plotpointtech/sec-form-d-fundraise-feed): US companies that just raised money, from SEC Form D filings.
- [Local Business Leads Scraper - MX-Checked Emails & Phones](https://apify.com/plotpointtech/local-business-leads): local businesses by category and city with checked emails.

Plot Point Technologies is not affiliated with Companies House or the UK Government. Contains public sector information from Companies House.

***

If this tool saved you time, we would be grateful for a short review on this page; it helps other people find it. If something did not work as expected, please open an issue on the **Issues** tab and we will look into it quickly.

# Actor input Schema

## `apiKey` (type: `string`):

Your own free REST API key from the Companies House Developer Hub (developer.company-information.service.gov.uk > Your applications > Create an application > Create new key > REST). Takes about 2 minutes; see the README. Without a key the tool still returns basic company records from the keyless data Companies House publishes (monthly snapshot and URI service), but officers, PSC, filings, charges and insolvency need a key.

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

Look up specific companies by registration number, e.g. 00445790 or SC123456. Leading zeros are added automatically.

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

Company name search, like the search box on the Companies House website, e.g. 'tesco' or 'green energy'. With an API key this uses the official search (current and previous names, ranked by relevance); without a key every word must appear in the company name.

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

5-digit SIC 2007 nature-of-business codes, e.g. 62012 (business and domestic software development), 56101 (licensed restaurants), 68100 (buying and selling of own real estate).

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

Town, city, county or postcode (district) of the registered office, e.g. Manchester, Kent or M1.

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

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

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

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

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

Keep only these statuses. Leave empty for all. Note: the keyless monthly snapshot only contains live companies (active, liquidation, administration...), not dissolved ones.

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

Keep only these company types. Leave empty for all.

## `nameIncludes` (type: `string`):

Company name must contain this text.

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

Company name must not contain this text.

## `recordTypes` (type: `array`):

What to return for every company found. Each record is one dataset row (and one billed result). Everything except 'Company' needs your API key.

## `currentOnly` (type: `boolean`):

Skip resigned officers and ceased persons with significant control.

## `filingCategories` (type: `array`):

Only these filing-history categories. Leave empty for all.

## `fullProfiles` (type: `boolean`):

Search results already include name, number, status, type, address, incorporation date (and SIC codes for advanced search). Turn on to also get accounts and confirmation-statement dates, previous names and charge/insolvency flags. Uses one extra API request per company.

## `maxCompanies` (type: `integer`):

Maximum companies taken from the name search and from the advanced search.

## `maxItemsPerCompany` (type: `integer`):

Cap per company and record type. Large PLCs can have thousands of filings.

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

Stop after this many dataset rows in total (you pay per row).

## `dataSource` (type: `string`):

Auto: live API when you supply a key, otherwise the keyless sources. Snapshot: always use the monthly Free Company Data Product (useful for very large exports of live companies; no API quota used).

## Actor input object example

```json
{
  "sicCodes": [
    "62012"
  ],
  "location": "Manchester",
  "recordTypes": [
    "company"
  ],
  "currentOnly": true,
  "fullProfiles": false,
  "maxCompanies": 20,
  "maxItemsPerCompany": 100,
  "maxResults": 1000,
  "dataSource": "auto"
}
```

# Actor output Schema

## `results` (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 = {
    "sicCodes": [
        "62012"
    ],
    "location": "Manchester",
    "recordTypes": [
        "company"
    ],
    "maxCompanies": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("plotpointtech/uk-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 = {
    "sicCodes": ["62012"],
    "location": "Manchester",
    "recordTypes": ["company"],
    "maxCompanies": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("plotpointtech/uk-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 '{
  "sicCodes": [
    "62012"
  ],
  "location": "Manchester",
  "recordTypes": [
    "company"
  ],
  "maxCompanies": 20
}' |
apify call plotpointtech/uk-companies-house-scraper --silent --output-dataset

```

## MCP server setup

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