# UK Company Check — Companies House Register & Financials (`us0r/uk-company-check`) Actor

Check UK companies by company number or name against the official Companies House API. One row per company: status, strike-off notice, overdue accounts, insolvency cases, charges, directors, PSCs and balance sheet figures from the latest filed accounts. No scraping, no proxy.

- **URL**: https://apify.com/us0r/uk-company-check.md
- **Developed by:** [us0r](https://apify.com/us0r) (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 $5.00 / 1,000 company checkeds

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 Company Check — Companies House Register & Financials

Give this Actor a list of UK companies — by **company number or name** — and
it returns **one row per entry**, including the ones that were not found.
Every row is built from the official **Companies House Public Data API** and
the Companies House **Document API**:

- **status** — active, liquidation, administration, receivership, voluntary
  arrangement, dissolved — and the **proposal to strike off** published in
  the Gazette;
- **filing deadlines**: accounts and confirmation statement, with the
  register's own **overdue** markers;
- **insolvency cases** with type, dates and insolvency practitioners;
- **charges** (mortgages, debentures): how many are outstanding and who holds
  the latest ones;
- current **directors** and **persons with significant control** (beneficial
  owners), with the nature of their control;
- **balance sheet figures** from the latest accounts filed electronically:
  equity, net assets, current and fixed assets, cash, creditors, employees —
  and turnover and profit where the company filed them — for the latest
  period and the one before.

No scraping, no proxy, no browser. No API key needed — the Actor brings its
own.

Built for supplier and customer onboarding (KYB), credit and collections
teams who need to know whether a counterparty is still trading, and periodic
re-checks of a customer or supplier book.

### What you get per entry

| Field | Example |
|---|---|
| `query`, `queryType` | `445790`, `companyNumber` |
| `found`, `status`, `statusDetail` | `true`, `active` · `liquidation` · `administration` · `dissolved` · … · `not_found`; `active-proposal-to-strike-off` |
| `riskFlags`, `riskDetails` | `["proposal_to_strike_off", "accounts_overdue"]`, with dates, cases and charge holders |
| `companyNumber`, `name` | `00445790`, `TESCO PLC` |
| `companyType`, `jurisdiction` | `{"code": "plc", "description": "Public limited company"}`, `england-wales` |
| `incorporatedOn`, `ceasedOn` | `1947-11-27`, `null` |
| `registeredOffice` | street, town, region, postcode, one-line form |
| `industry`, `sicCodes` | SIC 2007 code and description |
| `previousNames` | with the dates each name was used |
| `accounts` | last made up to, type, next due, `overdue` |
| `confirmationStatement` | last made up to, next due, `overdue` |
| `officers` | active and resigned counts, active directors, resignations in the last 12 months, current officers with role, appointment date, nationality and country of residence |
| `personsWithSignificantControl` | current PSCs: individuals and corporate entities, nature of control, registration number of corporate PSCs |
| `charges` | total, outstanding, satisfied; the latest outstanding charges with persons entitled |
| `insolvencyCases` | type, dates (`wound-up-on`, `administration-started-on`, …), practitioners |
| `accountsDocument` | made up to, filed on, accounts type, `machineReadable` |
| `financials`, `financialHistory` | balance sheet figures of the latest period and the one before, with currency |
| `nameMatch`, `matchedName`, `matchedNameType`, `matchRank` | for name queries: `exact` · `exact_without_legal_form` · `all_words`; current or former name |
| `url`, `note`, `warnings`, `checkedAt`, `error` | link to the Companies House page; plain-language explanations; error text for rows that could not be checked |

#### Risk flags

| Flag | Meaning |
|---|---|
| `liquidation`, `administration`, `receivership`, `voluntary_arrangement`, `insolvency_proceedings` | the company's status at Companies House |
| `dissolved` | dissolved, closed or removed (`since`) |
| `proposal_to_strike_off` | the registrar has published a first Gazette notice — the company will be struck off unless the notice is withdrawn or objected to |
| `accounts_overdue`, `confirmation_statement_overdue` | the register marks the filing as overdue (active companies) |
| `insolvency_history` | the company has insolvency cases on the register, current or past |
| `outstanding_charges` | registered charges that are not satisfied |
| `negative_equity` | equity (or net assets) below zero in the latest machine-readable accounts |
| `no_active_directors` | an active company without a current director or member |
| `undeliverable_registered_office`, `registered_office_in_dispute` | flags of the register on the registered office address |
| `registrar_annotation` | a notice by the registrar on the company, e.g. a strike-off for false information |
| `incorporated_last_12_months`, `name_changed_last_12_months` | young company, recent change of name |
| `dormant_accounts` | the latest accounts were filed as dormant |

### Input

```json
{
  "companies": [
    "00445790",
    "SC045551",
    "Rolls-Royce Holdings plc"
  ],
  "maxMatchesPerName": 1,
  "includeOfficers": true,
  "includePSC": true,
  "includeFinancials": true
}
```

| Option | Default | Meaning |
|---|---|---|
| `companies` | — | Company numbers or names; also `{"companyNumber": …}` or `{"name": …}` |
| `maxMatchesPerName` | `1` | Rows per name query, best match first (1–10) |
| `includeOfficers` | `true` | Current officers and resignations in the last 12 months |
| `includePSC` | `true` | Current persons with significant control |
| `includeFinancials` | `true` | Figures from the latest machine-readable accounts |
| `includeRawRecord` | `false` | The untouched Companies House JSON under `raw` |
| `apiKey` | — | Optional: your own free Companies House key, for your own rate limit |

`00445790`, `445790` and `SC45551` all work — missing leading zeros are added.
UK VAT numbers are recognised and returned as an error row: they are not
linked to the Companies House register. Duplicates in your list are checked
once.

**Name queries are matched strictly.** The register's search is a relevance
search and always returns something. This Actor only accepts a company whose
name — or a former name the search matched on — contains every word of your
query, ranks exact matches and active companies first, and says how it
matched. If nothing qualifies, the row is `not_found` and `note` lists the
closest names the register suggested.

### Speed

Companies House allows 600 requests per five minutes per API key. A company
takes one request for its profile plus one each for officers, PSCs, charges,
insolvency and accounts where they exist — about five for an active limited company. The Actor
spaces its requests to stay under the limit and pauses on its own if the limit
is reached, so a run never fails because of it.

Measured 12 October 2026: **100 active limited companies in under five
minutes** (293 seconds, 527 requests), with officers, PSCs, charges and
accounts — plan roughly 50 minutes for 1,000 companies. Checking very large lists? Enter your own free key under `apiKey`
to get your own limit.

### Limits, honestly

- **Figures only from machine-readable accounts.** Most small and micro
  companies file their accounts electronically (iXBRL); large companies and
  groups usually file PDF documents, which carry no machine-readable figures.
  `accountsDocument.machineReadable` says which case applies; the filing
  dates are always there. In a test run of 100 randomly picked active limited
  companies, 88 had machine-readable accounts (83 with the previous period as
  well); of 45 companies in liquidation or administration, 37.
- **Small companies rarely publish a profit and loss account.** UK law lets
  them file a balance sheet only, so `turnover` and `profit` are usually
  empty — in 8,329 accounts filed on one day, about 2 % contained them.
- **Figures are as filed.** The Actor reads the tagged values of the filing; it
  does not correct them.
- **Officers carry no dates of birth or addresses.** The register publishes
  month and year of birth and service addresses; this Actor leaves them out.
- **This is not a credit report.** It states what the register says on the
  day you ask.

### Personal data

Names, nationalities and countries of residence of directors and persons
with significant control are published by Companies House on its public
register. If you store them, you are the controller for that copy — keep
only what your purpose needs.

### Pricing

Pay per event:

| Event | What it covers |
|---|---|
| `actor-start` | once per run |
| `company-check` | one company row — including "not found" |

**Rows with an `error` are free**: an invalid company number or a source that
did not answer is never billed. Officers, PSCs, charges, insolvency cases and
financial figures are included in the company price. A spending limit you
set on the run is respected — the run stops cleanly when it is reached.

### Source

Public register information from Companies House, retrieved through the
Companies House Public Data API and Document API. This Actor is not
affiliated with Companies House.

### Related Actors

- **[Norway Company Check](https://apify.com/us0r/norway-company-check)** — the
  same list check for Norwegian companies: Brønnøysund registers, roles and
  annual accounts.
- **[Finland Company Check](https://apify.com/us0r/finland-company-check)** — the
  same list check for Finnish companies: PRH/YTJ status, registered loss of
  share capital, tax registers and digital financial statements.
- **[Poland Company Check](https://apify.com/us0r/poland-company-check)** — the
  same list check for Polish companies: KRS court register and VAT white list,
  with bank account verification.
- **[German Insolvency & Bankruptcy Check](https://apify.com/us0r/insolvenz-check-de)**
  — a list of names against the official German insolvency register, one row
  per name, found or not.

***

Keywords: Companies House, Companies House API, UK company check, UK company
search, company number lookup, CRN, UK company register, UK business registry,
registered office, SIC code, directors, officers, persons with significant
control, PSC register, beneficial owners UK, UK KYB, KYC UK, due diligence UK,
supplier verification UK, counterparty check, credit check UK company,
liquidation, administration, receivership, insolvency, insolvency practitioner,
strike off, proposal to strike off, Gazette notice, dissolved company, overdue
accounts, confirmation statement, charges, mortgages, debenture, iXBRL
accounts, balance sheet, net assets, negative equity, Scotland, Northern
Ireland, LLP, limited company check, company verification API.

# Actor input Schema

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

One entry per company: a Companies House company number ("00445790", "SC045551" — leading zeros may be omitted) or a company name ("Rolls-Royce Holdings plc"). Names are matched only if every word of your name appears in the registered name (or a former name that the register search matched).

## `maxMatchesPerName` (type: `integer`):

For entries given as a name: how many matching companies to return, best match first. Exact matches and active companies rank first. Every returned company is one row. Company numbers always return exactly one row.

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

Current directors, secretaries and LLP members with role, appointment date, nationality and country of residence, plus how many resigned in the last 12 months.

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

Current persons with significant control (beneficial owners) — individuals and corporate entities, with the nature of their control.

## `includeFinancials` (type: `boolean`):

Balance sheet figures from the latest accounts filed electronically (iXBRL): equity, net assets, current and fixed assets, cash, creditors, employees — and turnover and profit where the company filed them. Latest period and the one before.

## `includeRawRecord` (type: `boolean`):

Adds the untouched JSON from Companies House (profile, officers, PSCs, charges, insolvency) under 'raw'.

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

Not needed — the Actor comes with its own key. Enter your own free key from developer.company-information.service.gov.uk only if you check very large lists and want your own rate limit of 600 requests per five minutes.

## Actor input object example

```json
{
  "companies": [
    "00445790",
    "SC045551",
    "Rolls-Royce Holdings plc"
  ],
  "maxMatchesPerName": 1,
  "includeOfficers": true,
  "includePSC": true,
  "includeFinancials": true,
  "includeRawRecord": false
}
```

# Actor output Schema

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

One row per entry checked, including the ones not found or rejected as an invalid company number.

## `risk` (type: `string`):

Status, risk flags with dates, filing deadlines, charges and equity.

## `people` (type: `string`):

Current directors and persons with significant control.

## `financials` (type: `string`):

Balance sheet figures of the latest electronically filed accounts.

# 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",
        "SC045551",
        "Rolls-Royce Holdings plc"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("us0r/uk-company-check").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",
        "SC045551",
        "Rolls-Royce Holdings plc",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("us0r/uk-company-check").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",
    "SC045551",
    "Rolls-Royce Holdings plc"
  ]
}' |
apify call us0r/uk-company-check --silent --output-dataset

```

## MCP server setup

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

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/OrkAWfpJcqjzayJ6i/builds/Cx66kNc6P9jLd1KTX/openapi.json
