# Companies House Registry Watch (UK companies, officers, PSC) (`registry-watch-data/companies-house-registry-watch`) Actor

Search UK companies by SIC code, postcode and incorporation date via the official Companies House API. Officers and PSC included. Monitor new incorporations. Pay per result, no API key needed.

- **URL**: https://apify.com/registry-watch-data/companies-house-registry-watch.md
- **Developed by:** [Registry Watch Data](https://apify.com/registry-watch-data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 company records

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?

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

## Companies House Registry Watch — UK company data scraper (officers, PSC, new incorporations)

Search the **UK Companies House register** by company name, company number, **SIC code**, **postcode / location** and **incorporation date**, and get clean JSON with **officers** and **persons with significant control (PSC)**. Uses the **official Companies House API** (no HTML scraping, no login, no proxies), so results are complete, fresh and reliable. **No API key needed** on your side. **Pay per result.**

Typical uses: UK company research, KYB / due diligence, lead lists by SIC code and area, tracking **newly incorporated companies**, spotting **overdue accounts**, feeding CRMs and AI agents.

### What you get

For each company: number, name, status, type, incorporation date, SIC codes, registered office address, next accounts due and overdue flag, next confirmation statement due, and a link to the public register page. Optionally officers (name, role, appointed / resigned dates, month-year of birth as published, nationality, country of residence, occupation) and PSC (name, kind, natures of control).

```json
{
  "companyNumber": "12345678",
  "name": "EXAMPLE SOFTWARE LTD",
  "status": "active",
  "type": "ltd",
  "incorporationDate": "2024-03-12",
  "sicCodes": ["62012"],
  "registeredAddress": { "address_line_1": "1 Example Street", "locality": "London", "postal_code": "SW1A 1AA" },
  "accountsNextDue": "2026-12-31",
  "accountsOverdue": false,
  "confirmationStatementNextDue": "2026-03-26",
  "officers": [{ "name": "DOE, Jane", "role": "director", "appointedOn": "2024-03-12", "dobMonthYear": "1985-06" }],
  "psc": [{ "name": "Jane Doe", "kind": "individual-person-with-significant-control", "naturesOfControl": ["ownership-of-shares-75-to-100-percent"] }],
  "sourceUrl": "https://find-and-update.company-information.service.gov.uk/company/12345678"
}
```

### How to use

1. Choose an input: a **company name search**, a list of **company numbers**, or filters (**SIC codes**, **postcode / location**, **incorporated from / to**, **status**).
2. Tick **Include officers** and **Include PSC** if you need people data.
3. Set **Max companies** and run. Export the dataset as JSON, CSV or Excel, or call it from the API / MCP.

**Monitor mode** (new incorporations): tick *Monitor mode*, save the run as a **Task**, and schedule it (daily or weekly). The Actor remembers the companies it has already returned for that task and outputs only **new** ones (`isNew: true`). Combine with SIC codes and a location to watch, for example, every new software company registered in Manchester.

### Pricing (pay per result)

| Event | Price |
|---|---|
| Actor start | $0.0005 per run |
| Company record | $0.003 |
| Officer | $0.0015 |
| PSC record | $0.0015 |
| New company (monitor mode) | $0.01 per delta |

Example: 1,000 companies with officers (average 2 per company) ≈ $3 + $3 = $6. Apify's free plan includes monthly credit, so you can try it at no cost.

### Input parameters

| Field | Type | Notes |
|---|---|---|
| `searchQueries` | string\[] | company name search |
| `companyNumbers` | string\[] | exact numbers, e.g. `SC000001` |
| `sicCodes` | string\[] | advanced search filter |
| `postcodePrefix` | string | location filter, e.g. `SW1A` or `Leeds` |
| `incorporatedFrom` / `incorporatedTo` | date | `YYYY-MM-DD` |
| `status` | enum | `any`, `active`, `dissolved`, `liquidation`, `administration` |
| `includeOfficers` / `includePSC` | boolean | charged per person record |
| `monitorMode` | boolean | only new companies since the last run of the task |
| `maxItems` | integer | 1 to 10,000 |

### Data source, licence and personal data

- Data comes from the **official Companies House API**. This Actor is **unofficial** and not affiliated with Companies House.
- **Licence and attribution.** Contains public sector information licensed under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). Source: [Companies House](https://www.gov.uk/government/organisations/companies-house), Crown copyright. Companies House imposes no rules on how public register information is used, but **you are responsible for complying with applicable data protection, copyright and other legislation**. If you republish data obtained through this Actor, keep this attribution and the link to the licence; each record also carries a `sourceUrl` pointing to the official register page.
- Officers and PSC are **personal data published on a statutory public register**. This Actor copies them as published and adds nothing (no emails, no phone numbers, no profiling, no person lookup). Under GDPR / UK GDPR you are the controller of your own use; keep a lawful basis, do not use the data for unsolicited marketing to individuals, and honour deletion requests.
- The Actor respects the Companies House rate limit (600 requests per 5 minutes) and never accesses the website itself.

### FAQ

**Is this the same as the Companies House website?** Same register, same data, but structured, filterable, exportable and automatable.

**Why not use the API directly?** You would need to register an application, handle pagination, rate limiting, retries, three endpoints per company and data normalisation. Here you get one call and clean JSON.

**Can I search by director name?** No. Person lookup is deliberately not offered.

**Can I get accounts, filings or charges?** Not yet. Open an issue if you need them; the register exposes them and they can be added.

**Something is missing or broken?** Use the **Issues** tab of this Actor; replies are usually within a few days.

# Actor input Schema

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

Free-text company name queries (Companies House search). Example: \["bakery", "solar"].

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

Exact company numbers to fetch, e.g. \["00000006", "SC000001"].

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

Filter by SIC code(s), e.g. \["62012"] (business and domestic software development). Uses the advanced search.

## `postcodePrefix` (type: `string`):

Registered office location filter, e.g. "SW1A" or "Manchester" (advanced search).

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

Only companies incorporated on or after this date (YYYY-MM-DD).

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

Only companies incorporated on or before this date (YYYY-MM-DD).

## `status` (type: `string`):

Filter by status.

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

Fetch current and resigned officers for each company (charged per officer).

## `includePSC` (type: `boolean`):

Fetch PSC for each company (charged per PSC).

## `monitorMode` (type: `boolean`):

Remembers company numbers already seen in previous runs of this task and outputs only new ones, with isNew = true. Charged per delta instead of per company.

## `maxItems` (type: `integer`):

Stop after this many companies (across all queries).

## Actor input object example

```json
{
  "searchQueries": [
    "bakery"
  ],
  "companyNumbers": [],
  "sicCodes": [],
  "status": "active",
  "includeOfficers": false,
  "includePSC": false,
  "monitorMode": false,
  "maxItems": 20
}
```

# Actor output Schema

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

No description

## `companiesCsv` (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 = {
    "searchQueries": [
        "bakery"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("registry-watch-data/companies-house-registry-watch").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 = {
    "searchQueries": ["bakery"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("registry-watch-data/companies-house-registry-watch").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 '{
  "searchQueries": [
    "bakery"
  ],
  "maxItems": 20
}' |
apify call registry-watch-data/companies-house-registry-watch --silent --output-dataset

```

## MCP server setup

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

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/PDw8sya8wqz3akqh2/builds/yTlPhu3b9A4ab0jLT/openapi.json
