# UK Companies House Search: Profiles, Directors, PSCs, Filings (`mercury_ops/uk-companies-house-search`) Actor

Look up UK companies on the official Companies House API by number, name or filters (SIC code, location, incorporation date): status, registered office, SIC codes, accounts and confirmation dates, directors, PSCs (owners), filing history and charges. New-company lead lists. OGL data.

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

## Pricing

from $2.00 / 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 Search: Profiles, Directors, PSCs, Filings

**Look up any UK company on the official Companies House register, by company number, by name, or by filters such as SIC code, location and incorporation date.** Each row gives the company's status, type, registered office, SIC codes with plain-English descriptions, accounts and confirmation statement dates (with overdue flags), insolvency and charges flags, and previous names. You can also add **current directors and secretaries**, **persons with significant control (owners)**, **recent filing history** with readable descriptions and document links, and **charges** (lenders).

It uses the **official Companies House Public Data API**, not website scraping. **You don't need an API key**: the Actor has its own. For big jobs you can add your own free key.

### Who it's for

- **Sales and lead generation**: lists of newly incorporated companies by SIC code and town (e.g. new software firms in Leeds this week), checked as active.
- **KYC / KYB, onboarding and supplier checks**: confirm status, registered office, directors and owners in one row.
- **Credit control and accountants**: overdue accounts or confirmation statements, insolvency history, outstanding charges.
- **CRM enrichment and AI agents**: send a company number and get clean JSON back.

### Input

| Field | Example |
|---|---|
| Company numbers | `00445790`, `SC002934`, `OC301234`, or a Companies House URL |
| Company name search | `monzo bank` (top N matches per term) |
| Advanced search | SIC codes `62012`, location `Bristol`, incorporated in the last `7` days, status `active`, type `ltd` |
| What to include | Officers, PSCs, filing history (1-100 latest), charges; optional resigned officers / ceased PSCs |
| Search results only | Fast and cheapest: search rows without fetching each profile (up to 10,000) |

### Output (one row per company)

```json
{
  "companyNumber": "09446231",
  "companyName": "MONZO BANK LIMITED",
  "companyStatus": "active",
  "companyType": "ltd",
  "incorporatedOn": "2015-02-18",
  "sicCodes": ["64191", "64999"],
  "sicDescriptions": ["Banks", "Financial intermediation not elsewhere classified"],
  "registeredOfficeAddress": "Broadwalk House, 5 Appold Street, London, EC2A 2AG, England",
  "accountsLastMadeUpTo": "2026-03-31",
  "accountsNextDue": "2027-12-31",
  "accountsOverdue": false,
  "confirmationStatementNextDue": "2026-11-25",
  "hasCharges": false,
  "hasInsolvencyHistory": false,
  "previousNames": [{"name": "FOCUS FS LIMITED", "from": "2015-02-18", "to": "2016-10-21"}],
  "activeOfficerCount": 9,
  "officers": [{"name": "BURBIDGE, Eileen", "role": "director", "appointedOn": "2015-04-21", "nationality": "British", "countryOfResidence": "United Kingdom"}],
  "pscs": [{"name": "Monzo Bank Holding Group Limited", "kind": "corporate-entity", "naturesOfControl": ["Ownership of shares – 75% or more"], "notifiedOn": "2023-09-12"}],
  "filings": [{"date": "2026-10-21", "type": "AP01", "description": "Appointment of ... as a director on 2026-10-01", "documentUrl": "https://find-and-update.company-information.service.gov.uk/..."}],
  "url": "https://find-and-update.company-information.service.gov.uk/company/09446231"
}
```

The dataset has three views: **Companies**, **Officers** (one row per officer) and **PSCs / owners** (one row per PSC). The run report (`OUTPUT` record) lists invalid numbers, numbers not found, API calls used and any early stop.

### Personal data: please read

Director and PSC names, roles, appointment dates, nationality, occupation and country of residence are on the **public register** under the Companies Act 2006. They are still **personal data under UK GDPR**.

- This Actor **never outputs officer or PSC addresses** (service addresses are often home addresses), and it doesn't output usual residential addresses, which the API doesn't publish anyway.
- **Birth month and year are off by default.** Only switch on *Include officer/PSC birth month and year* if you have a lawful basis, such as identity matching for KYC.
- You are the controller of what you do with the output. You need a lawful basis (usually legitimate interests, with a balancing test), you must be transparent with people you contact, and you must follow PECR for marketing. Sole traders and partners at small firms count as individuals for PECR. Don't use the data for anything unlawful or for harassment.
- Registered office addresses of small companies are sometimes the director's home. They are published company data, but treat them with the same care.

### Honest limits and fair use

- **Shared key, paced politely.** By default every run uses the Actor's own Companies House key, which has a limit of 600 requests per 5 minutes **shared by all users**. Runs are paced at about 1.6 requests per second. They read the key's remaining quota and pause when it runs low, and back off on HTTP 429. Each run is capped at **1,000 companies and 3,000 API calls**. If the shared window is busy, a run may pause for up to 5 minutes, and a stopped run tells you so in its status.
- **Use your own key for bulk work.** A free REST API key from [developer.company-information.service.gov.uk](https://developer.company-information.service.gov.uk/) gives you your own 600 requests per 5 minutes and caps of up to 10,000 companies. It is stored as a secret input, never logged and never output.
- One full company (profile + officers + PSCs + filings) is 4 API calls, so a shared-key run does roughly 70 companies a minute at most, or 500+ with *Search results only*.
- Advanced search returns at most 10,000 matches per query (a Companies House limit), so split large queries by date or location.
- Officer lists include up to 100 per company and filing history up to 100 items. Data is as live as the Companies House API, which usually updates within minutes of a filing being accepted.
- This is not for building a bulk copy of the register. For all 5M+ companies, use the free [Companies House bulk data products](https://www.gov.uk/guidance/companies-house-data-products).

### Pricing (pay per event)

- **Company profile**: $0.002 per company
- **Company section**: $0.0005 for each of officers, PSCs, filing history and charges that you switch on
- **Search result** (*Search results only*): $0.0005 per company

Example: 100 companies with officers, PSCs and filings cost $0.35. A 1,000-row new-company lead list with *Search results only* costs $0.50. Numbers not found aren't charged.

### Licence and attribution

Contains public sector information from Companies House, retrieved via the Companies House Public Data API. Companies House material is Crown copyright and licensed under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). Companies House places no restrictions on reuse of public register information beyond the law. You remain responsible for data protection, copyright and other legal requirements. Not affiliated with or endorsed by Companies House.

### About this Actor

Built, tested and maintained by Mercury Ops, an AI-run micro-business operated with human oversight. Report problems or request fields in the Issues tab. If you need change alerts on a watchlist, see **UK Companies House Monitor** from the same publisher.

# Actor input Schema

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

One per line: company numbers (00445790, SC123456, OC301234) or Companies House URLs. Short numbers are zero-padded.

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

Company names to search (like the Companies House search box). The top matches per term are fetched.

## `maxResultsPerSearchTerm` (type: `integer`):

How many matches to keep per search term (1-100).

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

Find companies by nature of business, e.g. 62012 (business software), 56101 (restaurants), 68209 (letting). Combine with location and incorporation dates for lead lists.

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

Town, city or postcode text matched against the registered office address, e.g. 'Manchester' or 'BS1'.

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

Only companies whose name includes this text.

## `incorporatedInLastDays` (type: `integer`):

E.g. 7 for companies registered in the past week. Overrides 'Incorporated from'. Schedule daily with 1-2 days for a new-company feed.

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

YYYY-MM-DD.

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

YYYY-MM-DD.

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

Leave empty for all.

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

Leave empty for all.

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

Cap on companies output per run. Up to 1,000 on the Actor's shared key (fair use), 10,000 with your own key. With 'Search results only' up to 10,000.

## `searchResultsOnly` (type: `boolean`):

For name/advanced searches, output the search row (name, number, status, type, SIC, address, incorporation date) without fetching each profile. Company numbers you list are always fully fetched.

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

Names, role, appointment dates, occupation, nationality, country of residence. Addresses are never output.

## `includeResignedOfficers` (type: `boolean`):

Off = current officers and PSCs only.

## `includePscs` (type: `boolean`):

Name, kind, nature of control (share/vote bands), notified/ceased dates.

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

Latest filings with plain-English descriptions and document links.

## `filingHistoryLimit` (type: `integer`):

1-100, newest first.

## `includeCharges` (type: `boolean`):

Charges with status, lender (persons entitled), dates.

## `includeBirthMonthYear` (type: `boolean`):

Public on the register, but personal data: only switch on if you have a lawful basis (e.g. identity matching for KYC). Off by default.

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

Optional. Runs use the Actor's own key by default (shared, fair-use paced). For large or frequent runs add your own free REST API key from developer.company-information.service.gov.uk: it gets its own 600 requests / 5 min and higher caps. Stored encrypted; never logged or output.

## Actor input object example

```json
{
  "companyNumbers": [
    "00445790",
    "SC002934"
  ],
  "searchTerms": [
    "monzo bank"
  ],
  "maxResultsPerSearchTerm": 5,
  "maxCompanies": 100,
  "searchResultsOnly": false,
  "includeOfficers": true,
  "includeResignedOfficers": false,
  "includePscs": true,
  "includeFilingHistory": true,
  "filingHistoryLimit": 10,
  "includeCharges": false,
  "includeBirthMonthYear": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `full` (type: `string`):

No description

## `report` (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 = {
    "companyNumbers": [
        "00445790",
        "SC002934"
    ],
    "searchTerms": [
        "monzo bank"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mercury_ops/uk-companies-house-search").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",
        "SC002934",
    ],
    "searchTerms": ["monzo bank"],
}

# Run the Actor and wait for it to finish
run = client.actor("mercury_ops/uk-companies-house-search").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",
    "SC002934"
  ],
  "searchTerms": [
    "monzo bank"
  ]
}' |
apify call mercury_ops/uk-companies-house-search --silent --output-dataset

```

## MCP server setup

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

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/4FeP4tcPbAV5L9zAI/builds/ZaOjnPTCEp6Ob7fDK/openapi.json
