# UK Business Compliance MCP (`ryanclinton/uk-business-compliance-mcp`) Actor

Multi-registry UK business compliance intelligence combining 7 regulatory data sources into unified knowledge graphs, cross-registry verification, and composite compliance scoring.

- **URL**: https://apify.com/ryanclinton/uk-business-compliance-mcp.md
- **Developed by:** [ryan clinton](https://apify.com/ryanclinton) (community)
- **Categories:** AI, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## UK Business Compliance MCP

UK business compliance intelligence across 7 regulatory registries — Companies House, Land Registry, Charity Commission, Food Standards Agency, Environment Agency, OpenCorporates, and GLEIF LEI — accessible to any MCP-compatible AI client. Run a single tool call to verify company registrations, trace property ownership, audit charities, validate waste carriers, score regulatory compliance, or generate a comprehensive multi-registry report.

This MCP server orchestrates up to 7 Apify actors in parallel, merges their outputs into a typed knowledge graph, and applies multi-factor compliance scoring algorithms to produce structured JSON with risk ratings and actionable recommendations. No scraping infrastructure to manage, no API keys to juggle — connect it once and query UK regulatory data from Claude, Cursor, Windsurf, or any MCP-compatible agent.

### ⬇️ What data can you extract?

| Data Point | Source | Example |
|---|---|---|
| 📋 Company name, number, status, incorporation date | Companies House | Pinnacle Logistics Ltd, 10234567, Active |
| 🏢 Registered office address, SIC codes, company type | Companies House | 14 Canary Wharf, London E14 5AB |
| 🏠 Property address, title number, tenure, price paid | Land Registry | 42 Victoria Street SW1H 0ET, TGL345678, Freehold, £1,250,000 |
| ❤️ Charity name, registration number, registration status | Charity Commission | Redbridge Community Trust, 1098234, Registered |
| 💰 Charity income, expenditure, trustees, compliance flags | Charity Commission | Income £482,000, Expenditure £391,000, 5 trustees |
| 🍽️ Food hygiene rating (0–5), inspection scores, local authority | Food Standards Agency | Meridian Food Hall, Rating 4, Hygiene 5, Structural 5 |
| ♻️ Waste carrier registration number, status, expiry date, tier | Environment Agency | WestField Haulage, CBDU12345, Active, Upper Tier, Expires 2026-11-01 |
| 🌐 Cross-jurisdiction status, OpenCorporates registry URL | OpenCorporates | Pinnacle Logistics Ltd, gb_en, Active |
| 🔖 Legal Entity Identifier, entity status, parent/child relationships | GLEIF LEI | 213800FGJKL1234ABCD56, Active |
| 📊 Weighted compliance score (0–100), risk rating, per-factor breakdown | Composite | Score 74, Risk: Medium, 4 factors assessed |
| 🕸️ Knowledge graph nodes and edges across all 7 sources | Network builder | 12 nodes, 9 edges |
| ✅ Cross-registry verification result with discrepancy list | Verification engine | Verified in 3/3 registries, no discrepancies |

### Why use UK Business Compliance MCP?

Manual UK company due diligence means opening Companies House, switching to Land Registry, hunting for Charity Commission records, cross-referencing the FSA hygiene database, checking the EA waste register, and stitching it all together in a spreadsheet — a process that takes 2–4 hours per company and produces no structured output.

This MCP server automates the entire multi-registry workflow. One tool call collects and merges data from up to 7 sources, builds a knowledge graph, scores compliance, and returns everything as structured JSON — in under 2 minutes, at a fraction of the cost of commercial due diligence platforms.

Beyond raw data retrieval, the platform benefits make this a practical choice for production workflows:

- **Scheduling** — run periodic compliance sweeps on supplier lists, charity registers, or counterparty portfolios to keep data fresh
- **API access** — trigger compliance checks from Python, JavaScript, or any HTTP client using the Apify API
- **Parallel orchestration** — all 7 registry actors run concurrently via `Promise.allSettled`, so a 7-source report takes no longer than the slowest single registry
- **Monitoring** — receive Slack or email alerts when compliance scores fall below a threshold or runs fail
- **Integrations** — connect results to Zapier, Make, Google Sheets, HubSpot, or downstream webhooks

### Features

- **8 MCP tools covering the full compliance workflow** — network mapping, registration verification, property tracing, charity auditing, food hygiene assessment, waste carrier validation, compliance scoring, and full report generation
- **7 UK regulatory data sources in one server** — Companies House, Land Registry, Charity Commission, FSA FHRS, Environment Agency, OpenCorporates (140+ jurisdictions), and GLEIF LEI
- **Parallel actor orchestration** — `callActorsParallel` dispatches all registry requests concurrently using `Promise.allSettled`, with per-source error isolation so a single failing registry does not abort the run
- **Typed knowledge graph builder** — `buildUkBizNetwork` constructs nodes (company, property, charity, food_business, waste_carrier, registration, lei_entity) and edges (registered_as, owns_property, charity_of, hygiene_rated, waste_licensed, identified_by) from raw registry data
- **Cross-registry verification algorithm** — normalises company names with `name.toLowerCase().replace(/[^a-z0-9]/g, '')`, matches across 3 registries, detects name and status discrepancies, and computes a `crossReferenceScore` of 0–100
- **Multi-factor weighted compliance scoring** — combines up to 6 factors (Cross-Registry Verification 25%, Company Status 20%, Charity Compliance 15%, Food Hygiene 15%, Waste Carriers 10%, LEI Registration 10%) into a weighted composite score
- **FSA rating risk classification** — maps FHRS 0–5 ratings to `critical/high/medium/low` risk levels using official Food Standards Agency label definitions (Very Good, Good, Generally Satisfactory, Improvement Necessary, Major Improvement Necessary, Urgent Improvement Necessary)
- **Waste carrier expiry monitoring** — flags registrations expiring within 90 days, identifies expired registrations, and differentiates upper vs. lower tier EA registrations
- **Charity financial anomaly detection** — raises flags when expenditure exceeds income by more than 20%, when no financial data is reported, or when fewer than 3 trustees are listed
- **Structured recommendations output** — each compliance score includes plain-English remediation recommendations derived from scoring algorithm logic
- **Selective source querying** — every tool accepts a `sources` parameter to restrict which registries are queried, reducing cost and latency for focused lookups
- **Pay-per-event pricing** — charges `TOOL_RESULT_RETURNED` only on successful results; failed or empty runs are not billed

### Use cases for UK business compliance intelligence

#### Due diligence and counterparty screening

Legal teams and procurement departments verifying new UK suppliers or counterparties before contract execution. This MCP returns a full compliance picture — registration status, cross-registry consistency, property holdings, and any charity or environmental obligations — in a single structured response ready for risk memos or audit trails.

#### Corporate property portfolio investigation

Real estate analysts and insolvency practitioners tracing corporate property holdings through Land Registry records. Search by company name to discover all registered titles, tenure types, transaction dates, and total portfolio value. Useful for identifying hidden assets during restructuring or enforcement proceedings.

#### Charity sector oversight and grant due diligence

Grant-making bodies and charity regulators auditing recipient organisations before disbursing funds. The charity compliance audit checks Charity Commission registration status, assesses income-to-expenditure ratios, lists trustees, and raises governance flags — all from a single call.

#### Food supply chain risk management

Procurement and quality assurance teams at food manufacturers, retailers, or hospitality groups assessing supplier hygiene standards. The food hygiene assessment returns FSA FHRS ratings (0–5), hygiene, structural, and management sub-scores, and risk classifications for every premises linked to a business name or local authority area.

#### Environmental compliance verification

Waste brokers, construction companies, and facilities managers confirming that contractors hold valid Environment Agency waste carrier licences before engaging them. Invalid or expired licences expose duty-of-care liability under the Environmental Protection Act 1990. This MCP validates carrier registrations and flags those expiring within 90 days.

#### Regulatory technology and compliance automation

RegTech developers and compliance platform builders embedding multi-registry UK data into automated workflows. The MCP's structured JSON output and knowledge graph format are designed for downstream processing, database ingestion, and AI-agent pipelines without manual data transformation.

### How to run UK business compliance checks

1. **Connect the MCP to your AI client** — add the server URL `https://uk-business-compliance-mcp.apify.actor/mcp` to Claude Desktop, Cursor, Windsurf, or your preferred MCP-compatible agent. No further configuration is required.
2. **Choose a tool and provide a company name** — tell your AI: "Use `verify_company_registration` to check Pinnacle Logistics Ltd, company number 10234567." For the full report, use `generate_uk_compliance_report` with just the company name.
3. **Wait approximately 30–90 seconds** — the server queries up to 7 registries in parallel. Simpler single-source tools return in 10–20 seconds.
4. **Review the structured JSON result** — the response includes a compliance score, risk rating, per-factor breakdown, knowledge graph, and plain-English recommendations ready for reporting or downstream processing.

### Input parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `tool` | string (enum) | Yes | `verify_company_registration` | The MCP tool to execute. One of the 8 tools listed below. |
| `companyName` | string | Conditional | — | Name of the UK company to investigate. Required for most tools. |
| `companyNumber` | string | No | — | Companies House registration number (e.g., `10234567`). Improves match accuracy. |
| `charityNumber` | string | No | — | Charity Commission registration number. Required for `audit_charity_compliance` if no company name. |
| `postcode` | string | No | — | UK postcode for Land Registry property searches (e.g., `SW1H 0ET`). |
| `address` | string | No | — | Full or partial UK address for Land Registry lookups. |
| `businessName` | string | No | — | Name of a specific food business for hygiene rating lookup. Overrides `companyName` for FSA queries. |
| `localAuthority` | string | No | — | Local authority area name to narrow food hygiene searches. |
| `wasteCarrierName` | string | No | — | Name of the waste carrier to validate. Overrides `companyName` for EA queries. |
| `registrationNumber` | string | No | — | Environment Agency waste carrier registration number (e.g., `CBDU12345`). |
| `leiCode` | string | No | — | Legal Entity Identifier (20-character alphanumeric) for direct GLEIF lookup. |
| `jurisdiction` | string | No | `gb` | OpenCorporates jurisdiction code. Use `gb_en` for England, `gb_sc` for Scotland. |
| `sources` | array | No | All available | Data sources to include. Accepted values: `companiesHouse`, `landRegistry`, `charity`, `foodHygiene`, `wasteCarriers`, `openCorp`, `lei`. |

#### Input examples

**Verify a company registration across 3 registries:**
```json
{
  "tool": "verify_company_registration",
  "companyName": "Pinnacle Logistics Ltd",
  "companyNumber": "10234567"
}
````

**Generate a full compliance report with all 7 sources:**

```json
{
  "tool": "generate_uk_compliance_report",
  "companyName": "Meridian Food Group Ltd",
  "companyNumber": "09876543",
  "charityNumber": "1098234",
  "postcode": "E14 5AB",
  "sources": ["companiesHouse", "landRegistry", "charity", "foodHygiene", "wasteCarriers", "openCorp", "lei"]
}
```

**Validate a waste carrier by registration number:**

```json
{
  "tool": "validate_waste_carrier",
  "wasteCarrierName": "WestField Haulage Ltd",
  "registrationNumber": "CBDU12345"
}
```

#### Input tips

- **Provide the Companies House number when you have it** — name-based matching uses normalised string comparison which can miss hyphenated or abbreviated names; the number lookup is exact.
- **Use `generate_uk_compliance_report` for first-pass screening** — it runs all 7 sources in parallel and costs the same as a single-source call at $0.075 per result.
- **Narrow food hygiene searches with `localAuthority`** — large national chains may have hundreds of premises; specifying the local authority returns a focused, relevant subset.
- **Set `sources` to reduce latency on focused tasks** — if you only need registration verification, specify `["companiesHouse", "openCorp", "lei"]` to skip Land Registry and food hygiene lookups.
- **Use `jurisdiction` for Scottish or Welsh entities** — Companies House covers all of Great Britain, but OpenCorporates uses `gb_sc` for Scotland and `gb_wl` for Wales for more precise matching.

### Output example

```json
{
  "tool": "generate_uk_compliance_report",
  "success": true,
  "timestamp": "2026-03-20T09:14:32.411Z",
  "sourcesQueried": ["companiesHouse", "landRegistry", "foodHygiene", "wasteCarriers", "openCorp", "lei"],
  "data": {
    "companyName": "Meridian Food Group Ltd",
    "companyNumber": "09876543",
    "overallScore": 74,
    "riskRating": "medium",
    "verification": {
      "verified": true,
      "matchedSources": ["companiesHouse", "openCorp", "lei"],
      "discrepancies": [],
      "crossReferenceScore": 100,
      "registrationDetails": {
        "companiesHouse": { "name": "Meridian Food Group Ltd", "number": "09876543", "status": "active" },
        "openCorporates": { "name": "Meridian Food Group Limited", "status": "Active", "jurisdiction": "gb_en" },
        "lei": { "lei": "213800MFGJKL1234ABCD", "legalName": "Meridian Food Group Ltd", "status": "ISSUED" }
      }
    },
    "complianceScore": {
      "overallScore": 74,
      "riskRating": "medium",
      "factors": [
        { "factor": "Cross-Registry Verification", "score": 100, "weight": 0.25, "details": "Verified in 3/3 registries. No discrepancies.", "riskLevel": "low" },
        { "factor": "Company Status", "score": 100, "weight": 0.2, "details": "Companies House status: active", "riskLevel": "low" },
        { "factor": "Food Hygiene Standards", "score": 60, "weight": 0.15, "details": "Average FSA rating: 3.0/5 across 4 premises.", "riskLevel": "medium" },
        { "factor": "Waste Carrier Registration", "score": 100, "weight": 0.1, "details": "1/1 registrations valid.", "riskLevel": "low" },
        { "factor": "Legal Entity Identifier", "score": 100, "weight": 0.1, "details": "Entity has a registered LEI — indicates international transparency.", "riskLevel": "low" }
      ],
      "recommendations": ["Improve food hygiene standards — consider staff training and facility upgrades."]
    },
    "foodHygiene": {
      "assessments": [
        {
          "businessName": "Meridian Food Hall - East London",
          "address": "42 Commercial Road, London E1 1LP",
          "rating": 3,
          "ratingLabel": "Generally Satisfactory",
          "ratingDate": "2025-11-14",
          "localAuthority": "Tower Hamlets",
          "hygieneScore": 10,
          "structuralScore": 5,
          "managementScore": 10,
          "riskLevel": "medium"
        }
      ],
      "averageRating": "3.0"
    },
    "wasteCarriers": {
      "validations": [
        {
          "carrierName": "Meridian Food Group Ltd",
          "registrationNumber": "CBDU98712",
          "registrationType": "Upper Tier",
          "registrationStatus": "active",
          "expiryDate": "2027-04-30",
          "isValid": true,
          "riskFlags": []
        }
      ],
      "allValid": true
    },
    "propertyHoldings": {
      "properties": [
        { "address": "Unit 4, Meridian Business Park, E14 9SG", "titleNumber": "EGL567890", "owner": "MERIDIAN FOOD GROUP LTD", "tenure": "Leasehold", "transactionDate": "2019-03-15" }
      ],
      "count": 1
    },
    "networkStats": { "sourcesUsed": ["companiesHouse", "landRegistry", "foodHygiene", "wasteCarriers", "openCorp", "lei"], "nodeCount": 8, "edgeCount": 6 }
  },
  "network": {
    "nodes": [
      { "id": "company:09876543", "type": "company", "label": "Meridian Food Group Ltd", "source": "companiesHouse" },
      { "id": "property:egl567890", "type": "property", "label": "Unit 4, Meridian Business Park, E14 9SG", "source": "landRegistry" },
      { "id": "food_business:meridian_food_hall", "type": "food_business", "label": "Meridian Food Hall - East London", "source": "foodHygiene" },
      { "id": "waste_carrier:cbdu98712", "type": "waste_carrier", "label": "Meridian Food Group Ltd", "source": "wasteCarriers" }
    ],
    "edges": [
      { "source": "company:09876543", "target": "property:egl567890", "type": "owns_property", "weight": 0.9 },
      { "source": "company:09876543", "target": "food_business:meridian_food_hall", "type": "hygiene_rated", "weight": 0.6 },
      { "source": "company:09876543", "target": "waste_carrier:cbdu98712", "type": "waste_licensed", "weight": 1.0 }
    ],
    "metadata": { "nodeCount": 8, "edgeCount": 6 }
  }
}
```

### Output fields

| Field | Type | Description |
|---|---|---|
| `tool` | string | Name of the MCP tool that produced this result |
| `success` | boolean | Whether the tool completed without errors |
| `timestamp` | string | ISO 8601 timestamp of result generation |
| `sourcesQueried` | array | List of registry source keys queried in this run |
| `error` | string | Error message if `success` is false |
| `data.companyName` | string | Company name used in the query |
| `data.companyNumber` | string | Companies House number if provided |
| `data.overallScore` | number | Weighted composite compliance score (0–100) |
| `data.riskRating` | string | Composite risk rating: `low`, `medium`, `high`, or `critical` |
| `data.verification.verified` | boolean | True if matched in 2 or more registries |
| `data.verification.matchedSources` | array | Registry keys where the company was found |
| `data.verification.discrepancies` | array | Name or status discrepancies detected across registries |
| `data.verification.crossReferenceScore` | number | Percentage of 3 target registries where the company was matched |
| `data.complianceScore.factors` | array | Per-factor breakdown with score, weight, details, and risk level |
| `data.complianceScore.recommendations` | array | Plain-English remediation recommendations |
| `data.charityAudit.registrationStatus` | string | Charity Commission registration status |
| `data.charityAudit.income` | number | Latest reported charity income (GBP) |
| `data.charityAudit.expenditure` | number | Latest reported charity expenditure (GBP) |
| `data.charityAudit.trustees` | array | List of trustee names |
| `data.charityAudit.complianceFlags` | array | Governance and financial flags raised |
| `data.charityAudit.riskScore` | number | Charity-specific risk score (0–100) |
| `data.foodHygiene.assessments[].rating` | number | FSA FHRS rating (0–5) |
| `data.foodHygiene.assessments[].ratingLabel` | string | Official FSA label for the rating |
| `data.foodHygiene.assessments[].hygieneScore` | number | Raw hygiene sub-score from inspection |
| `data.foodHygiene.assessments[].structuralScore` | number | Raw structural sub-score from inspection |
| `data.foodHygiene.assessments[].managementScore` | number | Confidence in management sub-score |
| `data.foodHygiene.assessments[].riskLevel` | string | Derived risk level: `low`, `medium`, `high`, or `critical` |
| `data.wasteCarriers.validations[].isValid` | boolean | Whether the EA registration is currently valid |
| `data.wasteCarriers.validations[].riskFlags` | array | Flags including expiry warnings and tier notes |
| `data.propertyHoldings.properties[].titleNumber` | string | HM Land Registry title number |
| `data.propertyHoldings.properties[].tenure` | string | Freehold or Leasehold |
| `data.propertyHoldings.totalValue` | number | Sum of price paid values across all properties |
| `network.nodes` | array | Graph nodes (companies, properties, charities, food businesses, waste carriers, registrations, LEI entities) |
| `network.edges` | array | Graph edges with type, label, and connection weight |
| `network.metadata.nodeCount` | number | Total node count in the knowledge graph |
| `network.metadata.edgeCount` | number | Total edge count in the knowledge graph |

### How much does it cost to run UK business compliance checks?

UK Business Compliance MCP uses **pay-per-event pricing** — you pay **$0.075 per tool result returned**. Platform compute costs are included.

| Scenario | Tool calls | Cost per call | Total cost |
|---|---|---|---|
| Quick test — single verification | 1 | $0.075 | $0.075 |
| Supplier screening — 10 companies | 10 | $0.075 | $0.75 |
| Monthly vendor review — 50 companies | 50 | $0.075 | $3.75 |
| Quarterly compliance sweep — 200 entities | 200 | $0.075 | $15.00 |
| Annual portfolio audit — 1,000 entities | 1,000 | $0.075 | $75.00 |

You can set a **maximum spending limit** per run to control costs. The actor stops when your budget is reached.

Compare this to commercial due diligence platforms like Bureau van Dijk Orbis at $500–$2,000/month or regulatory data APIs at $0.50–$2.00 per company lookup — with UK Business Compliance MCP, most users spend $3–$15/month with no subscription commitment.

Apify's free tier includes $5 of monthly platform credits, covering approximately 66 tool calls at no cost.

### UK business compliance checks using the API

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/uk-business-compliance-mcp").call(run_input={
    "tool": "generate_uk_compliance_report",
    "companyName": "Pinnacle Logistics Ltd",
    "companyNumber": "10234567",
    "sources": ["companiesHouse", "landRegistry", "wasteCarriers", "openCorp", "lei"]
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    score = item.get("data", {}).get("overallScore", "N/A")
    risk = item.get("data", {}).get("riskRating", "N/A")
    recs = item.get("data", {}).get("recommendations", [])
    print(f"Company: Pinnacle Logistics Ltd")
    print(f"Compliance Score: {score}/100  |  Risk: {risk}")
    for rec in recs:
        print(f"  Recommendation: {rec}")
```

#### JavaScript

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

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/uk-business-compliance-mcp").call({
    tool: "score_regulatory_compliance",
    companyName: "Meridian Food Group Ltd",
    companyNumber: "09876543",
    sources: ["companiesHouse", "foodHygiene", "wasteCarriers", "openCorp", "lei"]
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    const { overallScore, riskRating, factors, recommendations } = item.data;
    console.log(`Compliance Score: ${overallScore}/100 (${riskRating} risk)`);
    factors.forEach(f => {
        console.log(`  ${f.factor}: ${f.score}/100 — ${f.details}`);
    });
    recommendations.forEach(r => console.log(`  Action: ${r}`));
}
```

#### cURL

```bash
## Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~uk-business-compliance-mcp/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "tool": "verify_company_registration",
    "companyName": "Acme Construction Ltd",
    "companyNumber": "07654321",
    "jurisdiction": "gb"
  }'

## Fetch results (replace DATASET_ID from the run response above)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
```

### How UK Business Compliance MCP works

#### Parallel registry orchestration

When a tool is invoked, `callActorsParallel` dispatches all required registry actors concurrently using `Promise.allSettled`. Each actor call uses a 120-second timeout with 512 MB memory. Because `Promise.allSettled` is used rather than `Promise.all`, a single failing registry does not abort the run — the server returns partial results from whichever sources succeeded, with the failed source returning an empty array. Up to 7 actors (Companies House, Land Registry, Charity Commission, FSA Food Hygiene, EA Waste Carriers, OpenCorporates, and GLEIF LEI) run simultaneously, so a full 7-source report takes no longer than the slowest individual registry.

#### Knowledge graph construction

`buildUkBizNetwork` processes raw registry records into a typed knowledge graph. It first establishes an anchor company node using the provided company number or name as the node ID (formatted as `company:10234567`). It then ingests each registry's records using dedicated ingestor functions (`ingestCompaniesHouse`, `ingestLandRegistry`, `ingestCharityCommission`, `ingestFoodHygiene`). Each ingestor creates typed `GraphNode` objects (node types: `company`, `property`, `charity`, `food_business`, `waste_carrier`, `registration`, `lei_entity`) and `GraphEdge` objects (edge types: `registered_as`, `owns_property`, `charity_of`, `hygiene_rated`, `waste_licensed`, `identified_by`). Deduplication is enforced — nodes and edges are only added if their ID does not already exist in the array. The graph is returned with metadata including node count, edge count, build timestamp, and sources used.

#### Compliance scoring algorithm

`computeRegulatoryComplianceScore` builds an array of `ComplianceFactor` objects, each with a score (0–100), a weight (0–1), and a risk level. The scoring formula is weighted average: `sum(score * weight) / sum(weight)`. Factor weights are: Cross-Registry Verification 0.25, Company Status 0.20, Charity Compliance 0.15, Food Hygiene Standards 0.15, Waste Carrier Registration 0.10, and Legal Entity Identifier 0.10. The algorithm is additive — factors are only included when source data is present, so a company with no charity data does not lose points for missing charity compliance. The final `overallScore` is mapped to `riskRating`: 0–29 = critical, 30–49 = high, 50–69 = medium, 70–100 = low.

#### Cross-registry verification engine

`crossRegistryVerification` normalises all company names to lowercase alphanumerics using the regex `replace(/[^a-z0-9]/g, '')` before comparison, ensuring that "Acme Ltd" and "ACME LIMITED" are treated as the same entity. It looks for substring matches in both directions (to handle abbreviated vs. full legal names) and falls back to exact company number matching when available. The `crossReferenceScore` is `Math.round((matchedSources.length / 3) * 100)` — 0, 33, 67, or 100 depending on how many of the three target registries (Companies House, OpenCorporates, GLEIF) returned a matching record. Discrepancies in name or status across sources are collected and surfaced as human-readable strings in the `discrepancies` array.

### Tips for best results

1. **Always provide the Companies House number alongside the company name.** Name matching uses fuzzy substring comparison, which can produce false positives for common words like "Services" or "Group". The number lookup is exact and avoids ambiguity entirely.

2. **Use `generate_uk_compliance_report` for initial screening and specific tools for focused follow-up.** The full report costs the same as a single-tool call ($0.075) and gives you all available intelligence. Once you know a company has charity or food hygiene exposure, use `audit_charity_compliance` or `assess_food_hygiene_risk` with more specific parameters for targeted queries.

3. **Combine with [Waterfall Contact Enrichment](https://apify.com/ryanclinton/waterfall-contact-enrichment) for complete counterparty profiles.** After verifying registration and compliance, enrich key personnel found in Companies House officers data with contact details for outreach or further investigation.

4. **Schedule compliance sweeps for active supplier lists.** Use Apify's scheduler to run monthly `score_regulatory_compliance` checks on your vendor register. Set a webhook to trigger alerts if any supplier's score drops below your threshold (e.g., 50/100).

5. **Set `sources` to the minimum required for your use case.** If you only need to check waste carrier status, specify `sources: ["wasteCarriers"]` rather than querying all 7 registries. This reduces latency from ~60 seconds to ~10 seconds and has no impact on the result quality for that specific check.

6. **For Scottish or Welsh companies, set `jurisdiction` explicitly.** The Companies House data covers all of Great Britain, but OpenCorporates uses `gb_sc` for Scotland and `gb_wl` for Wales. Using the correct jurisdiction code increases the `crossReferenceScore` for non-English entities.

7. **Post-process the knowledge graph for visualisation.** The `network.nodes` and `network.edges` arrays are formatted for direct ingestion into graph libraries like vis.js, Cytoscape.js, or Neo4j. The node `type` field and edge `type` field carry semantic meaning suitable for colour-coding and filtering.

### Combine with other Apify actors

| Actor | How to combine |
|---|---|
| [UK Companies House](https://apify.com/ryanclinton/uk-companies-house) | Direct access to Companies House company profiles, officers, PSC, and filing history for deeper officer-level investigation |
| [UK Land Registry](https://apify.com/ryanclinton/uk-land-registry) | Run targeted Land Registry searches by postcode or address when you need granular property data beyond what the compliance report returns |
| [Waterfall Contact Enrichment](https://apify.com/ryanclinton/waterfall-contact-enrichment) | Enrich officer names extracted from Companies House records with verified email addresses and phone numbers for counterparty outreach |
| [GLEIF LEI Lookup](https://apify.com/ryanclinton/gleif-lei-lookup) | Deep-dive into parent-child LEI relationships for financial counterparties where ownership chain transparency is critical |
| [OpenCorporates Search](https://apify.com/ryanclinton/opencorporates-search) | Extend corporate registry coverage to jurisdictions beyond the UK when investigating companies with multi-country operations |
| [Company Deep Research](https://apify.com/ryanclinton/company-deep-research) | Pair compliance verification with broad web intelligence — news coverage, leadership profiles, and public reputation signals |
| [B2B Lead Qualifier](https://apify.com/ryanclinton/b2b-lead-qualifier) | Score prospective UK suppliers as leads (0–100) and layer in compliance scores before any commercial engagement |

### Limitations

- **Data is only as current as each registry's last update.** Companies House typically reflects filings within 24–48 hours of submission. Land Registry transaction data can lag by days to weeks after completion. Food hygiene ratings reflect the most recent inspection, which may be months old.
- **Land Registry returns transaction data, not real-time ownership.** The HM Land Registry open data contains historic price paid transactions; it does not always reflect the most recent ownership transfer until registration is complete.
- **Charity Commission coverage is England and Wales only.** Scottish charities are registered with OSCR (Office of the Scottish Charity Regulator), which is not currently included as a source.
- **Food hygiene data covers England, Wales, and Northern Ireland.** Scottish food hygiene ratings use a separate system (Food Hygiene Information Scheme) with a pass/conditional pass/fail scale rather than the 0–5 FHRS scale. Scottish businesses may return no data or inconsistent ratings.
- **OpenCorporates matching relies on name similarity.** For companies with generic names, this may return multiple candidate matches. Providing the company number in the `jurisdiction:number` format via `companyNumber` significantly improves accuracy.
- **No authentication or protected data access.** This server queries only publicly available open data registers. It cannot access Companies House restricted filings, protected Land Registry title deeds, or confidential Charity Commission correspondence.
- **Waste carrier registry coverage excludes Scotland and Northern Ireland.** The EA waste carrier register covers England only. SEPA (Scotland) and NIEA (Northern Ireland) operate separate registers not currently included.
- **LEI verification requires the entity to be GLEIF-registered.** Most SMEs and private companies do not hold an LEI. Absence of an LEI is flagged as a medium-risk factor but does not indicate non-compliance for entities not operating in regulated financial markets.

### Integrations

- [Zapier](https://apify.com/integrations/zapier) — trigger UK company compliance checks automatically when new suppliers are added to a procurement system or CRM
- [Make](https://apify.com/integrations/make) — build multi-step compliance workflows that screen companies, log scores to a database, and alert procurement teams when risk thresholds are breached
- [Google Sheets](https://apify.com/integrations/google-sheets) — export compliance scores, risk ratings, and recommendations to a live vendor register spreadsheet for ongoing monitoring
- [Apify API](https://docs.apify.com/api/v2) — integrate programmatic UK compliance checks into due diligence workflows, onboarding pipelines, or RegTech platforms
- [Webhooks](https://docs.apify.com/platform/integrations/webhooks) — fire alerts to Slack, Teams, or email when a company's compliance score falls below an acceptable threshold
- [LangChain / LlamaIndex](https://docs.apify.com/platform/integrations) — supply structured UK regulatory data to RAG pipelines and AI compliance agents for automated due diligence report generation

### Troubleshooting

- **Tool returns empty data for a known company** — The registry actor for that source may have returned no results due to a name mismatch. Provide the exact registered company name as shown on Companies House, or include the `companyNumber` to enable exact-match lookup. Names with special characters (ampersands, brackets) sometimes need to be simplified to their alphanumeric equivalent.

- **`crossReferenceScore` is 33 or 67 despite the company clearly existing** — Not all UK companies appear in GLEIF LEI (most private SMEs have no LEI) or OpenCorporates (coverage depends on jurisdiction indexing frequency). A score below 100 does not necessarily indicate a compliance problem; check the `matchedSources` field to understand which registries returned data and which did not.

- **Food hygiene returns no results** — FSA data is indexed by business trading name, which often differs from the registered Companies House name. Use the `businessName` parameter with the trading name as displayed on the restaurant or food outlet itself, and narrow with `localAuthority` if the business operates in a known area.

- **Waste carrier validation shows `isValid: false` for a carrier that is registered** — The EA register uses the statuses `active`, `approved`, and `registered`. If the raw registry data returns a non-standard status string (e.g., `Active` with capital A is handled; `ACTIVE` or `Live` may not be). Check the `registrationStatus` field in the raw `riskFlags` array and compare to the EA register directly at environment.data.gov.uk.

- **Run times exceeding 90 seconds** — Full 7-source reports require 7 actor invocations to complete. Under high platform load, individual actor cold starts can add latency. For time-sensitive workflows, restrict `sources` to the 3–4 most critical registries. Single-source tool calls (e.g., `validate_waste_carrier`) typically complete in 10–20 seconds.

### Responsible use

- This server accesses only publicly available UK government registers and open regulatory databases.
- All data sources are licensed for public access: Companies House open data, HM Land Registry open data, Charity Commission public register, FSA open FHRS data, EA open waste carrier register, OpenCorporates, and GLEIF open data.
- Comply with GDPR and the UK Data Protection Act 2018 when processing personal data (officer names, trustee names) extracted from these registries.
- Do not use extracted data to harass individuals, circumvent legitimate enforcement actions, or derive insights that would constitute regulated financial advice.
- For guidance on web scraping legality, see [Apify's guide](https://blog.apify.com/is-web-scraping-legal/).

### ❓ FAQ

**How many UK registries does UK Business Compliance MCP query?**
Seven: Companies House, HM Land Registry, Charity Commission, Food Standards Agency (FHRS), Environment Agency (waste carriers), OpenCorporates, and GLEIF LEI. Each is queried via a dedicated Apify actor that handles the source-specific API or data structure.

**How does the UK business compliance scoring algorithm work?**
The `computeRegulatoryComplianceScore` function assigns each applicable registry a weighted factor score (0–100). Cross-Registry Verification carries 25% weight, Company Status 20%, Charity Compliance 15%, Food Hygiene 15%, Waste Carriers 10%, and LEI 10%. Only factors with available data are included, preventing unfair penalisation for registries that are simply not applicable to a given company type. The weighted average produces a final score of 0–100 mapped to `low`, `medium`, `high`, or `critical` risk.

**How accurate is the cross-registry verification?**
Verification matches names using normalised alphanumeric comparison (stripping punctuation and case differences) combined with substring matching in both directions. Providing the Companies House registration number is the most reliable path to accurate cross-registry matching, as the number is the same across all registries that carry it. The `crossReferenceScore` reflects how many of the 3 target registries returned a match, not a confidence percentage.

**How is UK Business Compliance MCP different from using Companies House directly?**
Companies House covers only UK corporate registrations. This MCP adds Land Registry property data, Charity Commission governance data, FSA food hygiene inspections, EA environmental compliance, OpenCorporates cross-jurisdiction coverage, and GLEIF international identification — all in a single structured response with composite scoring and a knowledge graph. It replaces 7 separate lookups with one tool call.

**Can I use UK Business Compliance MCP to verify Scottish companies?**
Yes for Companies House and GLEIF LEI. Scotland uses the same Companies House registry as England and Wales, and GLEIF is global. However, Scottish food hygiene ratings (FHIS, pass/fail scale) and Scottish charity registrations (OSCR) are not currently covered. Specify `jurisdiction: "gb_sc"` to improve OpenCorporates matching for Scottish-registered entities.

**Is it legal to use UK public registry data in this way?**
Yes. All data sources used by this MCP are published as open data by UK government bodies under the Open Government Licence (OGL). Companies House, HM Land Registry, the Charity Commission, and the Food Standards Agency all explicitly permit reuse of their public register data. See [Apify's guide on web scraping legality](https://blog.apify.com/is-web-scraping-legal/) for broader context.

**How long does a typical UK compliance report take to generate?**
A full 7-source `generate_uk_compliance_report` run takes 30–90 seconds depending on registry response times. Single-source tools (`validate_waste_carrier`, `trace_property_ownership`) typically complete in 10–20 seconds. All multi-source tools use parallel actor orchestration, so adding more sources adds minimal overhead beyond the slowest registry.

**Can I schedule recurring UK compliance checks on my supplier list?**
Yes. Use Apify's built-in scheduler to run compliance checks on a daily, weekly, or monthly cadence. Pair with webhooks to receive Slack or email alerts when any supplier's `riskRating` changes or their `overallScore` drops below a defined threshold.

**What happens if one registry fails to return data?**
The server uses `Promise.allSettled` for parallel actor calls, so a failing registry does not abort the run. The failed source returns an empty array, the compliance score is computed from available factors only, and the `sourcesQueried` field in the output reflects which registries were actually queried. You will not be charged for sources that returned no data.

**Can I use UK Business Compliance MCP with Claude, Cursor, or other AI agents?**
Yes. Connect the MCP endpoint `https://uk-business-compliance-mcp.apify.actor/mcp` in your client's MCP server configuration. It is compatible with Claude Desktop, Cursor, Windsurf, Cline, and any MCP-compatible client. Your AI assistant can then call the 8 compliance tools directly in natural language conversations.

**How does UK Business Compliance MCP handle companies with no LEI?**
The vast majority of UK SMEs and private companies do not hold a Legal Entity Identifier — LEI registration is primarily required for entities participating in regulated financial markets. Absence of an LEI triggers a medium-risk flag in the compliance score but is weighted at only 0.05 (compared to 0.25 for cross-registry verification) when no LEI data is present. It does not indicate corporate malfeasance.

**Can I trace beneficial ownership or Persons with Significant Control (PSC)?**
The Companies House actor accessed by this MCP returns company-level registration data. PSC (Persons with Significant Control) data is available directly through the [UK Companies House](https://apify.com/ryanclinton/uk-companies-house) actor used as an underlying source. For deep beneficial ownership investigation, combine this MCP with [Company Deep Research](https://apify.com/ryanclinton/company-deep-research).

### Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

1. Go to [Account Settings > Privacy](https://console.apify.com/account/privacy)
2. Enable **Share runs with public Actor creators**

This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.

### Support

Found a bug or have a feature request? Open an issue in the [Issues tab](https://console.apify.com/actors/uk-business-compliance-mcp/issues) on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.

# Actor input Schema

## `tool` (type: `string`):

The MCP tool to execute

## `companyName` (type: `string`):

Name of the UK company to investigate

## `companyNumber` (type: `string`):

Companies House registration number (e.g., 12345678)

## `charityNumber` (type: `string`):

Charity Commission registration number

## `postcode` (type: `string`):

UK postcode for property/location searches

## `address` (type: `string`):

Full or partial UK address for Land Registry lookups

## `businessName` (type: `string`):

Name of food business for hygiene rating lookup

## `localAuthority` (type: `string`):

Local authority area for food hygiene searches

## `wasteCarrierName` (type: `string`):

Name of waste carrier to validate

## `registrationNumber` (type: `string`):

EA waste carrier registration number

## `leiCode` (type: `string`):

Legal Entity Identifier (20-character alphanumeric)

## `jurisdiction` (type: `string`):

Jurisdiction code for OpenCorporates search (default: gb)

## `sources` (type: `array`):

Which data sources to include in analysis

## Actor input object example

```json
{
  "tool": "verify_company_registration",
  "jurisdiction": "gb",
  "sources": [
    "companiesHouse",
    "openCorp",
    "lei"
  ]
}
```

# 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 = {
    "tool": "verify_company_registration"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/uk-business-compliance-mcp").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 = { "tool": "verify_company_registration" }

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/uk-business-compliance-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tool": "verify_company_registration"
}' |
apify call ryanclinton/uk-business-compliance-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ryanclinton/uk-business-compliance-mcp",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "UK Business Compliance MCP",
        "description": "Multi-registry UK business compliance intelligence combining 7 regulatory data sources into unified knowledge graphs, cross-registry verification, and composite compliance scoring.",
        "version": "1.0",
        "x-build-id": "hu8gHWqnnPG9fXvfW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~uk-business-compliance-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-uk-business-compliance-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~uk-business-compliance-mcp/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-uk-business-compliance-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~uk-business-compliance-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-uk-business-compliance-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "tool"
                ],
                "properties": {
                    "tool": {
                        "title": "Tool",
                        "enum": [
                            "map_uk_business_network",
                            "verify_company_registration",
                            "trace_property_ownership",
                            "audit_charity_compliance",
                            "assess_food_hygiene_risk",
                            "validate_waste_carrier",
                            "score_regulatory_compliance",
                            "generate_uk_compliance_report"
                        ],
                        "type": "string",
                        "description": "The MCP tool to execute"
                    },
                    "companyName": {
                        "title": "Company Name",
                        "type": "string",
                        "description": "Name of the UK company to investigate"
                    },
                    "companyNumber": {
                        "title": "Company Number",
                        "type": "string",
                        "description": "Companies House registration number (e.g., 12345678)"
                    },
                    "charityNumber": {
                        "title": "Charity Number",
                        "type": "string",
                        "description": "Charity Commission registration number"
                    },
                    "postcode": {
                        "title": "Postcode",
                        "type": "string",
                        "description": "UK postcode for property/location searches"
                    },
                    "address": {
                        "title": "Address",
                        "type": "string",
                        "description": "Full or partial UK address for Land Registry lookups"
                    },
                    "businessName": {
                        "title": "Food Business Name",
                        "type": "string",
                        "description": "Name of food business for hygiene rating lookup"
                    },
                    "localAuthority": {
                        "title": "Local Authority",
                        "type": "string",
                        "description": "Local authority area for food hygiene searches"
                    },
                    "wasteCarrierName": {
                        "title": "Waste Carrier Name",
                        "type": "string",
                        "description": "Name of waste carrier to validate"
                    },
                    "registrationNumber": {
                        "title": "Registration Number",
                        "type": "string",
                        "description": "EA waste carrier registration number"
                    },
                    "leiCode": {
                        "title": "LEI Code",
                        "type": "string",
                        "description": "Legal Entity Identifier (20-character alphanumeric)"
                    },
                    "jurisdiction": {
                        "title": "Jurisdiction",
                        "type": "string",
                        "description": "Jurisdiction code for OpenCorporates search (default: gb)",
                        "default": "gb"
                    },
                    "sources": {
                        "title": "Data Sources",
                        "type": "array",
                        "description": "Which data sources to include in analysis",
                        "items": {
                            "type": "string",
                            "enum": [
                                "companiesHouse",
                                "landRegistry",
                                "charity",
                                "foodHygiene",
                                "wasteCarriers",
                                "openCorp",
                                "lei"
                            ]
                        },
                        "default": [
                            "companiesHouse",
                            "openCorp",
                            "lei"
                        ]
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
