# UK Company Check & Change Monitor - Companies House API (`orange_briefcase_hrj/uk-company-check`) Actor

$3 per 1,000 company checks. Due-diligence reports on UK companies from the official Companies House API: status, overdue filings, directors, PSCs, charges, insolvency and a RED/AMBER/GREEN risk flag. Monitor mode outputs only changes.

- **URL**: https://apify.com/orange_briefcase_hrj/uk-company-check.md
- **Developed by:** [Fast Agent](https://apify.com/orange_briefcase_hrj) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 company checks

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

**Price: $3 per 1,000 company checks** ($2.70 on Apify Scale, $2.40 on Business and above) · monitor re-checks $2 per 1,000 · official Companies House data · no API key needed

Run due-diligence checks on UK companies in bulk and **monitor them for changes**. Give it company numbers or names. For each company you get one clean JSON record built from the official **Companies House** register, plus a simple **RED / AMBER / GREEN risk flag** with the reasons behind it.

Use it for supplier and customer onboarding (KYB), credit control, B2B sales qualification, M\&A screening, or to keep a watchlist of debtors and partners.

### What each company check includes

- Name, status (including *proposal to strike off*), type, incorporation date, SIC codes and registered office
- **Overdue accounts** and **overdue confirmation statements**, with next due dates
- **Directors and secretaries**: active counts, appointments and resignations in the last 12 months, plus the officer list
- **Persons with significant control** (beneficial owners)
- **Charges** (secured lending): total and outstanding
- Insolvency cases recorded at Companies House
- The 10 most recent filings
- `riskRating` and `riskReasons`

> **Note on Gazette notices:** Gazette notices (such as winding-up petitions) are **not currently included** when the Actor runs in the Apify cloud, because The Gazette doesn't accept requests from cloud servers. The `includeGazette` option is off by default. If you turn it on and The Gazette can't be reached, the record says `gazetteChecked: false`. Insolvency cases that Companies House records are still included.

### Use it from ChatGPT, Claude or Cursor

Let your AI assistant vet UK suppliers, customers and partners against the live Companies House register, with a RED/AMBER/GREEN risk flag and the reasons behind it.

This Actor works as a tool in any AI assistant that supports the [Model Context Protocol (MCP)](https://modelcontextprotocol.io), through the official [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). You ask in plain language; the assistant fills in the filters, runs the Actor and answers from the results.

**MCP server URL (this Actor only):**

```text
https://mcp.apify.com?tools=orange_briefcase_hrj/uk-company-check
```

**Set it up once (you need a free Apify account):**

- **Claude (claude.ai and Claude Desktop):** open **Settings → Connectors → Add → Add custom connector**. Enter a name (for example `UK company check`), paste the URL above as the **Remote MCP server URL**, select **Continue**, keep the detected settings and select **Add**. Sign in to Apify when your browser opens. On Team and Enterprise plans, an Owner adds the connector for the organisation.
- **ChatGPT:** custom connectors need ChatGPT **Developer mode** (beta). Go to **Settings → Apps & Connectors → Create**, paste the URL above as the **MCP Server URL**, choose **OAuth** authentication and select **Create**, then sign in to Apify. In a new chat, select **+ → More** and pick the connector.
- **Cursor:** add this to `~/.cursor/mcp.json` (or `.cursor/mcp.json` in a project). Cursor opens your browser to sign in to Apify:

```json
{
  "mcpServers": {
    "uk-company-check": {
      "url": "https://mcp.apify.com?tools=orange_briefcase_hrj/uk-company-check"
    }
  }
}
```

- **VS Code, Windsurf and other MCP clients:** add the same URL as a remote (Streamable HTTP) MCP server. If a client can't do OAuth, send the header `Authorization: Bearer <YOUR_APIFY_TOKEN>` instead (token from **Apify Console → Settings → API & Integrations**).

Already connected to the full Apify server (`https://mcp.apify.com`) or the Apify plugin for Cursor, Claude Code or VS Code? Just mention `orange_briefcase_hrj/uk-company-check` in your request.

**Try asking:**

> "Check these suppliers on Companies House: 00445790, 04366849 and Greggs plc. Flag any that are RED or AMBER and explain why."
>
> "Which of these company numbers have overdue accounts, an overdue confirmation statement or a proposal to strike off? (paste your list)"
>
> "Who are the directors and persons with significant control of 04366849, and did any directors join or leave in the last 12 months?"

**Cost:** a run started by your assistant is a normal run of this Actor, billed to your Apify account at the usual pay-per-event price ($3 per 1,000 company checks, see the pricing section below). This Actor charges nothing extra for runs that come through an assistant. Asking for a small number of results (for example "the top 20") keeps runs cheap, and the Apify Free plan's monthly credit covers plenty of tests.

### Screenshots

Real output from the saved example tasks (test runs on 26 October 2026):

![UK Company Check dataset overview: company number, name, status, RED/AMBER/GREEN risk flag, reasons, overdue accounts, directors, PSCs and charges](https://api.apify.com/v2/key-value-stores/NpvgdYoKm28QhbrG7/records/uk-company-check-output.png)

#### Ready-made example tasks

- **Monitor suppliers on Companies House**: a watchlist in monitor mode. Replace the example numbers with your own suppliers and schedule it weekly.
- **Bulk UK company check (KYB due diligence)**: a one-off report for a mixed list of company names and numbers.

### Monitor mode: get only what changed

Turn on **Monitor mode** and schedule the Actor daily or weekly. The first run saves a baseline. After that, each run outputs only **change events**:

| changeType | severity |
|---|---|
| statusChanged, strikeOffProposal, insolvencyCaseAdded | high |
| accountsOverdue, confirmationStatementOverdue, officerAppointed/Resigned (directors), pscAdded/Ceased, chargeCreated, nameChanged, registeredOfficeChanged, riskRatingChanged | medium |
| accountsFiled, chargeSatisfied, sicCodesChanged, and others | low |

Connect a webhook, Slack, email or Zapier integration to get alerted. Use **Watchlist name** to keep separate watchlists.

### Input example

```json
{ "companies": ["00445790", "Greggs plc", "SC123456"], "monitorMode": false }
```

#### Checking lots of companies? Use your own free Companies House key

By default the Actor uses a shared Companies House API key. Companies House allows 600 requests per 5 minutes per key, and a full check uses about 5–7 requests per company. **If you run large batches or frequent schedules, add your own free key** in the *Companies House API key* field. It takes about two minutes to create one at [developer.company-information.service.gov.uk](https://developer.company-information.service.gov.uk/). The key is stored encrypted, and your runs then get the full rate limit to themselves.

### Output example (shortened)

```json
{
  "recordType": "companyCheck",
  "companyNumber": "07972677",
  "companyName": "SPARTAN MIDLANDS LIMITED",
  "companyStatus": "dissolved",
  "riskRating": "RED",
  "riskReasons": ["Company status is \"dissolved\""],
  "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/07972677"
}
```

```json
{ "recordType": "change", "companyNumber": "00445790", "changeType": "officerAppointed", "severity": "low",
  "description": "secretary appointed: TAYLOR, Christopher Jon" }
```

### Pricing

Pay per event, with Apify platform costs included:

| Apify plan (Store discount tier) | Price per company check | Per 1,000 |
|---|---|---|
| Free, Starter (Bronze) | $0.003 | $3 |
| Scale (Silver) | $0.0027 | $2.70 |
| Business (Gold) and above | $0.0024 | $2.40 |

| Other events | Price |
|---|---|
| Company re-checked in monitor mode (`company-monitored`) | $0.002 per company |
| Change detected in monitor mode (`change-event`) | $0.01 per change |
| Actor start | $0.00005 per run |

"Not found" and error records are free, and so is the optional full report that is output again when a watched company changes.

**Monitor mode or plain checks?** In monitor mode, the first run charges a full check for each company. After that, each re-check costs $0.002, less than a full check, plus $0.01 for each change found, and the Actor outputs only what changed. If you want a fresh full report on every company each time, run without monitor mode.

**Worked examples (Free/Starter prices):**

- **One-off KYB check of 500 companies:** $0.00005 + 500 × $0.003 = **about $1.50**.
- **Weekly monitoring of 100 suppliers:** the first run is 100 baseline checks ($0.30). After that, each weekly run is 100 × $0.002 + $0.00005 = about $0.20, plus $0.01 per change found. With about 5 changes a week, that's **about $1.00 a month** after the first run.
- **Checking 25 new customers a month during onboarding:** 25 × $0.003 + $0.00005 = **about $0.08 a month**.

The **Apify Free plan includes $5 of platform usage every month** (see [apify.com/pricing](https://apify.com/pricing)), and pay-per-event charges are paid from that credit. That covers about 1,650 company checks, or weekly monitoring of a watchlist of 100 companies. Use **Max companies per run** and Apify's maximum cost per run to cap spend.

### Use via API (Python, JavaScript, cURL)

You can start the Actor from your own code with the official [Apify API clients](https://docs.apify.com/api/client). Get your API token from **Apify Console → Settings → API & Integrations**.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("orange_briefcase_hrj/uk-company-check").call(run_input={
    "companies": ["00445790", "Greggs plc"],
    "monitorMode": False,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

Install with `pip install apify-client`.

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('orange_briefcase_hrj/uk-company-check').call({
    companies: ['00445790', 'Greggs plc'],
    monitorMode: false,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Install with `npm install apify-client`.

#### cURL

This runs the Actor and returns the dataset items in the same request (best for short runs):

```bash
curl -X POST "https://api.apify.com/v2/acts/orange_briefcase_hrj~uk-company-check/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["00445790", "Greggs plc"], "monitorMode": false}'
```

For longer runs, call `POST /v2/acts/orange_briefcase_hrj~uk-company-check/runs` and read the dataset when the run finishes. You can also add the Actor to Zapier, Make, n8n or a webhook from the **Integrations** tab.

### Data sources, licence and privacy

- Contains public sector information from Companies House. Companies House data has no reuse restrictions.
- If Gazette lookups are enabled and work, only corporate notices are output, under the Open Government Licence v3.0. Personal insolvency notices are never included.
- Officer nationality, occupation and country are **off by default**. Dates of birth are never output. Officer and PSC names are personal data under UK GDPR, so you need a lawful basis (such as due diligence or legitimate interest) to process them. Don't use them for unsolicited marketing.
- The risk flag is a simple rule-based summary of public records. It isn't a credit score or advice.
- This Actor is not affiliated with Companies House or The Gazette.

### Related tools

Other tools from the same publisher, all built on official open-data APIs:

| Tool | What it does |
|---|---|
| [UK Public Tender Alerts](https://apify.com/orange_briefcase_hrj/uk-tender-alerts) | Daily alerts for new UK government tenders and contract awards from Find a Tender and Contracts Finder. |
| [German Case Law Search & Ruling Alerts](https://apify.com/orange_briefcase_hrj/german-case-law-search) | Search BGH, BVerfG, BAG, BFH and other German federal court decisions, with full text and new-ruling alerts. |
| [Sweden Job Ads API (Platsbanken)](https://apify.com/orange_briefcase_hrj/sweden-job-ads-platsbanken) | Swedish job ads from Arbetsförmedlingen's official JobTech API, with English labels and daily alerts. |
| [Netherlands Public Tender Alerts (TenderNed)](https://apify.com/orange_briefcase_hrj/netherlands-tender-alerts) | Daily alerts for new Dutch government tenders from TenderNed, filtered by keyword, CPV and province. |

**Tip:** use **UK Public Tender Alerts** with notice type `award` to see which suppliers are winning public contracts, then run them through this Actor.

### FAQ

**Do I need a Companies House API key?** No. The Actor works out of the box with a shared key. For large batches or frequent schedules, add your own free key in *Companies House API key*. It takes a couple of minutes to create one at [developer.company-information.service.gov.uk](https://developer.company-information.service.gov.uk/). The field is a secret input, so Apify stores it encrypted and doesn't show it in logs or in the run input.

**How many companies can I check in one run?** Up to *Max companies per run* (500 by default; you can raise it). The Actor waits 0.55 seconds between Companies House requests to stay under the limit of 600 requests per 5 minutes, and a full check uses about 5–7 requests. That's roughly 15–20 companies a minute. Turning off officers, PSCs, charges or filings makes each check faster.

**Can I use company names instead of numbers?** Yes. An exact name match is used if there is one. Otherwise the Actor takes the closest Companies House search result and explains this in `matchNote`. Use company numbers when you need certainty.

**Is this legal? What about GDPR?** Companies House data is public and has no reuse restrictions. However, director and PSC names are personal data under UK GDPR. You need a lawful basis to process them (for example due diligence, KYB/AML checks or legitimate interest), and you shouldn't use them for unsolicited marketing. To reduce what you collect, officer nationality, occupation and country are off by default, and dates of birth are never output.

**Is the risk flag a credit score?** No. It's a simple rule-based summary of public records (status, strike-off proposals, overdue filings, insolvency, officer churn and similar). It isn't financial advice.

**How does monitor mode know what changed?** It saves a snapshot of each company in a named key-value store under the *Watchlist name*. Each run compares against that snapshot and outputs only the differences. Use a different watchlist name for each list.

**Something is wrong or missing?** Open an issue on the Actor's Issues tab and include your input. The Changelog tab lists every release.

# Changelog

This Actor's version history is a separate document: https://apify.com/orange_briefcase_hrj/uk-company-check/changelog.md

# Actor input Schema

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

Companies House numbers (e.g. 00445790, SC123456) or company names. Names are matched with Companies House search: an exact name match is used if there is one, otherwise the closest match (flagged in matchNote).

## `companiesHouseApiKey` (type: `string`):

Recommended for large batches or frequent schedules: your own free key from developer.company-information.service.gov.uk, stored encrypted. Gives your runs their own rate limit (600 requests per 5 minutes). Leave empty to use the shared key.

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

Remember each company between runs. The first run saves a baseline report; later runs output only change events (new or resigned directors, ownership (PSC) changes, new charges, status changes, strike-off proposals, overdue accounts). Use with a daily or weekly schedule.

## `stateKey` (type: `string`):

Name for this watchlist's memory in monitor mode. Use different names for separate watchlists.

## `outputReportOnChange` (type: `boolean`):

In monitor mode, also output the updated full report for any company with changes.

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

Include current and past officers (directors and secretaries).

## `includeOfficerDetails` (type: `boolean`):

Add each officer's published nationality, occupation and country of residence. This is personal data: use it only for a lawful purpose such as due diligence, not marketing.

## `includePsc` (type: `boolean`):

Include the beneficial owners (PSC register).

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

Include registered charges and whether they are outstanding or satisfied.

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

Include the 10 most recent filings.

## `includeGazette` (type: `boolean`):

Experimental: search The Gazette for corporate insolvency notices. The Gazette doesn't currently accept requests from Apify cloud servers, so this usually returns gazetteChecked=false. Personal insolvency notices are never included.

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

Safety cap on the number of companies processed per run.

## `companiesHouseIntervalSecs` (type: `number`):

Keeps the run under the Companies House limit of 600 requests per 5 minutes.

## Actor input object example

```json
{
  "companies": [
    "00445790",
    "04366849"
  ],
  "monitorMode": false,
  "stateKey": "default-monitor",
  "outputReportOnChange": false,
  "includeOfficers": true,
  "includeOfficerDetails": false,
  "includePsc": true,
  "includeCharges": true,
  "includeFilingHistory": true,
  "includeGazette": false,
  "maxCompanies": 500,
  "companiesHouseIntervalSecs": 0.55
}
```

# Actor output Schema

## `checks` (type: `string`):

No description

## `changes` (type: `string`):

No description

## `all` (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 = {
    "companies": [
        "00445790",
        "04366849"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("orange_briefcase_hrj/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",
        "04366849",
    ] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,orange_briefcase_hrj/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/iXqpEVtJ5zNWny7fS/builds/5luBodnifc0fJ95S4/openapi.json
