# UK Companies House Scraper — Company Data, Officers & KYC (`themineworks/companies-house-uk`) Actor

Scrape the official UK Companies House register: company number, status, type, incorporation date, registered office address, SIC codes and full officer roster. Search by name or look up company numbers directly. Bring your own FREE Companies House API key. Works in Claude, ChatGPT & any MCP agent.

- **URL**: https://apify.com/themineworks/companies-house-uk.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Business, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.60 / 1,000 company scrapeds

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## 🇬🇧 UK Companies House Scraper — Company Data, Officers & KYC

### Overview

Turn the official **UK Companies House** register into clean, structured JSON. Search by company name or look up exact company numbers, and get back company number, status, type, incorporation date, the structured registered office address, SIC industry codes, and the full officer roster (directors, secretaries, roles and appointment dates). Pure HTTP against the official Companies House API — **no browser, no proxy, no scraping tricks**.

Built for KYC and compliance onboarding, sanctions and PEP screening prep, UK sales prospecting, credit and supplier due diligence, and investigative research.

Reliability posture: blocked, empty, failed or unauthorised runs are **never charged**. You only pay for a company record actually delivered.

✅ Official API | ✅ No proxy needed | ✅ Full officer roster | ✅ MCP-ready for AI agents

### 🔑 You bring your own free API key

Companies House gives every developer a **free** API key. This actor accepts it as the `apiKey` input so the data comes through **your** free allowance, not a reseller markup.

1. Go to **https://developer.company-information.service.gov.uk**.
2. Sign in (free), open **Your applications → Create an application** (choose the "Live" REST API).
3. Copy the application's **API key**.
4. Paste it into the actor's `apiKey` field.

The key is used as HTTP Basic auth (key as username, empty password) and is marked secret — this actor never stores or shares it.

### Features

- Search the whole register by company name or keyword.
- Direct lookup of one or many exact company numbers.
- Full company profile: status, type, incorporation/cessation dates, jurisdiction, insolvency and liquidation flags.
- Structured registered office address and SIC industry codes.
- Optional full officer roster with roles and appointment dates for KYC.
- Same output whether you consume it via CSV, JSON, Excel, API, or an MCP tool call.

### 🧾 Input configuration

```json
{
  "apiKey": "YOUR_COMPANIES_HOUSE_API_KEY",
  "query": "monzo",
  "companyNumbers": [],
  "includeOfficers": false,
  "maxResults": 10
}
```

Or look up specific companies directly:

```json
{
  "apiKey": "YOUR_COMPANIES_HOUSE_API_KEY",
  "companyNumbers": ["09446231", "00445790"],
  "includeOfficers": true
}
```

| Input | Description |
| --- | --- |
| `apiKey` | **Required.** Your free Companies House REST API key. |
| `query` | Company name/keyword search. Use this **or** `companyNumbers`. |
| `companyNumbers` | Array of exact company numbers for direct lookup. |
| `includeOfficers` | Fetch the officer roster for each company (one extra request each). Default `false`. |
| `maxResults` | Cap on companies delivered (1–2000). Default `50`. |

### 📤 Output format

```json
{
  "company_number": "09446231",
  "company_name": "MONZO BANK LIMITED",
  "company_status": "active",
  "company_type": "ltd",
  "date_of_creation": "2015-02-06",
  "registered_office_address": {
    "address_line_1": "Broadwalk House",
    "address_line_2": "5 Appold Street",
    "locality": "London",
    "postal_code": "EC2A 2AG",
    "country": "England"
  },
  "sic_codes": ["64191"],
  "jurisdiction": "england-wales",
  "has_insolvency_history": false,
  "has_been_liquidated": false,
  "officers": [
    { "name": "SMITH, John", "officer_role": "director", "appointed_on": "2018-01-01", "nationality": "British", "occupation": "Banker" }
  ],
  "company_url": "https://find-and-update.company-information.service.gov.uk/company/09446231",
  "scraped_at": "2026-07-31T12:00:00.000Z"
}
```

| Field | Description |
| --- | --- |
| 🆔 `company_number` | UK company number |
| 🏢 `company_name` | Registered company name |
| 🚦 `company_status` | active, dissolved, liquidation, etc. |
| 🏷️ `company_type` | ltd, plc, llp, etc. |
| 📅 `date_of_creation` | Incorporation date |
| 📅 `date_of_cessation` | Dissolution date, if applicable |
| 📮 `registered_office_address` | Structured registered office address |
| 🏭 `sic_codes` | SIC industry codes |
| ⚖️ `jurisdiction` | Registration jurisdiction |
| ⚠️ `has_insolvency_history` / `has_been_liquidated` | Risk flags for due diligence |
| 👤 `officers` | Officer roster (when `includeOfficers` is on) |
| 🔗 `company_url` | Public Companies House page |
| 🕒 `scraped_at` | ISO capture timestamp |

### 💼 Common use cases

**KYC and compliance onboarding** — verify a UK counterparty, pull its officer roster and risk flags into a KYC file in seconds.

**Sales prospecting into the UK** — build a target list from a name search and enrich with status, type and incorporation date.

**Credit and supplier due diligence** — check `company_status`, insolvency/liquidation flags and incorporation age before signing.

**AI research agents** — give a compliance copilot live Companies House data via MCP so it can answer "is this UK company active and who runs it?".

### 🚀 Getting started

1. Paste your free `apiKey`.
2. Set `query` for a name search **or** `companyNumbers` for direct lookups.
3. Turn on `includeOfficers` if you need the roster.
4. Set `maxResults`, then click **Start**.
5. Download the dataset as JSON, CSV, or Excel, or pull it via API or MCP.

### Run on a schedule

Apify Console → this Actor → **Schedules** → Add schedule → pick a cadence (e.g. daily) → Save. It reruns with the same input on autopilot, no code required — useful for watching a watchlist of company numbers for status changes.

### FAQ

**Do I need an API key?** Yes — a free one from Companies House. See the key section above. The key stays yours.

**Why bring my own key?** So you use your own free allowance directly. Companies House rate-limits to 600 requests per 5 minutes per key.

**How much does it cost?** You pay per company record delivered (tiered — cheaper the more you run). Empty, failed and unauthorised runs cost nothing.

**Is this official data?** Yes — served straight from the official Companies House public API, the legal source of truth for UK company data.

### Use in Claude, ChatGPT & any MCP agent

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

Or call it programmatically:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/companies-house-uk').call({
  apiKey: 'YOUR_COMPANIES_HOUSE_API_KEY',
  query: 'monzo',
  includeOfficers: true,
  maxResults: 25,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 🛠️ Complete your KYC pipeline

- **[Norway Company Register (BRREG)](https://apify.com/themineworks/norway-brreg-entity-search)** — the same officer/KYC shape for Norway.
- **[B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder)** — turn a company into decision-maker contacts.

# Actor input Schema

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

Your OWN free Companies House REST API key. Register an application at https://developer.company-information.service.gov.uk and paste its API key here. The key is free and yours; this actor never stores or shares it. Used as HTTP Basic auth (key as username, empty password).

## `query` (type: `string`):

Search the register by company name or keyword (e.g. "monzo"). Use this OR companyNumbers.

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

One or more exact company numbers to look up directly (e.g. \["09446231"]). Use this OR query.

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

Fetch the full officer roster (directors, secretaries, roles, appointment dates) for each company. Adds one extra API request per company.

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

Maximum companies to deliver. You are only charged for companies actually returned.

## Actor input object example

```json
{
  "query": "monzo",
  "companyNumbers": [],
  "includeOfficers": false,
  "maxResults": 10
}
```

# 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 = {
    "query": "monzo",
    "companyNumbers": [],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/companies-house-uk").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 = {
    "query": "monzo",
    "companyNumbers": [],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/companies-house-uk").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 '{
  "query": "monzo",
  "companyNumbers": [],
  "maxResults": 10
}' |
apify call themineworks/companies-house-uk --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/w05PAeQ5qf9yucOyF/builds/v45f0XH6c79y7GuTX/openapi.json
