# UK Companies House Company Lookup - Official API, No PII (`digivibetech/uk-companies-house-company-lookup`) Actor

UK company data from the official Companies House API (your free key): status, SIC codes, accounts and confirmation-statement due dates with overdue flags, optional filings. No officers/PSC. $0.00297/company, no start fee. Built with AI assistance.

- **URL**: https://apify.com/digivibetech/uk-companies-house-company-lookup.md
- **Developed by:** [DigiVibeTech](https://apify.com/digivibetech) (community)
- **Categories:** Business, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.97 / 1,000 company 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 Company Lookup - Official API, No PII

Look up **UK companies** by **company number** or **name** through the **official Companies House REST API**, using **your own free API key**. Get the live register profile: status, type, incorporation date, registered office, **SIC codes with descriptions**, **accounts and confirmation-statement due dates** (with overdue flags), previous names and, optionally, the **filing history**.

Built for KYB / supplier checks, CRM enrichment, accountants tracking filing deadlines and agents that need clean company data, **without personal data**: officers, directors and PSC (beneficial owners) are never requested.

### Why this one

- **Live data from the official register,** read through the Companies House REST API with your own free key, not scraped pages.
- **Filing deadlines in one record:** accounts and confirmation-statement due dates with `overdue` flags, so a weekly run over a list of company numbers shows what is late.
- **More than the bare profile:** SIC codes with descriptions and, optionally, recent filing history with readable descriptions and PDF links.
- **No personal data:** officers, directors and PSC (beneficial owners) are never requested. Not-found numbers, API errors and sample records are free; no start fee.

### Quick start: example input, output and cost

```json
{ "apiKey": "your-api-key", "companyNumbers": ["00000006", "SC123456"], "searchQueries": ["acme widgets"], "includeFilingHistory": true }
```

Output (one item per company; illustrative values, shortened):

```json
{ "companyNumber": "SC123456", "companyName": "EXAMPLE TRADING LIMITED", "companyStatus": "active", "companyTypeText": "Private limited company",
  "incorporationDate": "2020-01-01", "registeredOfficeAddressText": "Edinburgh, EH1 1AA, United Kingdom",
  "sicCodes": ["62012"], "sicDescriptions": [{"code": "62012", "description": "Business and domestic software development"}],
  "accounts": {"nextDue": "2026-09-30", "overdue": false, "lastMadeUpTo": "2024-12-31", "lastAccountsType": "micro-entity"},
  "confirmationStatement": {"nextDue": "2027-01-15", "overdue": false},
  "filingHistory": [{"date": "2026-01-10", "category": "confirmation-statement", "type": "CS01", "descriptionText": "Confirmation statement made on 2026-01-01 with no updates"}] }
```

Cost: 3 companies with filing history = 3 × $0.00297 + 3 × $0.00049 = **$0.0104**. No start fee.

### Get your free API key (2 minutes)

1. Register at [developer.company-information.service.gov.uk](https://developer.company-information.service.gov.uk) (free).
2. **Create an application** → choose **Live** → **Create new key** → type **REST**.
3. Paste the key into **apiKey**. It is a secret input: Apify stores it encrypted, the actor sends it only to `api.company-information.service.gov.uk` (HTTP basic auth) and never logs it.
4. If you restricted the key to IP addresses or domains, Apify's servers must be allowed, otherwise you get HTTP 401.

**No key?** The run still validates your input and returns **one free sample record** (`isSample: true`) so you can see the output format. Nothing is charged.

### What you get (one item per company)

| Field | Meaning |
|---|---|
| `companyNumber`, `companyName` | Register number and current name |
| `companyStatus`, `companyStatusText`, `companyStatusDetail` | e.g. `active`, `dissolved`, `liquidation` (+ readable text) |
| `companyType`, `companyTypeText`, `subtype`, `jurisdiction` | e.g. `ltd` = Private limited company |
| `incorporationDate`, `cessationDate` | ISO dates |
| `registeredOfficeAddress` (+ `…Text`) | Premises, lines, locality, region, postcode, country, PO box (no "care of" names) |
| `registeredOfficeIsInDispute`, `undeliverableRegisteredOfficeAddress` | Register flags |
| `sicCodes`, `sicDescriptions` | Nature of business (SIC 2007) with official descriptions |
| `accounts` | Accounting reference date, next due, next made-up-to, overdue, last made-up-to, last accounts type |
| `confirmationStatement` | Next due, next made-up-to, last made-up-to, overdue |
| `hasCharges`, `hasInsolvencyHistory`, `hasBeenLiquidated`, `isCommunityInterestCompany`, `canFile` | Register flags |
| `previousCompanyNames` | Former names with dates |
| `filingHistory[]` (optional) | `date`, `category`, `type` (form), `descriptionText`, `madeUpDate`, `pages`, `filingUrl` (PDF on the official register) |
| `matchedQuery`, `companyUrl`, `fetchedAt`, `source`, `attribution` | Provenance |

### Input

| Field | Default | Meaning |
|---|---|---|
| `apiKey` | none | Your free Companies House REST key (secret) |
| `companyNumbers` | none | e.g. `00000006`, `SC123456` (spaces removed, short numbers padded) |
| `searchQueries` | none | Company names / keywords |
| `maxResultsPerQuery` | 10 | Search results looked up per query (1-100) |
| `activeOnly` | false | Drop non-active companies from search results |
| `includeFilingHistory` | false | Add recent filings ($0.00049 per company when returned) |
| `maxFilingsPerCompany` | 25 | 1-100 |
| `filingCategories` | all | e.g. `accounts`, `confirmation-statement` |
| `maxCompanies` | 100 | Safety cap per run |

### Limits

- UK companies on the Companies House register only. You need your own free Companies House API key.
- No officers, PSCs or other personal data: those endpoints are never called.
- Rate-limited to stay inside Companies House's limits, so very large lists take a while.

### Pricing

| Event | Price |
|---|---|
| Company profile returned | **$0.00297** |
| Filing history returned (optional, per company) | **$0.0005** |

No start fee. Not-found numbers, invalid input, API errors and sample records are **free**. Set a maximum cost per run and the actor stops before it is reached.

### Responsible use and compliance

- **Official API only** (`api.company-information.service.gov.uk`): no scraping of the Find and update company information website.
- **Rate limit respected:** at most **1 request per second** and **480 per 5 minutes** (Companies House allows 600 per 5 minutes per key). On HTTP 429 the actor waits once for the window to reset, then stops and reports; it never rotates keys or IPs. Do not run many copies in parallel with the same key.
- **No personal data:** officers, appointments, PSC, PSC statements, disqualified-officer and officer-search endpoints are **never called** (enforced by an allow-list in the code). Person names in filing descriptions are replaced with `[person]`; "care of" names and officer addresses are dropped.
- **Licence:** Companies House states that it imposes no rules or requirements on how the information on the public register is used; you remain responsible for data protection and other law when you use it. Readable SIC / status / filing descriptions come from Companies House enumerations (Crown copyright, Open Government Licence v3.0). Each item carries an `attribution` field.
- Honest User-Agent with a contact URL.

### Use it in n8n, Make or Zapier

Run the actor with a list of company numbers on a weekly schedule and filter on `accounts.overdue` or `confirmationStatement.nextDue` to get filing-deadline alerts.

*Maintained by DigiVibeTech. Questions: [digivibetech.com/support](https://digivibetech.com/support/). Not affiliated with or endorsed by Companies House.*

# Actor input Schema

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

Your own free key from developer.company-information.service.gov.uk (Register an application -> Create new key -> REST, live). Stored encrypted by Apify, sent only to api.company-information.service.gov.uk, never logged. Without a key the actor returns 1 free sample record so you can see the output.

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

UK company numbers, e.g. 00000006, SC123456, OC301540. Spaces are removed and short numbers padded (6 -> 00000006). Invalid entries are listed in ERRORS and never charged.

## `searchQueries` (type: `array`):

Company names or keywords (Companies House company search). Each matching company is looked up in full; duplicates with the numbers above are removed.

## `maxResultsPerQuery` (type: `integer`):

How many search results (best matches first) to look up per query.

## `activeOnly` (type: `boolean`):

Skip dissolved/closed companies from search results (company numbers you list yourself are always looked up).

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

Add the most recent filings (date, category, form type, readable description, PDF link). One extra API call per company; charged $0.00049 per company only when filings are returned. Person names are masked as \[person].

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

Newest filings to include per company (one API call, up to 100).

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

Only these categories, e.g. accounts, confirmation-statement, address, capital, incorporation, mortgage, change-of-name, liquidation, resolution. Empty = all.

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

Safety cap on companies looked up (each costs $0.00297). At 1 request per second, 100 companies take about 2 minutes (4 with filings).

## Actor input object example

```json
{
  "companyNumbers": [
    "00000006"
  ],
  "maxResultsPerQuery": 10,
  "activeOnly": false,
  "includeFilingHistory": false,
  "maxFilingsPerCompany": 25,
  "maxCompanies": 100
}
```

# Actor output Schema

## `results` (type: `string`):

All result items (overview view)

## `errors` (type: `string`):

Inputs that could not be processed, with the reason

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

Counts of processed, billed and failed items

# 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 = {
    "companyNumbers": [
        "00000006"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("digivibetech/uk-companies-house-company-lookup").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 = { "companyNumbers": ["00000006"] }

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

```

## MCP server setup

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

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/iaEnYIsPG2pkuN5iX/builds/cSrV5V9Dn8lPDWynB/openapi.json
