# Companies House Scraper — UK Companies, Directors & PSCs (`scrapesage/companies-house-scraper`) Actor

Scrape the UK Companies House register: company profiles, directors, PSCs (beneficial owners), SIC codes, addresses, accounts dates, filing history & charges. Search by keyword, company number, SIC code, location or incorporation date. No API key. Monitoring mode. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/companies-house-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 7 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 company scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## 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

## Companies House Scraper — UK Companies, Directors & PSCs (Officers, SIC Codes, Filings & Leads)

Extract **complete UK company data** straight from the official Companies House register — company profiles, **directors & officers**, **PSCs (persons with significant control / beneficial owners)**, SIC codes, registered office addresses, accounts & confirmation-statement due dates, **filing history** and **charges/mortgages** — and turn the whole register into a **targeted B2B prospect list** filtered by industry (SIC code), location and incorporation date.

No API key, no login, no browser — fast HTML extraction from a public UK government service with near-100% reliability.

### Why this Companies House scraper?

Most actors return a thin company profile and stop. This one ships the **richest record in the category** — every person, every key date, every signal — plus advanced-search filtering and a **monitoring mode** that returns only *new* companies on a schedule.

| Data | Typical scrapers | This actor |
|---|---|---|
| Company profile (status, type, incorporation date, registered office) | ✅ | ✅ |
| SIC codes (with descriptions) | partial | ✅ |
| Accounts & confirmation-statement due dates + **overdue flags** | ❌ | ✅ |
| Previous company names | ❌ | ✅ |
| Officers & directors (role, DOB, nationality, occupation, appointed/resigned) | partial | ✅ |
| **PSCs / beneficial owners** (nature & level of control) | ❌ | ✅ |
| Filing history (date, type, description, document link) | ❌ | ✅ opt-in |
| Charges / mortgages (status, dates, persons entitled) | ❌ | ✅ opt-in |
| **Advanced search** by SIC code + location + incorporation date | ❌ | ✅ |
| Derived **lead score** (0–100) + company age + active-officer/PSC counts | ❌ | ✅ |
| **Monitoring mode** — only new companies on each run | ❌ | ✅ |
| Flat one-record-per-director output for CRM import | ❌ | ✅ opt-in |
| Requires a Companies House API key | sometimes | ❌ never |

### Use cases

- **B2B lead generation** — build prospect lists of every UK company in a SIC code (industry) and town, complete with directors to contact and a lead score to prioritise. New incorporations are warm sales triggers — accountants, banks, insurers, SaaS and agencies all chase them.
- **Sales triggers / new-business alerts** — schedule a daily run with an incorporation-date window + monitoring mode to receive only the companies registered since yesterday for your target industries and regions.
- **KYC, KYB & compliance** — pull directors, beneficial owners (PSCs), nature of control, status and charges for onboarding, AML and due-diligence checks.
- **Credit & risk** — track company status, accounts-overdue flags, confirmation-statement lapses, insolvency/liquidation status and registered charges.
- **Market & competitor research** — map every company in a sector by SIC code, incorporation cohort and location; analyse director networks across companies.
- **Data enrichment** — turn a list of company numbers into fully-enriched records for your CRM or warehouse.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Companies House Scraper**, then either enter **search queries**, paste **company numbers**, or set the **advanced-search filters** (SIC code, location, incorporation date). Click **Start**.
3. Watch company records stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "sicCodes": ["62012"],
    "location": "Manchester",
    "incorporatedFrom": "2026-01-01",
    "includeOfficers": true,
    "includePSCs": true,
    "includeFilingHistory": false,
    "emitOfficerRecords": true,
    "monitoringMode": true,
    "maxCompanies": 500
}
````

- **searchQueries** — keywords / company names to search the register (matches current and previous names).
- **companyNumbers** — exact company numbers (`00445790`, `SC123456`, `NI036672`, `OC301540`); fastest and most precise.
- **startUrls** — Companies House URLs: company pages (`/company/00445790`), keyword search (`/search/companies?q=…`) or advanced-search result pages (`/advanced-search/get-results?…`).
- **Advanced-search filters** — `sicCodes`, `location` (registered office text), `companyNameIncludes` / `companyNameExcludes`, `companyTypes`, `companyStatus`, `incorporatedFrom` / `incorporatedTo`, `dissolvedFrom` / `dissolvedTo`.
- **includeOfficers** *(default true)* — full officer/director list.
- **includePSCs** *(default true)* — persons with significant control + PSC statements.
- **includeFilingHistory** *(default false)* — recent filings (date, type, description, document link) + last-filing date/type.
- **includeCharges** *(default false)* — registered charges / mortgages.
- **emitOfficerRecords** *(default false)* — also output one flat record per officer (`type: "officer"`) for CRM import.
- **monitoringMode** *(default false)* — output only companies not seen in previous runs (see below).
- **maxCompanies / maxConcurrency** — run controls.

### Output

One record per company (`type: "company"`), plus optional per-officer lead records (`type: "officer"`):

```json
{
    "type": "company",
    "companyNumber": "09384423",
    "companyName": "KFORD TYRES (GORNAL) LTD",
    "companyStatus": "Active",
    "companyType": "Private limited Company",
    "incorporatedOn": "2015-01-12",
    "companyAgeYears": 11.4,
    "isActive": true,
    "registeredOfficeAddress": "2 Dawley Brook Road, Kingswinford, England, DY6 7BD",
    "sicCodes": [{ "code": "45200", "description": "Maintenance and repair of motor vehicles" }],
    "sicCodeList": ["45200"],
    "nextAccountsMadeUpTo": "2026-01-31",
    "nextAccountsDueBy": "2026-10-31",
    "lastAccountsMadeUpTo": "2025-01-31",
    "accountsOverdue": false,
    "confirmationStatementNextDate": "2026-01-11",
    "confirmationStatementLastDate": "2025-01-11",
    "previousNames": [{ "name": "TESCO TYRES LTD", "period": "12 Jan 2015 - 03 Mar 2018" }],
    "officersCount": 2,
    "activeOfficersCount": 2,
    "directorsCount": 2,
    "officers": [
        {
            "name": "PAGE, Tanya",
            "officerId": "aBcD_eF...",
            "role": "Director",
            "status": "Active",
            "dateOfBirth": "1967-06",
            "appointedOn": "2015-01-12",
            "nationality": "British",
            "countryOfResidence": "England",
            "occupation": "Director",
            "correspondenceAddress": "2 Dawley Brook Road, Kingswinford, England, DY6 7BD"
        }
    ],
    "pscCount": 1,
    "pscs": [
        {
            "name": "Mrs Tanya Page",
            "status": "Active",
            "notifiedOn": "2017-01-12",
            "dateOfBirth": "1967-06",
            "nationality": "British",
            "countryOfResidence": "England",
            "natureOfControl": ["Ownership of shares – More than 25% but not more than 50%"]
        }
    ],
    "pscStatements": [],
    "leadScore": 90,
    "url": "https://find-and-update.company-information.service.gov.uk/company/09384423",
    "scrapedAt": "2026-06-14T12:00:00.000Z"
}
```

### Monitoring mode — only pull new companies

Turn on **monitoringMode** and the actor remembers every company it has already returned (in a named key-value store) and outputs **only companies it hasn't seen before**. Combine it with an `incorporatedFrom` window + `sicCodes` + `location` and a daily [Schedule](https://docs.apify.com/platform/schedules) to receive a clean feed of **newly-incorporated companies in your target market** — perfect for sales triggers and lead pipelines.

Monitoring mode works *alongside* Apify Schedules, it doesn't conflict with them: the schedule decides *when* the actor runs, monitoring mode decides *what's new* in the results. Each distinct search keeps its own memory, so you can run several monitored searches independently.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it hourly/daily/weekly with monitoring mode to track new incorporations, filings, or director changes for your target industries and regions.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/companies-house-scraper').call({
    sicCodes: ['62012'],
    location: 'London',
    incorporatedFrom: '2026-01-01',
    emitOfficerRecords: true,
    monitoringMode: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} companies & director leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new company leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new companies.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find software companies incorporated in London this year and list their directors" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **B2B lead-gen & business-intelligence stack**:

- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** — US federal contract opportunities & contacts.
- **[Bark Listing Scraper](https://apify.com/scrapesage/bark-listing-scraper)** — service-provider business leads.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals.
- **[Multi-ATS Job Scraper](https://apify.com/scrapesage/multi-ats-job-scraper)** — jobs from Greenhouse, Lever, Ashby & Workday.
- **[Google Ads Transparency Scraper](https://apify.com/scrapesage/google-ads-transparency-scraper)** — who's advertising what on Google.
- **[Facebook Ad Library Scraper](https://apify.com/scrapesage/facebook-ad-library-scraper)** — competitor ad intelligence.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** — events + organizer contact leads.

### Tips

- **Targeted prospect lists**: combine `sicCodes` (industry) + `location` + `incorporatedFrom` to slice the register exactly to your market, then sort the dataset by `leadScore`.
- **New-business feed**: set a rolling `incorporatedFrom`, turn on `monitoringMode`, and schedule the run daily — you'll only ever receive companies you haven't seen.
- **Cost control**: officers and PSCs are included by default; turn off `includeFilingHistory` and `includeCharges` (the extra page fetches) when you only need profiles + people.
- **Company numbers** are the fastest, cheapest input — paste them directly when you already have a list to enrich.
- **Proxies**: the default Apify Proxy is plenty — Companies House is a public UK government service and does not block datacenter IPs.

### FAQ

**Do I need a Companies House API key?** No. This actor reads the public Companies House website, so there's no key, no rate-limit registration, and no login.

**What's a PSC?** A *person with significant control* — a beneficial owner who holds more than 25% of shares or voting rights, or otherwise controls the company. The actor extracts each PSC's name, nature & level of control, date of birth (month/year), nationality and country of residence.

**Which company numbers are supported?** All of them — England & Wales (`12345678`), Scotland (`SC…`), Northern Ireland (`NI…`), LLPs (`OC…`), and others. Search and advanced search resolve numbers for you automatically.

**Can I get only newly-registered companies?** Yes — set an `incorporatedFrom` date, enable `monitoringMode`, and schedule the run. Each run returns only companies not seen in previous runs.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is this legal?** Companies House data is published as open data by the UK government for public use. This actor collects only that publicly available information. You remain responsible for using personal data (e.g. director details) in compliance with UK GDPR and applicable laws.

**A field is null — why?** Some companies genuinely don't publish certain data: newly-incorporated companies have no accounts yet, PLCs trading on a regulated market are PSC-exempt, and dormant companies may have no charges. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords or company names to search the Companies House register, e.g. <code>tesco</code>, <code>green energy ltd</code>. Matches company names and previous names.

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

Exact Companies House company numbers to scrape directly (8 characters, e.g. <code>00445790</code>, <code>SC123456</code>, <code>NI036672</code>, <code>OC301540</code>). Fastest, most precise input.

## `startUrls` (type: `array`):

Direct Companies House URLs: company pages (<code>/company/00445790</code>), keyword search pages (<code>/search/companies?q=...</code>) or advanced-search results (<code>/advanced-search/get-results?...</code>).

## `sicCodes` (type: `array`):

Filter by SIC (industry) codes via advanced search, e.g. <code>62012</code> (software development), <code>68310</code> (estate agents), <code>56101</code> (restaurants). Combine with the other filters below.

## `location` (type: `string`):

Filter by text in the registered office address, e.g. a town, county or postcode (<code>Manchester</code>, <code>EC1</code>).

## `companyNameIncludes` (type: `string`):

Advanced-search filter: only companies whose name contains this text.

## `companyNameExcludes` (type: `string`):

Advanced-search filter: exclude companies whose name contains this text.

## `companyTypes` (type: `array`):

Restrict to one or more company types (advanced search).

## `companyStatus` (type: `array`):

Restrict to one or more company statuses (advanced search).

## `incorporatedFrom` (type: `string`):

Only companies incorporated on or after this date (YYYY-MM-DD). Great for catching brand-new businesses.

## `incorporatedTo` (type: `string`):

Only companies incorporated on or before this date (YYYY-MM-DD).

## `dissolvedFrom` (type: `string`):

Only companies dissolved on or after this date (YYYY-MM-DD).

## `dissolvedTo` (type: `string`):

Only companies dissolved on or before this date (YYYY-MM-DD).

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

Fetch the full officer list per company: name, role, status, date of birth (month/year), nationality, occupation, country of residence, correspondence address, appointed/resigned dates.

## `includePSCs` (type: `boolean`):

Fetch persons with significant control: name, nature & level of control, date of birth, nationality, country of residence, notified date, plus any PSC statements (e.g. exemptions).

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

Fetch the most recent filings (date, type, description, document link). Adds the last-filing date/type to each company — useful for monitoring activity.

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

Fetch registered charges (mortgages): title, status (outstanding/satisfied), created/delivered dates and persons entitled.

## `emitOfficerRecords` (type: `boolean`):

In addition to the company records, push one flat record per officer/director (type = "officer") — a ready-to-use directors list for CRM import.

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

Maximum number of companies to scrape across all inputs. The default (50) returns a rich result set quickly; raise it for bigger lead lists — large runs stream results as they go and stop gracefully before the run's timeout, so nothing is lost.

## `monitoringMode` (type: `boolean`):

Output only companies not seen in previous runs — ideal for scheduled runs that return ONLY new matches (e.g. new incorporations for a SIC code). Works alongside Apify Schedules: the schedule triggers the run, monitoring mode deduplicates results.

## `maxConcurrency` (type: `integer`):

How many companies to fetch in parallel. The Companies House site is fast and stable; 12 is a good default. Raise it to go faster on large runs.

## `proxyConfiguration` (type: `object`):

Proxy settings. Companies House is a public UK government service that does not block datacenter IPs, so the default Apify Proxy is plenty — no residential proxy needed.

## Actor input object example

```json
{
  "searchQueries": [
    "green energy"
  ],
  "includeOfficers": true,
  "includePSCs": true,
  "includeFilingHistory": false,
  "includeCharges": false,
  "emitOfficerRecords": false,
  "maxCompanies": 50,
  "monitoringMode": false,
  "maxConcurrency": 12,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped company records and optional officer lead records as JSON items in the default dataset.

# 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 = {
    "searchQueries": [
        "green energy"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/companies-house-scraper").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 = {
    "searchQueries": ["green energy"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/companies-house-scraper").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 '{
  "searchQueries": [
    "green energy"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/companies-house-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/companies-house-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Companies House Scraper — UK Companies, Directors & PSCs",
        "description": "Scrape the UK Companies House register: company profiles, directors, PSCs (beneficial owners), SIC codes, addresses, accounts dates, filing history & charges. Search by keyword, company number, SIC code, location or incorporation date. No API key. Monitoring mode. Export JSON, CSV, Excel.",
        "version": "1.1",
        "x-build-id": "aaLBXpy2C3ZIMprHQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~companies-house-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-companies-house-scraper",
                "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/scrapesage~companies-house-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-companies-house-scraper",
                "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/scrapesage~companies-house-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-companies-house-scraper",
                "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",
                "properties": {
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keywords or company names to search the Companies House register, e.g. <code>tesco</code>, <code>green energy ltd</code>. Matches company names and previous names.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companyNumbers": {
                        "title": "Company numbers",
                        "type": "array",
                        "description": "Exact Companies House company numbers to scrape directly (8 characters, e.g. <code>00445790</code>, <code>SC123456</code>, <code>NI036672</code>, <code>OC301540</code>). Fastest, most precise input.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct Companies House URLs: company pages (<code>/company/00445790</code>), keyword search pages (<code>/search/companies?q=...</code>) or advanced-search results (<code>/advanced-search/get-results?...</code>).",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "sicCodes": {
                        "title": "SIC codes",
                        "type": "array",
                        "description": "Filter by SIC (industry) codes via advanced search, e.g. <code>62012</code> (software development), <code>68310</code> (estate agents), <code>56101</code> (restaurants). Combine with the other filters below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Registered office location",
                        "type": "string",
                        "description": "Filter by text in the registered office address, e.g. a town, county or postcode (<code>Manchester</code>, <code>EC1</code>)."
                    },
                    "companyNameIncludes": {
                        "title": "Company name includes",
                        "type": "string",
                        "description": "Advanced-search filter: only companies whose name contains this text."
                    },
                    "companyNameExcludes": {
                        "title": "Company name excludes",
                        "type": "string",
                        "description": "Advanced-search filter: exclude companies whose name contains this text."
                    },
                    "companyTypes": {
                        "title": "Company types",
                        "type": "array",
                        "description": "Restrict to one or more company types (advanced search).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "ltd",
                                "plc",
                                "llp",
                                "private-unlimited",
                                "limited-partnership",
                                "private-limited-guarant-nsc",
                                "private-limited-guarant-nsc-limited-exemption",
                                "community-interest-company",
                                "charitable-incorporated-organisation",
                                "registered-overseas-entity",
                                "old-public-company",
                                "other"
                            ],
                            "enumTitles": [
                                "Private limited (LTD)",
                                "Public limited (PLC)",
                                "Limited liability partnership (LLP)",
                                "Private unlimited",
                                "Limited partnership",
                                "Private limited by guarantee (no share capital)",
                                "Private limited by guarantee (no share capital, exempt)",
                                "Community interest company (CIC)",
                                "Charitable incorporated organisation",
                                "Registered overseas entity",
                                "Old public company",
                                "Other"
                            ]
                        }
                    },
                    "companyStatus": {
                        "title": "Company status",
                        "type": "array",
                        "description": "Restrict to one or more company statuses (advanced search).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "active",
                                "dissolved",
                                "open",
                                "closed",
                                "converted-closed",
                                "receivership",
                                "liquidation",
                                "administration",
                                "insolvency-proceedings",
                                "voluntary-arrangement"
                            ],
                            "enumTitles": [
                                "Active",
                                "Dissolved",
                                "Open",
                                "Closed",
                                "Converted / closed",
                                "Receivership",
                                "Liquidation",
                                "Administration",
                                "Insolvency proceedings",
                                "Voluntary arrangement"
                            ]
                        }
                    },
                    "incorporatedFrom": {
                        "title": "Incorporated from",
                        "type": "string",
                        "description": "Only companies incorporated on or after this date (YYYY-MM-DD). Great for catching brand-new businesses."
                    },
                    "incorporatedTo": {
                        "title": "Incorporated to",
                        "type": "string",
                        "description": "Only companies incorporated on or before this date (YYYY-MM-DD)."
                    },
                    "dissolvedFrom": {
                        "title": "Dissolved from",
                        "type": "string",
                        "description": "Only companies dissolved on or after this date (YYYY-MM-DD)."
                    },
                    "dissolvedTo": {
                        "title": "Dissolved to",
                        "type": "string",
                        "description": "Only companies dissolved on or before this date (YYYY-MM-DD)."
                    },
                    "includeOfficers": {
                        "title": "Include officers & directors",
                        "type": "boolean",
                        "description": "Fetch the full officer list per company: name, role, status, date of birth (month/year), nationality, occupation, country of residence, correspondence address, appointed/resigned dates.",
                        "default": true
                    },
                    "includePSCs": {
                        "title": "Include PSCs (beneficial owners)",
                        "type": "boolean",
                        "description": "Fetch persons with significant control: name, nature & level of control, date of birth, nationality, country of residence, notified date, plus any PSC statements (e.g. exemptions).",
                        "default": true
                    },
                    "includeFilingHistory": {
                        "title": "Include filing history",
                        "type": "boolean",
                        "description": "Fetch the most recent filings (date, type, description, document link). Adds the last-filing date/type to each company — useful for monitoring activity.",
                        "default": false
                    },
                    "includeCharges": {
                        "title": "Include charges / mortgages",
                        "type": "boolean",
                        "description": "Fetch registered charges (mortgages): title, status (outstanding/satisfied), created/delivered dates and persons entitled.",
                        "default": false
                    },
                    "emitOfficerRecords": {
                        "title": "Emit one lead record per officer",
                        "type": "boolean",
                        "description": "In addition to the company records, push one flat record per officer/director (type = \"officer\") — a ready-to-use directors list for CRM import.",
                        "default": false
                    },
                    "maxCompanies": {
                        "title": "Max companies",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of companies to scrape across all inputs. The default (50) returns a rich result set quickly; raise it for bigger lead lists — large runs stream results as they go and stop gracefully before the run's timeout, so nothing is lost.",
                        "default": 50
                    },
                    "monitoringMode": {
                        "title": "Monitoring mode (only new companies)",
                        "type": "boolean",
                        "description": "Output only companies not seen in previous runs — ideal for scheduled runs that return ONLY new matches (e.g. new incorporations for a SIC code). Works alongside Apify Schedules: the schedule triggers the run, monitoring mode deduplicates results.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many companies to fetch in parallel. The Companies House site is fast and stable; 12 is a good default. Raise it to go faster on large runs.",
                        "default": 12
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Companies House is a public UK government service that does not block datacenter IPs, so the default Apify Proxy is plenty — no residential proxy needed.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
