# UK Companies House API – Company Search, SIC & Filings (`pinkish_armada/companies-house-uk`) Actor

UK company data from the official Companies House API with your own free key: profiles by number or URL, name search, advanced search by SIC code, incorporation date, status and location, due dates, risk flags, filing history. Company-level only. $1.50 per 1k.

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

## Pricing

from $1.50 / 1,000 company with full profiles

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/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 API – Company Search, SIC Codes & Filings

Get **UK company data from Companies House** through the **official Companies House REST API**: full company profiles by company number or URL, **company name search**, **advanced search by SIC code, incorporation date, status, company type and location**, accounts and confirmation-statement due dates, risk flags and **filing history**. You bring your own **free Companies House API key**; we return clean, flat JSON/CSV/Excel rows.

### Why this Actor

- 💸 **$1.50 per 1,000 full company profiles** ($0.0015 each), **$0.50 per 1,000 basic search rows**, filings $0.20 per 1,000. The most-used Companies House Actors charge $4 or more per 1,000 companies.
- 🔑 **Your own free API key.** Companies House gives every developer a free key (600 requests per 5 minutes). It is used only inside your run and never stored.
- ✅ **Pay only for results.** Not found, invalid numbers, a missing or rejected key and API errors are **free**.
- 🏭 **Lead lists by industry and date.** Advanced search finds e.g. *all active software companies (SIC 62012) incorporated in Manchester since 1 Oct 2026*, up to 5,000 per query.
- 📅 **Compliance view.** Next accounts and confirmation-statement due dates, overdue flags, charges, insolvency history, liquidation, disputed/undeliverable office address.
- 🏷️ **Human-readable labels.** SIC codes come with their industry descriptions, status and company type with plain-English labels.
- 🛡️ **Company-level data only.** We deliberately do **not** fetch officers, directors' details or persons with significant control (personal data), and filing rows have officer names removed.
- 🤖 **Agent friendly.** No browser, no proxies, small memory — works great from MCP, Make, Zapier, n8n and the Apify API.

### How to get a free Companies House API key (2 minutes)

1. Go to <https://developer.company-information.service.gov.uk/> and **Sign in / Register**.
2. Open **Your applications → Create an application** (name it anything, choose **Live**).
3. Click **Create new key → REST**, then copy the key into the **Companies House REST API key** field.

### How much does it cost?

| Event | Price |
|---|---|
| Company with full profile | **$0.0015** |
| Basic search row (full profile switched off) | **$0.0005** |
| Filing history item | **$0.0002** |
| Actor start | $0.00005 / GB |

**Examples:** 1,000 companies by number = **$1.50**. 5,000 new companies from an advanced search with basic rows = **$2.50**. 100 companies with their 10 newest filings = $0.15 + $0.20 = **$0.35**.

### Input examples

**Look up companies by number or URL**

```json
{
  "companiesHouseApiKey": "YOUR_KEY",
  "companies": ["00445790", "SC123456", "https://find-and-update.company-information.service.gov.uk/company/00502851"]
}
```

**Search by name** (ranked like the Companies House search)

```json
{ "companiesHouseApiKey": "YOUR_KEY", "searchTerms": ["greggs", "octopus energy"], "maxResultsPerSearch": 20 }
```

**New companies by industry and place** (advanced search)

```json
{
  "companiesHouseApiKey": "YOUR_KEY",
  "sicCodes": ["62012", "62020"],
  "companyStatus": ["active"],
  "incorporatedFrom": "2026-10-01",
  "location": "Manchester",
  "maxAdvancedResults": 500,
  "includeFullProfile": false
}
```

| Field | Default | Description |
|---|---|---|
| `companiesHouseApiKey` | – | Your free REST API key (secret). |
| `companies` | – | Company numbers (`00445790`, `SC123456`, short numbers are zero-padded) or company page URLs. |
| `searchTerms` | – | Company names / keywords. |
| `maxResultsPerSearch` | 20 | Ranked results per name search (max 1,000). |
| `sicCodes`, `incorporatedFrom/To`, `dissolvedFrom/To`, `companyStatus`, `companyType`, `location`, `nameIncludes` | – | Advanced-search filters (combined with AND). |
| `maxAdvancedResults` | 100 | Max companies from the advanced search (max 5,000 per query). |
| `includeFullProfile` | true | Fetch the full profile for every search result (one extra API request each). Off = basic rows, cheaper and faster. |
| `includeFilingHistory` | false | Add the newest filings to each full row. |
| `maxFilingsPerCompany` | 10 | Filings per company (max 100). |
| `filingCategory` | all | e.g. `accounts`, `confirmation-statement`, `incorporation`, `capital`. |

### Output

One row per company. Full rows look like this (illustrative values, shortened):

```json
{
  "companyNumber": "00445790",
  "companyName": "TESCO PLC",
  "companyStatus": "active",
  "companyStatusLabel": "Active",
  "companyType": "plc",
  "companyTypeLabel": "Public limited company",
  "jurisdiction": "england-wales",
  "dateOfCreation": "1947-11-27",
  "sicCodes": ["47110"],
  "sicDescriptions": ["Retail sale in non-specialised stores with food, beverages or tobacco predominating"],
  "registeredOfficeAddress": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA",
  "addressPostalCode": "AL7 1GA",
  "accountsLastMadeUpTo": "2026-02-24",
  "accountsNextDue": "2027-08-24",
  "accountsOverdue": false,
  "confirmationStatementNextDue": "2027-05-01",
  "hasCharges": true,
  "hasInsolvencyHistory": false,
  "previousCompanyNames": [{ "name": "...", "effectiveFrom": "...", "ceasedOn": "..." }],
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790",
  "source": "company-number",
  "detailLevel": "full",
  "status": "ok"
}
```

With `includeFilingHistory`, each full row also has `filings` (`date`, `category`, `type` e.g. AA/CS01, `description`, `pages`, `madeUpDate`, `filingUrl` to the PDF) and `filingsTotal`. Search rows add `searchTerm` and `searchRank`. Errors are rows with `status: "error"`, `errorCode` (`MISSING_API_KEY`, `INVALID_API_KEY`, `NOT_FOUND`, `INVALID_COMPANY_NUMBER`, `HTTP_xxx`) and `error` — never charged. A run summary is saved as `OUTPUT`.

Dataset views: **Companies** (overview) and **Compliance & risk flags**. Export as JSON, CSV, Excel or via the API.

### Use cases

- **B2B lead lists:** new companies by SIC code and town, ready for your CRM (company-level data).
- **KYB / onboarding checks:** status, incorporation date, registered office, overdue accounts, insolvency and charges flags.
- **Monitoring:** schedule a daily run with `incorporatedFrom` set to yesterday to catch new incorporations in your niche, or re-check a portfolio of company numbers for status changes and overdue filings.
- **Data enrichment:** turn a spreadsheet of company numbers into clean rows with industry descriptions.

### FAQ

**Do I need to pay Companies House?** No. The REST API and keys are free. Companies House limits each key to 600 requests per 5 minutes; the Actor paces itself (about 2 requests per second) and waits automatically if it hits the limit. One full company costs one request (plus one for filings).

**Why no directors or PSC data?** Officer and beneficial-owner records are personal data. This Actor focuses on company-level information so you can use it with fewer data-protection obligations. You are still responsible for how you use the data (Companies House data is available under the Open Government Licence).

**Is this an official Companies House product?** No. It is an independent tool that calls the official public API with your key. Not affiliated with or endorsed by Companies House.

**What if my key is wrong?** The run stops at the first HTTP 401, records `INVALID_API_KEY` and charges nothing further. Make sure you created a **REST** key for a **Live** application.

# Actor input Schema

## `companiesHouseApiKey` (type: `string`):

Your own free Companies House REST API key. Register at https://developer.company-information.service.gov.uk/, create an application and add a REST API key (live). Used only inside your run, never stored. Without a key nothing is fetched or charged.

## `companies` (type: `array`):

Companies House company numbers (e.g. 00445790, SC123456) or company page URLs. Each returns the full company profile.

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

Company names or keywords, ranked like the Companies House search.

## `maxResultsPerSearch` (type: `integer`):

How many ranked companies to take from each name search.

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

SIC 2007 codes, e.g. 62012 (software development), 56101 (restaurants), 68209 (letting). Combine with the other advanced filters to build lists of companies by industry.

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

YYYY-MM-DD. Find newly incorporated companies, e.g. 2026-10-01.

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

YYYY-MM-DD.

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

Only companies with these statuses.

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

Companies House type codes, e.g. ltd, plc, llp, private-limited-guarant-nsc, scottish-partnership.

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

Registered office town, city or postcode area, e.g. Manchester or BS1.

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

Only companies whose name contains this text.

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

YYYY-MM-DD (use with status dissolved).

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

YYYY-MM-DD.

## `maxAdvancedResults` (type: `integer`):

Maximum companies from the advanced search (Companies House returns at most 5,000 per query; narrow the filters for more).

## `includeFullProfile` (type: `boolean`):

On: every search result gets the full profile (accounts and confirmation-statement dates, charges/insolvency flags, previous names) at the company price. Off: the search fields only (name, number, status, type, dates, SIC, address) at the lower basic price, much faster.

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

Add the newest filings (date, form type, category, description, document link) to each full company row. Charged per filing.

## `maxFilingsPerCompany` (type: `integer`):

Newest filings to include per company.

## `filingCategory` (type: `string`):

Only filings of this category.

## Actor input object example

```json
{
  "companies": [
    "00445790"
  ],
  "searchTerms": [
    "greggs"
  ],
  "maxResultsPerSearch": 5,
  "maxAdvancedResults": 100,
  "includeFullProfile": true,
  "includeFilingHistory": false,
  "maxFilingsPerCompany": 10,
  "filingCategory": ""
}
```

# Actor output Schema

## `companies` (type: `string`):

Company number, name, status, type, incorporation date, SIC codes and industry, registered office, due dates.

## `compliance` (type: `string`):

Overdue accounts/confirmation statements, charges, insolvency, liquidation and address flags.

## `summary` (type: `string`):

Counts of companies, filings and errors.

# 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 = {
    "companies": [
        "00445790"
    ],
    "searchTerms": [
        "greggs"
    ],
    "maxResultsPerSearch": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("pinkish_armada/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 = {
    "companies": ["00445790"],
    "searchTerms": ["greggs"],
    "maxResultsPerSearch": 5,
}

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

```

## MCP server setup

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

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/LAu1D2fNy5s4cQK06/builds/JYIu6sP7edVK5H6b4/openapi.json
