# UK Companies House Scraper (`fetch_cat/uk-companies-house-scraper`) Actor

Scrape Companies House company profiles, officers, filings, PSCs, registered addresses, status, SIC codes, and incorporation dates.

- **URL**: https://apify.com/fetch\_cat/uk-companies-house-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Lead generation, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.02 / 1,000 company records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## UK Companies House Scraper

Extract public UK company registry data from Companies House.

### What does UK Companies House Scraper do?

UK Companies House Scraper collects public company profiles from the official UK Companies House website.

It can search by company name, trading name, or company number.

It can also enrich direct Companies House company profile URLs.

The actor returns company status, company type, registered office address, incorporation date, SIC codes, officers, filings, and PSC data when available.

### Who is it for?

Sales teams use it to build company lead lists.

Compliance teams use it to check official registry status.

Recruiters use it to enrich employer records.

Finance teams use it for due-diligence workflows.

Legal operations teams use it to monitor filings and registered office changes.

Data teams use it to enrich CRMs and internal company databases.

### Why use this actor?

You can collect structured Companies House records without building and maintaining your own parser.

You can start from search terms or known profile URLs.

You can include nested officer and filing details in the same dataset row.

You can export the results as JSON, CSV, Excel, XML, or HTML from Apify.

### Input settings

| Setting | JSON key | Type / default | Description |
| --- | --- | --- | --- |
| Company names or numbers | `queries` | array, default `["tesco","00002065"]` | Company names, trading names, or exact 8-character company numbers to search on Companies House. |
| Company profile URLs | `companyUrls` | array, default `[{"url":"https://find-and-update.company-information.service.gov.uk/company/00445790"}]` | Optional direct Companies House company profile URLs, for example https://find-and-update.company-information.service.gov.uk/company/00445790. |
| Maximum companies per query | `maxResultsPerQuery` | integer, default `10` | Maximum company profile records to save for each search query. |
| Include officers | `includeOfficers` | boolean, default `true` | Fetch each company's People page and include officer/director summaries. |
| Include PSCs | `includePersonsWithSignificantControl` | boolean, default `false` | Fetch persons with significant control when the tab is available. |
| Include filing history | `includeFilingHistory` | boolean, default `true` | Fetch recent filing rows and PDF links. |
| Maximum officers per company | `maxOfficersPerCompany` | integer, default `10` | Caps nested officer records per company. |
| Maximum filings per company | `maxFilingsPerCompany` | integer, default `10` | Caps nested filing-history records per company. |
| Maximum concurrency | `maxConcurrency` | integer, default `3` | Number of company profiles fetched in parallel. Keep moderate for GOV.UK pages. |
| Maximum run time in seconds | `maxRunSeconds` | optional integer, `60`–`270` | Optional safety budget. The Actor stops admitting new company requests before the budget to preserve saved records and progress. |
| Use Apify Proxy | `useProxy` | boolean, default `false` | Usually not needed for Companies House. Enable only if your network has connectivity issues. |
| Proxy configuration | `proxyConfiguration` | object, default `{"useApifyProxy":false}` | Optional Apify Proxy settings used when Use Apify Proxy is enabled. |

### Output fields

| JSON key | Label | Type | Description |
| --- | --- | --- | --- |
| `query` | Query | string | Output field for query. |
| `companyName` | CompanyName | string | Output field for companyname. |
| `companyNumber` | CompanyNumber | string | Output field for companynumber. |
| `companyStatus` | CompanyStatus | string / null | Output field for companystatus. |
| `companyType` | CompanyType | string / null | Output field for companytype. |
| `incorporationDate` | IncorporationDate | string / null | Output field for incorporationdate. |
| `dissolutionDate` | DissolutionDate | string / null | Output field for dissolutiondate. |
| `registeredOfficeAddress` | RegisteredOfficeAddress | string / null | Output field for registeredofficeaddress. |
| `sicCodes` | SicCodes | array | Output field for siccodes. |
| `previousNames` | PreviousNames | array | Output field for previousnames. |
| `jurisdiction` | Jurisdiction | string | Output field for jurisdiction. |
| `sourceUrl` | SourceUrl | string | Output field for sourceurl. |
| `profileUrl` | ProfileUrl | string | Output field for profileurl. |
| `officers` | Officers | array | Output field for officers. |
| `filings` | Filings | array | Output field for filings. |
| `personsWithSignificantControl` | PersonsWithSignificantControl | array | Output field for personswithsignificantcontrol. |
| `warnings` | Warnings | array | Optional non-sensitive warnings when an officer, filing, or PSC section could not be collected; the company profile is still saved. |
| `scrapedAt` | ScrapedAt | string | Output field for scrapedat. |

### Pricing

This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.

| Event | What is charged | Price |
| --- | --- | ---: |
| `start` | One-time fee charged when a run starts. Covers fixed startup cost. | $0.005 |

| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| `item` | Charged per company profile saved to the dataset. | $0.04445 / 1,000 | $0.03866 / 1,000 | $0.03015 / 1,000 | $0.02319 / 1,000 | $0.01546 / 1,000 | $0.01082 / 1,000 |

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

### How to use it

1. Open the actor on Apify.
2. Enter company names, company numbers, or profile URLs.
3. Choose how many companies to save per query.
4. Decide whether to include officers, filings, and PSCs.
5. Run the actor.
6. Download the dataset in your preferred format.

### Input options

#### Company names or numbers

Use `queries` for company names, trading names, or exact company numbers.

Example values:

- `tesco`
- `openai`
- `00002065`

#### Company profile URLs

Use `companyUrls` when you already know the Companies House profile page.

Example:

`https://find-and-update.company-information.service.gov.uk/company/00445790`

#### Maximum companies per query

Use `maxResultsPerQuery` to control result volume.

A low number is best for testing.

Increase it for larger lead lists.

#### Include officers

Enable `includeOfficers` to add people listed on the company People tab.

This can include directors and secretaries.

#### Include filing history

Enable `includeFilingHistory` to collect recent filing rows.

Rows can include filing type, date, description, pages, and PDF links.

#### Include PSCs

Enable `includePersonsWithSignificantControl` to collect PSC records when available.

Some companies are exempt or do not show PSCs.

### Ready-to-run examples

- [Export Tesco PLC company profile](https://apify.com/fetch_cat/uk-companies-house-scraper/examples/uk-companies-house-tesco-profile) — one public profile with officers, filings, and PSCs.
- [Search Tesco Companies House records](https://apify.com/fetch_cat/uk-companies-house-scraper/examples/uk-companies-house-tesco-search) — a small name-search result set for discovery workflows.
- [Look up a Companies House company number](https://apify.com/fetch_cat/uk-companies-house-scraper/examples/uk-companies-house-company-number-lookup) — an exact-number lookup example.

### Example input

```json
{
  "queries": ["tesco", "00002065"],
  "companyUrls": [{ "url": "https://find-and-update.company-information.service.gov.uk/company/00445790" }],
  "maxResultsPerQuery": 2,
  "includeOfficers": true,
  "includeFilingHistory": true,
  "includePersonsWithSignificantControl": false,
  "maxOfficersPerCompany": 5,
  "maxFilingsPerCompany": 5
}
```

### Example output

```json
{
  "query": "tesco",
  "companyName": "TESCO PLC",
  "companyNumber": "00445790",
  "companyStatus": "Active",
  "companyType": "Public limited Company",
  "incorporationDate": "27 November 1947",
  "registeredOfficeAddress": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
  "sicCodes": ["47110 - Retail sale in non-specialised stores with food, beverages or tobacco predominating"],
  "profileUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790",
  "scrapedAt": "2026-07-03T00:00:00.000Z"
}
```

### Tips for better results

Use exact company numbers when you need a specific legal entity.

Use company names when you want discovery and matching variants.

Keep `maxResultsPerQuery` small for first runs.

Enable nested sections only when you need them.

If a profile is available but one optional detail section is temporarily unavailable, the profile is saved and the `warnings` field explains which section could not be collected.

Use direct URLs for repeat enrichment jobs.

### Common workflows

#### B2B lead enrichment

Upload a list of company names.

Export status, address, SIC code, and officer data.

Join the dataset back to your CRM.

#### Compliance checks

Run company numbers from your customer list.

Review company status and filing history.

Flag dissolved or unusual statuses.

#### Market mapping

Search competitor names or sector keywords.

Collect public registry details.

Use SIC codes and addresses to segment results.

### Integrations

You can connect this actor to Google Sheets.

You can send results to Make or Zapier.

You can call it from a backend service using the Apify API.

You can schedule recurring runs for monitoring workflows.

### API usage

Run UK Companies House Scraper from your own code with the Apify API.

**Node.js**

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
  "queries": [
    "tesco",
    "00002065"
  ],
  "companyUrls": [
    {
      "url": "https://find-and-update.company-information.service.gov.uk/company/00445790"
    }
  ],
  "maxResultsPerQuery": 10,
  "includeOfficers": true,
  "includePersonsWithSignificantControl": false
};

const run = await client.actor('fetch_cat/uk-companies-house-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python**

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/uk-companies-house-scraper").call(run_input={
  "queries": [
    "tesco",
    "00002065"
  ],
  "companyUrls": [
    {
      "url": "https://find-and-update.company-information.service.gov.uk/company/00445790"
    }
  ],
  "maxResultsPerQuery": 10,
  "includeOfficers": true,
  "includePersonsWithSignificantControl": false
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

**cURL**

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~uk-companies-house-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["tesco","00002065"],"companyUrls":[{"url":"https://find-and-update.company-information.service.gov.uk/company/00445790"}],"maxResultsPerQuery":10,"includeOfficers":true,"includePersonsWithSignificantControl":false}'
```

### Use with AI agents via MCP

UK Companies House Scraper can be used by AI assistants through the hosted Apify MCP server.

**Claude Code setup**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/uk-companies-house-scraper"
```

**Claude Desktop, Cursor, or VS Code JSON config**

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/uk-companies-house-scraper"
    }
  }
}
```

**Example prompts**

- "Run UK Companies House Scraper with this input JSON and summarize the dataset."
- "Export the latest UK Companies House Scraper results to a table I can review."
- "Schedule this Actor for monitoring and tell me what changed between runs."

### Limits and caveats

Companies House search can return officers and other result types.

This actor saves company profiles only.

Some companies have no PSC data or show an exemption notice.

Filing documents may be processing and may not yet have a PDF link.

Large searches should use polite limits.

### Is it legal to scrape Companies House?

Companies House publishes company information for public access.

You are responsible for using the data lawfully.

Respect applicable privacy, database, and data-protection rules.

Do not use the data for prohibited or abusive purposes.

### FAQ

#### Can I scrape officers and filings together?

Yes. Enable officers and filing history in the input, then set sensible per-company limits.

### Troubleshooting

#### Why did I get fewer companies than requested?

The search may have fewer company profile results than your limit.

The actor ignores officer-only search results because the output is company-focused.

#### Why are PSCs empty?

Some companies have no PSC records, are exempt, or do not expose the section in the same way.

Enable `includePersonsWithSignificantControl` if you need PSC enrichment.

#### Why is a PDF link missing?

Companies House may show that a filing document is still being processed.

Those rows can still appear without a document URL.

### Related actors

- [NPI Registry Scraper](https://apify.com/fetch_cat/npi-registry-scraper)
- [Agoda Hotels Scraper](https://apify.com/fetch_cat/agoda-hotels-scraper)
- [Agoda Reviews Scraper](https://apify.com/fetch_cat/agoda-reviews-scraper)
- [Airbnb Listings Scraper](https://apify.com/fetch_cat/airbnb-listings-scraper)
- [Airbnb Reviews Scraper](https://apify.com/fetch_cat/airbnb-reviews-scraper)

### Data freshness

Each run fetches current public pages.

The `scrapedAt` timestamp records when the item was extracted.

### Export formats

Apify datasets can be exported as JSON.

They can be exported as CSV.

They can be exported as Excel.

They can be exported as XML.

They can be exported through the Dataset API.

### Support

Report bugs, wrong output, blocked runs, or missing fields from the Actor page. Include the Apify run ID or run URL, your input JSON, what you expected, what the Actor returned, and one reproducible public URL so the issue can be tested quickly.

### Privacy and data handling

This Actor only requests the permissions needed to run the input you provide. It uses your input (such as URLs, search terms, identifiers, filters, and limits) only to fetch the requested public data from the relevant source site or API for this Actor, then writes results to your Apify dataset/key-value store.

Data may pass through Apify platform services and Apify Proxy during the run, and requests are sent only to the target site or public data provider required for this Actor's results. FetchCat does not send your inputs or outputs to advertising networks, data brokers, or model-training services, and does not retain run data outside Apify storage after the run except when you explicitly share run details for transient support debugging.

You are responsible for using this Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs. Review the output before storing, sharing, or combining it with other data.

# Actor input Schema

## `queries` (type: `array`):

Company names, trading names, or exact 8-character company numbers to search on Companies House.

## `companyUrls` (type: `array`):

Optional direct Companies House company profile URLs, for example https://find-and-update.company-information.service.gov.uk/company/00445790.

## `maxResultsPerQuery` (type: `integer`):

Maximum company profile records to save for each search query.

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

Fetch each company's People page and include officer/director summaries.

## `includePersonsWithSignificantControl` (type: `boolean`):

Fetch persons with significant control when the tab is available.

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

Fetch recent filing rows and PDF links.

## `maxOfficersPerCompany` (type: `integer`):

Caps nested officer records per company.

## `maxFilingsPerCompany` (type: `integer`):

Caps nested filing-history records per company.

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

Number of company profiles fetched in parallel. Keep moderate for GOV.UK pages.

## `maxRunSeconds` (type: `integer`):

Optional safety budget from 60 to 270 seconds. The Actor stops starting new company requests before this budget so saved records and progress remain consistent.

## `useProxy` (type: `boolean`):

Usually not needed for Companies House. Enable only if your network has connectivity issues.

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

Optional Apify Proxy settings used when Use Apify Proxy is enabled.

## Actor input object example

```json
{
  "queries": [
    "tesco",
    "00002065"
  ],
  "companyUrls": [
    {
      "url": "https://find-and-update.company-information.service.gov.uk/company/00445790"
    }
  ],
  "maxResultsPerQuery": 10,
  "includeOfficers": true,
  "includePersonsWithSignificantControl": false,
  "includeFilingHistory": true,
  "maxOfficersPerCompany": 10,
  "maxFilingsPerCompany": 10,
  "maxConcurrency": 3,
  "useProxy": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "tesco",
        "00002065"
    ],
    "companyUrls": [
        {
            "url": "https://find-and-update.company-information.service.gov.uk/company/00445790"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/uk-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 = {
    "queries": [
        "tesco",
        "00002065",
    ],
    "companyUrls": [{ "url": "https://find-and-update.company-information.service.gov.uk/company/00445790" }],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/uk-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 '{
  "queries": [
    "tesco",
    "00002065"
  ],
  "companyUrls": [
    {
      "url": "https://find-and-update.company-information.service.gov.uk/company/00445790"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fetch_cat/uk-companies-house-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/DYtlsqnrd1tVhFBEF/builds/dfrfpepTck99ULHDQ/openapi.json
