# UK Companies House Lookup - Company Profile, Officers & PSC (`tinyrex/uk-companies-house-lookup`) Actor

Lookup UK company profiles from the official Companies House API by company number or name. Status, registered address, SIC codes, officers and PSC. $2 per 1,000 companies found; not found free. Free API key required for live runs; Store example runs in demo mode.

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

## Pricing

from $1.60 / 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.
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 Lookup: company profile, officers and PSC

**Look up hundreds of UK companies by number or name in one run** — for KYB/KYC, supplier checks, lead enrichment and CRM clean-up. The Actor uses the **official Companies House Public Data API** and returns status, registered office, SIC codes, accounts/confirmation due dates, and optionally officers and persons with significant control (PSC). **$2 per 1,000 company profiles found; not-found and invalid inputs are free.** Live lookups need a free Companies House API key; the Store example run works in **demo mode** without one.

### What you get from the UK Companies House Lookup

- **Company number or name** — paste numbers like `00445790` (Tesco PLC) or search by name; each found profile is one charge. Officers and PSC nest on the same row (no extra event).
- **Register fields that matter for KYB** — status, type, incorporation date, registered office, SIC codes, liquidation/charges flags, accounts and confirmation-statement due dates, plus a link to the public Companies House page.
- **Official API only** — no HTML scraping of find-and-update. Rate-limited to stay under Companies House’s 600 requests / 5 minutes per key. Data reuse is allowed under Companies House open-data terms (OGL / public task).

### Sample output (JSON)

```json
{
  "query": "00445790",
  "queryType": "companyNumber",
  "found": true,
  "demo": true,
  "companyNumber": "00445790",
  "companyName": "TESCO PLC",
  "companyStatus": "active",
  "companyType": "plc",
  "dateOfCreation": "1947-11-27",
  "registeredOfficeAddress": {
    "lines": "Tesco House, Shire Park, Kestrel Way",
    "locality": "Welwyn Garden City",
    "postalCode": "AL7 1GA",
    "country": "United Kingdom"
  },
  "sicCodes": ["47110"],
  "jurisdiction": "england-wales",
  "hasBeenLiquidated": false,
  "hasCharges": true,
  "accountsNextDue": "2027-02-28",
  "confirmationStatementNextDue": "2026-12-11",
  "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790",
  "officers": null,
  "personsWithSignificantControl": null,
  "error": null
}
```

Export as **CSV, Excel or JSON**, or send it to Google Sheets, Make, Zapier, n8n, webhooks or the Apify API. A `SUMMARY` record in the key-value store has run totals.

### How to configure

1. Get a free API key at [Companies House developer hub](https://developer.company-information.service.gov.uk/) and paste it into **Companies House API key** (leave empty only for the Store demo).
2. Add **company numbers** and/or **company names**.
3. Optional: turn on **officers** and/or **PSC** (nested on the same charged profile).
4. Run. Each found company is one charge; `found: false` rows are free.

#### Example input (Store demo — no API key)

```json
{
  "companyNumbers": ["00445790", "00000006"],
  "companyNames": ["Tesco"],
  "includeOfficers": false,
  "includePersonsWithSignificantControl": false,
  "maxResultsPerName": 1,
  "maxCompanies": 100
}
```

#### Example input (live, with officers and PSC)

```json
{
  "apiKey": "YOUR_FREE_COMPANIES_HOUSE_KEY",
  "companyNumbers": ["00445790", "00000006"],
  "companyNames": ["Rolls-Royce Holdings"],
  "includeOfficers": true,
  "includePersonsWithSignificantControl": true,
  "maxResultsPerName": 3,
  "maxCompanies": 500
}
```

Prefixed numbers such as Scottish `SC…`, Northern Irish `NI…` and LLP `OC…` are accepted as typed (up to 8 letters and digits; spaces and dashes are stripped). Name search returns the top hits as full profiles, so set `maxResultsPerName` to 1 when you only want the best match.

| Setting | Default | Notes |
|---|---|---|
| apiKey | — | Free key; empty = demo (Tesco / BBC only) |
| companyNumbers | — | UK numbers (leading zeros matter) |
| companyNames | — | Search queries |
| includeOfficers | false | Nested officers, max 50 / company |
| includePersonsWithSignificantControl | false | Nested PSC, max 50 / company |
| maxResultsPerName | 1 | Full profiles per name hit (max 20) |
| maxCompanies | 100 | Cap on charged rows (max 5000) |

**Demo mode:** without an API key the Actor returns hardcoded public-register snapshots for Tesco PLC (`00445790`) and BBC (`00000006`) only, marked `demo: true`. Any other query returns `found: false` with a link to register for a free key — the run still succeeds (so daily Store QA passes). Demo found rows are charged the same as live rows so pricing is exercised.

**Speed:** throttled to about 1.8 requests/second with Retry-After on 429. Company-number lookups are one request each; name search adds one search request plus one profile per hit; officers/PSC add further list requests.

### Common use cases

- **KYB / supplier onboarding**: check that a UK supplier or customer is `active`, not in liquidation, and see who the directors and PSC are.
- **Lead enrichment**: add SIC codes, incorporation date and registered address to a list of UK company names or numbers.
- **CRM clean-up**: flag dissolved companies and overdue accounts (`accountsNextDue` in the past) in an existing account list.
- **Compliance monitoring**: schedule a weekly run on your portfolio and diff status, officers and confirmation-statement dates.

### Pricing

Pay per event: **$0.002 per company profile found** ($2 per 1,000), with Bronze/Silver/Gold discounts. Not found, invalid numbers and name misses are free. A tiny Actor-start fee applies per run.

### FAQ

**Do I need an API key?** Yes for live data. Keys are free from Companies House. The published Store example runs in demo mode without a key so quality checks pass.

**Is commercial reuse allowed?** Companies House does not restrict how public-register information is used. This Actor uses the official REST API only (not website HTML scraping). See [public task / copyright](https://www.gov.uk/government/publications/companies-house-accreditation-to-information-fair-traders-scheme/public-task-copyright-and-crown-copyright) and [data products guidance](https://www.gov.uk/guidance/companies-house-data-products).

**Are officers and PSC extra cost?** No. When enabled they nest on the company row; you still pay one `company` event per found profile.

**How do I check if a UK company is still active?**
Paste its company number into **companyNumbers** and read `companyStatus` (`active`, `dissolved`, `liquidation`, `administration` and so on) and `hasBeenLiquidated`. One found company is one charge; unknown numbers are free.

**Can I get a list of directors of a UK company for free?**
The Companies House API itself is free with a key. This Actor charges $0.002 per company found, and turning on **includeOfficers** adds up to 50 officers (name, role, appointed and resigned dates, nationality, occupation, month and year of birth, address) on the same row at no extra cost.

**Is this an official Companies House product?** No. Independent Actor, not affiliated with, endorsed or supported by Companies House or the UK government. Source data is credited to Companies House; Crown insignia are not reproduced.

### Related actors

- [LEI Lookup](https://apify.com/tinyrex/gleif-lei-lookup) — bulk GLEIF LEI search and validation.
- [Website Contact Details Extractor](https://apify.com/tinyrex/contact-details-extractor) — emails, phones and social links from domains.
- [Tech Stack Detector](https://apify.com/tinyrex/tech-stack-detector) — technologies used by any website.
- [US & UK Tenders Scraper](https://apify.com/tinyrex/us-uk-tenders-scraper) — SAM.gov and Contracts Finder notices.

# Actor input Schema

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

Free API key from https://developer.company-information.service.gov.uk/ (HTTP Basic username, empty password). Leave empty to run the Store demo (Tesco PLC / BBC only). Live lookups of any other company need a key.

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

UK company numbers to look up (e.g. 00445790 for Tesco PLC). Leading zeros matter. Invalid or unknown numbers return found=false (free).

## `companyNames` (type: `array`):

Search Companies House by company name. Each match returns a full company profile. Demo mode only resolves Tesco / BBC.

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

Also fetch officers for each company (nested on the same charged row). Caps at 50 officers per company.

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

Also fetch PSC notifications (nested on the same charged row). Caps at 50 per company.

## `maxResultsPerName` (type: `integer`):

How many search hits to turn into full profiles per name query.

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

Hard cap on found company profiles (charged rows) in this run.

## Actor input object example

```json
{
  "companyNumbers": [
    "00445790",
    "00000006"
  ],
  "companyNames": [
    "Tesco"
  ],
  "includeOfficers": false,
  "includePersonsWithSignificantControl": false,
  "maxResultsPerName": 1,
  "maxCompanies": 100
}
```

# Actor output Schema

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

UK company register data per company.

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

Totals for the run.

# 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": [
        "00445790",
        "00000006"
    ],
    "companyNames": [
        "Tesco"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tinyrex/uk-companies-house-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": [
        "00445790",
        "00000006",
    ],
    "companyNames": ["Tesco"],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tinyrex/uk-companies-house-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/13QZRn9eMEvp1pThp/builds/nUECT0ac2BkpmLDTV/openapi.json
