# UK Company Risk Report (Companies House + Gazette) (`nerolabs/uk-company-risk-report`) Actor

Returns a plain-English risk report for any UK company from the official Companies House API and The Gazette: status, overdue filings, strike-off, director track record, PSCs, charges, insolvency, as red/amber/green flags and a verdict. Inputs: company numbers or names. Agent-ready, pay per report.

- **URL**: https://apify.com/nerolabs/uk-company-risk-report.md
- **Developed by:** [Adam Pearce](https://apify.com/nerolabs) (community)
- **Categories:** Business, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $500.00 / 1,000 risk report delivereds

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

About to sign a contract, extend credit, take on a supplier or a tenant, and want to know in one minute whether the UK company on the other side is solid, shaky, or already gone? Enter a company number or name and get a plain-English risk report with red, amber and green flags, every one of them traced to an official register fact.

### What does UK Company Risk Report do?

It reads everything the public record says about a UK company and turns it into a verdict you can act on:

- **Companies House (official API)**: status, incorporation date, registered office problems (undeliverable or in dispute), overdue accounts and confirmation statements, strike-off action in progress, charges and secured creditors, insolvency cases, the full board with appointment and resignation dates, and people with significant control, including the register's sanctions flag.
- **Director track record**: for each active director, how many other companies they currently run and how many of their past companies ended in liquidation, administration or dissolution, plus a name check against the disqualified directors register.
- **The Gazette**: corporate insolvency notices (winding-up petitions, administration appointments, liquidations) under the company's current and previous names. A winding-up petition shows up here before anything changes on Companies House.

Each report is one dataset row with `verdict` (`red`, `amber` or `green`), the `flags` that produced it, the underlying `facts`, a one-paragraph `summary`, and a ready-to-paste `reportMarkdown`. Run it from the Console, the API, a schedule, or let an AI agent call it as a tool: it is pay per event, x402 and MCP ready, and never charges for a company that cannot be found.

### Why use it?

- **One call instead of six tabs.** Profile, officers, PSCs, filings, charges, insolvency and the Gazette, read and cross-referenced for you.
- **Flags, not a data dump.** "Accounts overdue since 2024-06-30" and "strike-off notice filed with no withdrawal" are actionable; a raw filing list is homework.
- **Honest about what it did not check.** If The Gazette refuses a search or the director cap is reached, the report says so. Green means "no red or amber flag in the public data checked", never an opinion.
- **Built for repeat use.** Onboarding suppliers, screening new customers, vetting tenants or landlords, checking counterparties before invoicing: the question comes up every week with a new company each time.

### How to use it

1. Paste company numbers (exact match) or company names into **Companies**. A name that matches one register entry exactly proceeds to a full report; an ambiguous name returns the candidate list instead, so nothing is reported on the wrong company.
2. Leave the Gazette and director cross-checks on unless you are in a hurry.
3. Run it. Each company comes back as one row; open `reportMarkdown` for the readable version.
4. Schedule it if you screen counterparties in batches, or wire it into your CRM or onboarding flow via the API.

### Input

| Field | Meaning |
|---|---|
| `companies` | List of 8-character Companies House numbers (e.g. `00445790`) or company names (e.g. `Carillion plc`). |
| `includeGazette` | Search The Gazette's corporate insolvency notices by exact current and previous names (default on). |
| `checkDirectorHistory` | Count each active director's other appointments and their dissolved or insolvent companies (default on). |
| `checkDisqualifications` | Name check against the disqualified directors register (default on, reported as a possible match to verify, never asserted). |
| `maxOfficerChecks` | Cap on directors cross-checked per company, to stay inside the Companies House rate limit (default 8). |
| `includeMarkdown` | Add a `reportMarkdown` field (default on). |

### Output

One row per company. A real example, trimmed:

```json
{
  "input": "Carillion plc",
  "outcome": "report",
  "companyNumber": "03782379",
  "companyName": "CARILLION PLC",
  "companyStatus": "liquidation",
  "verdict": "red",
  "redFlags": 1,
  "amberFlags": 1,
  "summary": "CARILLION PLC (03782379) is liquidation, incorporated 1999-05-28 (27 years). RED: Company status is \"liquidation\". Also amber: COCHRANE, Keith Robertson holds 4 other appointments at companies in liquidation, administration or similar.",
  "flags": [
    { "severity": "red", "code": "status-insolvent", "message": "Company status is \"liquidation\".", "source": "Companies House", "url": "https://find-and-update.company-information.service.gov.uk/company/03782379" },
    { "severity": "amber", "code": "director-insolvent-trail", "message": "COCHRANE, Keith Robertson holds 4 other appointments at companies in liquidation, administration or similar.", "source": "Companies House" },
    { "severity": "info", "code": "gazette-historic-notice", "message": "1 older corporate insolvency notice in The Gazette (more than two years ago).", "source": "The Gazette", "url": "https://www.thegazette.co.uk/notice/2948343" },
    { "severity": "info", "code": "insolvency-case-on-record", "message": "1 insolvency case on the Companies House record: compulsory-liquidation.", "source": "Companies House" },
    { "severity": "info", "code": "outstanding-charges", "message": "6 outstanding or part-satisfied charges (secured creditors on record).", "source": "Companies House" }
  ],
  "facts": { "...": "full register facts: profile, accounts, officers with cross-checks, PSCs, charges, insolvency cases, recent filings, Gazette notices" },
  "reportMarkdown": "## CARILLION PLC (03782379): RED ...",
  "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/03782379",
  "checkedAt": "2026-08-22T20:55:10.000Z"
}
```

A healthy company looks like Tesco plc on the same run: `verdict: "green"`, no red or amber flags, and a summary that says in words it is a register check, not a credit opinion.

Other outcomes: `not-found` (the number is not on the register, free), `ambiguous-name` (several candidates returned with numbers, statuses and addresses so you can pick, charged as a search), `no-match`.

You can download the dataset as JSON, CSV, Excel or HTML.

### What the flags mean

| Severity | Raised when |
|---|---|
| **Red** | Status is liquidation, administration, receivership, voluntary arrangement, insolvency proceedings, dissolved or closed; a strike-off notice or application is on file with no later withdrawal; a corporate insolvency notice in The Gazette in the last two years; an insolvency case on record for an otherwise active company; accounts overdue; registered office recorded as undeliverable; a PSC recorded as sanctioned; no active director left. |
| **Amber** | Confirmation statement overdue; registered office in dispute; two or more director resignations in 12 months; the whole board appointed in the last six months; a director with two or more other appointments at insolvent companies; a possible name match on the disqualified directors register; incorporated less than a year ago; nothing filed for 15 months; two or more name changes in three years. |
| **Info** | Outstanding charges; a director with many dissolved companies (often routine subsidiary clean-up); dormant accounts; historic Gazette notices; anything the run could not check. |

When a company is already insolvent or dissolved, overdue filings and silence are reported as info, because they are consequences of the same fact, not extra risk.

### How much does it cost?

- **$0.50 per report delivered.** A company that is not on the register is free. An ambiguous name that returns a candidate list is charged as a search at $0.01.
- Screening 40 new suppliers a month costs about $20. A weekly batch of 10 counterparties is about $20 a month.
- Platform compute is included in the event price; a typical report takes a few seconds and about 20 to 25 Companies House calls.

### Tips

- Use company numbers wherever you have them. They are exact, and they skip the name search.
- Large boards: raise `maxOfficerChecks` if you want every director cross-checked; each director costs two extra Companies House calls, and the actor paces itself under the 600-calls-per-5-minutes limit.
- Big batches: The Gazette rate-limits callers. If a report shows `gazette-not-checked`, re-run those companies a few minutes later or split the batch.
- For ongoing watching of a company rather than a point-in-time check, pair this with the **UK Companies House Change-Monitor** from the same publisher.

### FAQ

**Is this legal to use commercially?** Yes. Companies House data is provided for reuse including commercial use through its official API, and The Gazette's notices are Crown copyright published under the Open Government Licence v3.0, which permits commercial reuse with attribution. The actor only reads corporate insolvency notices, never personal insolvency notices, and every report carries the OGL attribution line.

**Is green a guarantee?** No. Green means the public register data checked contains no red or amber flag. It is not a credit score, not a financial statement analysis, and it cannot see private debts, county court judgments or trading performance.

**Why "possible" disqualification match?** The disqualified directors register is searched by name only. A match is shown with a link so a human can confirm it is the same person; the actor never asserts a disqualification.

**Does it cover Scottish and Northern Irish companies?** Yes, anything on the Companies House register (jurisdiction is reported), and The Gazette's Edinburgh and Belfast editions are included in the notice feed.

**What about sole traders or partnerships?** No, only entities registered at Companies House.

If this report saved you a manual trawl through Companies House and The Gazette, a review on this page helps a lot and helps decide what gets built next. Questions or edge cases: open an issue on the Issues tab.

# Actor input Schema

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

One entry per company to report on. An 8-character Companies House number (e.g. 00445790) is matched exactly. A name (e.g. "Carillion plc") is searched on the register: a unique exact match proceeds to a full report; anything ambiguous returns the candidate list instead, so nothing is reported on the wrong company.

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

Searches The Gazette's corporate insolvency notices (winding-up petitions, administrations, liquidations) by the company's exact current and previous names. A winding-up petition appears here before anything changes on Companies House. The Gazette rate-limits callers; if a search is refused the report says so rather than silently reporting no notices.

## `checkDirectorHistory` (type: `boolean`):

For each active director (up to the limit below), counts their other current appointments and how many of their past companies are dissolved or insolvent, from the Companies House officer appointments endpoint. A director with a long trail of dissolved companies is flagged amber.

## `checkDisqualifications` (type: `boolean`):

Searches the Companies House disqualified officers register by each active director's name. A name match is reported as a possible match needing a manual check (amber), never asserted as a confirmed disqualification, because the register is searched by name only.

## `maxOfficerChecks` (type: `integer`):

Caps the per-director appointment and disqualification lookups to keep large companies fast and within the Companies House rate limit (600 calls per 5 minutes). Directors beyond the cap are listed but not cross-checked, and the report says so.

## `includeMarkdown` (type: `boolean`):

Adds a reportMarkdown field with the whole report as readable Markdown, handy for pasting into a CRM note, an email, or an AI agent's context.

## Actor input object example

```json
{
  "companies": [
    "00445790",
    "03782379"
  ],
  "includeGazette": true,
  "checkDirectorHistory": true,
  "checkDisqualifications": true,
  "maxOfficerChecks": 8,
  "includeMarkdown": true
}
```

# Actor output Schema

## `dataset` (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",
        "03782379"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nerolabs/uk-company-risk-report").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",
        "03782379",
    ] }

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

```

## MCP server setup

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

```

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/5O35d5hut10YsiJGz/builds/6W1QbOkWXmDFU6GwJ/openapi.json
