# UK Company Insolvency & Filing Risk Monitor (`afkdigital/uk-company-insolvency-filing-risk-monitor`) Actor

No API key needed. Check supplied UK company numbers using official public register pages: status, published insolvency cases, overdue warnings and relevant filings. JSON/CSV.

- **URL**: https://apify.com/afkdigital/uk-company-insolvency-filing-risk-monitor.md
- **Developed by:** [AFK Digital](https://apify.com/afkdigital) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$6.00 / 1,000 successfully checked unique companies

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 Insolvency & Filing Risk Monitor — No API Key

Check a supplied list of UK company numbers against the **official Companies House public register**. Return company status, published insolvency cases, explicit overdue warnings and relevant filing dates as JSON or CSV.

**No Companies House API key, account, login or paid data subscription is required.** This version reads public company overview, insolvency and filing-history HTML pages. It does not call the authenticated Companies House Public Data REST API.

### Quick start

```json
{
  "companyNumbers": ["09999999", "03782379", "13734412"],
  "includeInsolvency": true,
  "includeFilingHistory": true,
  "maxResults": 10,
  "maxChargeUsd": 0.60,
  "maxRuntimeSeconds": 270,
  "maxRequests": 200,
  "maxFilingPages": 20
}
```

These are unrelated public example companies, not endorsements or customers of this Actor. Current values are read at run time.

Alternatively, paste a UTF-8 CSV file's contents into `csvText`:

```csv
company_number
09999999
03782379
13734412
```

Headers `companyNumber` and `companyNumbers` also work. Array and CSV inputs may be combined. No arbitrary external CSV URL is fetched.

Company numbers must be **strings of exactly 8 ASCII letters/digits with at least one digit**. Whitespace is trimmed and letters uppercased; leading zeros and prefixes are preserved. Numeric JSON values, short numbers and punctuation are invalid. No zeros are guessed. Syntax validation does not establish registry existence. Normalized duplicates are processed once per run.

### Output and evidence

| Field | Meaning |
| --- | --- |
| company_number, company_name, company_status | Official public company identity and status |
| insolvency_cases | Published case number/type and typed source dates, with case source URL |
| accounts_overdue | true only when the public overview explicitly displays an Accounts overdue warning; otherwise null |
| confirmation_statement_overdue | true only for an explicit Confirmation statement overdue warning; otherwise null |
| latest_relevant_filing_date | Latest source date among the relevant filings read within the declared scope |
| checked_at, source_url | UTC snapshot time and official company overview |
| source_statuses | Separate overview, insolvency and filing-history status, HTTP codes and page information |
| overdue_evidence | Exact warning label, page selector and official source URL |
| relevant_filings | Registry transaction ID where published, date, form type, description, relevance basis and page URL |
| query_status, billable | Completeness status and eligibility for the single company-check event |
| source_mode, coverage_notes | Explicit public-register HTML provenance and coverage limits |

**Unknown is not false.** The public pages do not expose the REST API's overdue Boolean fields. Missing warnings therefore remain null; the Actor does not calculate overdue status from a due date or infer that the company is current/healthy.

When the overview has no Insolvency tab, `source_statuses.insolvency.status` is **not_linked**, with `http_status: null` and `insolvency_cases: null`. This means no linked public insolvency page was available for this check; it is not proof of no insolvency history. The Actor does not probe unrelated endpoints to turn this into a synthetic 404.

A fetched insolvency or filing page returning 404 is separately labeled **resource_not_found**, never company_not_found. An overview 404 is **company_not_found** and is free. Unexpected HTML, wrong-company pages, maintenance/bot pages, malformed case dates, repeated filing rows and invalid pagination are errors/partial results, not clean company decisions.

Case types and typed dates are retained. Practitioners' names and addresses are omitted. Historic cases and solvent members' voluntary liquidations can appear; a published insolvency case is not automatically present financial distress.

Relevant filings include accounting forms AA/AAMD/AA01/AA02, confirmation statement CS01, annual return AR01/legacy 363 forms, Gazette GAZ forms and dissolution/strike-off/restoration DS01/DS02/DISS/REST forms. Additional notices are included when their published descriptions explicitly contain liquidation, administration, receivership, voluntary-arrangement or moratorium wording. Each included row carries its `relevance_basis`. This is a documented evidence filter, not a guarantee that every material filing is covered. Source filing dates are not accounting period-end dates or predicted deadlines. Unknown form types are not classified without evidence.

Registry transaction IDs may be absent when a document link is unavailable. Such rows keep `transaction_id: null` and use an explicitly labeled local row fingerprint for deduplication; no registry ID is invented.

### Success, partial results and billing

**$0.006 per successfully checked unique company ($6 per 1,000)** through one `company-checked` event. All requested subchecks are included.

A success requires a recognized official company overview and completed requested public-page inspection. An unlinked Insolvency tab or an initial subresource 404 is a documented unavailable-source outcome that can be included in a completed check; it does not claim a clean history. Operational subquery failures, malformed content, source limits and truncated filing history yield **partial**, which is free. Invalid numbers, missing companies and source failures are also free.

No separate Actor-start, Dataset-item, filing, case or subquery events are configured. Check the Pricing tab for the effective price. Both Apify's maximum total charge and `maxChargeUsd` apply. The input cap stops before querying another valid company when a successful event cannot fit.

`billable` means event eligibility, not proof of settled payment. SUMMARY distinguishes `maximum_eligible_event_charge_usd` from SDK-reported `observed_charged_event_count` and `observed_event_charge_usd`. Recovery preserves existing rows and never automatically charges them again. An interruption between row persistence and event charging may leave an eligible row free; it still counts conservatively against the input cap.

### Access limits and exports

This Actor is for **small, customer-supplied company lists**, not registry enumeration or bulk downloading. Companies House states that its searchable databases are not intended for bulk downloads and may deny unusually heavy access.

Requests are serial, at least **2 seconds apart**. The hard limits are **50 selected unique rows and 200 upstream requests per run**, including retries; smaller limits can be supplied. Filing history is capped at 20 pages/company. The default deadline is 270 seconds; maxRuntimeSeconds can be increased to 1,800, with a corresponding Actor timeout increase. Source 429 responses honor Retry-After; access-denied responses stop the run. No login automation, CAPTCHA bypass, proxy rotation or block evasion is used. Avoid concurrent high-volume runs. A source restriction may prevent a check; it is reported explicitly.

Each request is durably reserved before transmission, and consumed request/time budgets are restored after migration/restart. CSV is limited to 2 MB. A run can stop before all selected rows finish due to time, request or charge limits; inspect SUMMARY.stop_reason.

Outputs:

- Default Dataset with company and source/evidence views, supporting JSON/CSV exports.
- OUTPUT: JSON rows.
- OUTPUT.csv: quoted CSV, with nested arrays/objects serialized as JSON.
- SUMMARY: counts, request usage, completion/stop reason and billing information.

Import the CSV company_number column as **text** in spreadsheet software to preserve zeros and prefixes. Unknown Boolean values are JSON null and blank CSV cells. Company lists are stored in the customer's Apify run/storage and are never printed in Actor logs. Platform usage for PPE runs is included in the event model; standard post-run storage/export interactions may have separate Apify charges.

### Source, reuse and limitations

Source: Companies House public register, checked at each row's checked_at. Official reference pages reviewed on 2026-11-05:

- Public company search and acceptable use: https://www.gov.uk/guidance/searching-the-companies-house-register
- Public data and reuse: https://www.gov.uk/guidance/companies-house-data-products
- Public task and copyright: https://www.gov.uk/government/publications/companies-house-accreditation-to-information-fair-traders-scheme/public-task-copyright-and-crown-copyright
- Privacy charter: https://www.gov.uk/government/organisations/companies-house/about/personal-information-charter
- Apify pricing model: https://docs.apify.com/actors/monetize/pay-per-event

Independent AFK Digital product; not affiliated with or endorsed by Companies House. Credit Companies House as the source. Public-register reuse remains subject to applicable copyright/data-protection requirements; no blanket license claim is made for all documents or personal data.

This is a read-only snapshot, not a continuously running alert subscription, credit score, solvency guarantee, legal opinion or complete due-diligence service. An active status, unlinked page, missing warning or no matching filing is not proof of payment ability or absence of risk. Source records can change or contain errors.

Version: 0.2.0 (Apify version 0.2). Existing Actor ID: 37EUlbPXrlFrXQI9H.
Project: /opt/NEWAPI/NEWAPI70.

# Actor input Schema

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

8-character strings. Keep leading zeros and alphabetic prefixes. Numeric JSON values are invalid.

## `csvText` (type: `string`):

Paste UTF-8 CSV file contents with company_number (or companyNumber) header. All cells remain text. Maximum 2 MB.

## `includeInsolvency` (type: `boolean`):

Read published insolvency cases when the public company profile links an Insolvency tab; otherwise record not_linked with cases=null.

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

Read bounded public filing-history pages and return relevant source filing dates and evidence.

## `maxResults` (type: `integer`):

Includes invalid and not-found rows; duplicates are removed before this cap.

## `maxChargeUsd` (type: `number`):

Stops before exceeding this cap at $0.006 per successful unique company. Apify's run charge cap also applies.

## `maxRuntimeSeconds` (type: `integer`):

Requests and retry waits respect this deadline. The default example is intended to finish within 5 minutes.

## `maxRequests` (type: `integer`):

Hard cap of 200 public-register page requests per run, including retries; small supplied lists only.

## `maxFilingPages` (type: `integer`):

Up to 20 public filing-history pages per company. Truncated history produces a partial/free result.

## Actor input object example

```json
{
  "companyNumbers": [
    "09999999",
    "03782379",
    "13734412"
  ],
  "includeInsolvency": true,
  "includeFilingHistory": true,
  "maxResults": 10,
  "maxChargeUsd": 0.6,
  "maxRuntimeSeconds": 270,
  "maxRequests": 200,
  "maxFilingPages": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `json` (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": [
        "09999999",
        "03782379",
        "13734412"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("afkdigital/uk-company-insolvency-filing-risk-monitor").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": [
        "09999999",
        "03782379",
        "13734412",
    ] }

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

```

## MCP server setup

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

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/37EUlbPXrlFrXQI9H/builds/kRhMgmnyTXg5MIXDk/openapi.json
