UK Companies House Scraper

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

Data fields

FieldTypeDescription
querystringValue exported as query.
companyNamestringValue exported as companyName.
companyNumberstringValue exported as companyNumber.
companyStatusstring | nullValue exported as companyStatus.
companyTypestring | nullValue exported as companyType.
incorporationDatestring | nullValue exported as incorporationDate.
dissolutionDatestring | nullValue exported as dissolutionDate.
registeredOfficeAddressstring | nullValue exported as registeredOfficeAddress.

Input preview

queriesCompany names or numbers
companyUrlsCompany profile URLs
maxResultsPerQueryMaximum companies per query
includeOfficersInclude officers
includePersonsWithSignificantControlInclude PSCs
includeFilingHistoryInclude filing history

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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

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.

Input recipes

  • Small test: Start with the default input and a low result limit.
  • Focused run: Use one specific public URL, query, profile, or location before expanding the input.
  • Scheduled monitoring: Save the input as a task and schedule repeat runs when you need fresh data.

Example input

{
  "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

{
  "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.

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

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

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

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

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

{
  "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.

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.

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.

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

Those rows can still appear without a document URL.

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.

Common questions

Questions and answers reused from the canonical actor README.

Can I scrape officers and filings together?

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