Companies House UK Company Search Scraper
Pricing
from $0.03 / 1,000 company record extracteds
Companies House UK Company Search Scraper
Scrape official UK Companies House public company records with status, addresses, SIC codes, officers, PSCs, and filing history.
Pricing
from $0.03 / 1,000 company record extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape public Companies House UK search results and company detail pages for company enrichment, KYC research, sales intelligence, officers, PSCs, and filing history.
What does Companies House UK Company Search Scraper do?
Companies House UK Company Search Scraper turns public UK company registry pages into structured datasets.
It searches the official Companies House web service by company name or keyword, opens matching company profiles, and extracts business-ready fields such as company number, status, type, incorporation date, registered office address, SIC codes, source URLs, and optional people and filing summaries.
Use it when you need repeatable company lookup from the public UK registry without copying data manually from the Companies House website.
Why scrape Companies House UK company data?
Companies House is the official public register for companies incorporated in the United Kingdom.
Teams use this data to validate company identities, enrich CRM records, check company status, discover officers, review PSC / beneficial ownership information, and monitor recent filings.
The actor is designed for bulk public-web extraction where a spreadsheet, CRM, compliance queue, or research workflow contains many company names or company numbers.
Who is it for?
- 🧾 KYC and compliance analysts validating legal entities.
- 📈 B2B sales teams enriching UK account lists.
- 🧑💼 Accountants and corporate service providers checking client entities.
- 🔎 Market researchers building company datasets from public registry data.
- 👥 Recruiters and business-development teams mapping officers and company activity.
- 🧰 Developers who need Companies House data inside a repeatable Apify workflow.
Why use this actor instead of manual search?
Manual Companies House lookup is useful for one company.
It becomes slow when you need to process hundreds of names, preserve source URLs, or export filing and officer summaries for downstream systems.
This actor keeps the official source URL attached to every record and returns consistent fields that can be exported as JSON, CSV, Excel, or sent to integrations.
Data extracted
| Field | Description |
|---|---|
query | Original search query or company number |
resultRank | Position in Companies House search results |
companyName | Registered company name |
companyNumber | Companies House company number |
companyStatus | Status shown on the detail page, such as Active or Dissolved |
companyType | Company type shown by Companies House |
incorporationDate | Incorporation date from the detail page |
registeredOfficeAddress | Registered office address |
sicCodes | Nature-of-business / SIC code strings |
detailUrl | Public company profile URL |
sourceUrl | Search or detail URL used as the source |
matchedSearchSnippet | Search-result snippet with number, date, and address |
matches | When multiple inputs find the same company, all matching queries, ranks, source URLs, and snippets (the first match remains in the original fields) |
officers | Optional officer summaries |
personsWithSignificantControl | Optional PSC summaries |
filingHistory | Optional recent filing summaries |
scrapedAt | ISO timestamp when the record was produced |
Optional officer data
Enable includeOfficers to fetch the public People page for each company.
The actor returns officer names, roles, active/resigned status where visible, appointment dates, correspondence addresses, and appointment URLs.
Use maxOfficersPerCompany to keep runs small when you only need a representative summary.
Optional PSC / beneficial owner data
Enable includePersonsWithSignificantControl to fetch the public persons-with-significant-control page.
When Companies House exposes PSC records for a company, the actor attempts to collect names, status, notification dates, cessation dates, and nature-of-control snippets.
Some companies, especially certain public companies or dissolved entities, may have no PSC records on the public page.
Optional filing history data
Enable includeFilingHistory to fetch recent filing rows.
Each filing summary can include date, filing type, description, and the public document URL when Companies House provides one.
Use maxFilingsPerCompany to cap how many filings are included per company.
How much does it cost to scrape Companies House UK company records?
The actor uses pay-per-event pricing.
There is a small start fee for each run and a per-company-result event for each dataset item saved.
Current pricing: $0.005 per run start, plus a tiered per-record event (for example $0.000055543 at BRONZE or $0.000063875 at FREE). One company found through multiple queries or direct inputs produces one record and one item event. A run with 10 distinct records costs $0.00555543 at BRONZE, before any platform-specific adjustments. Check the live pricing tab for your current tier. Keep test runs small at first by using low maxResultsPerQuery values and optional enrichment only when you need it.
Input options
{"queries": ["tesco", "barclays"],"maxResultsPerQuery": 25,"activeOnly": false,"includeOfficers": true,"includePersonsWithSignificantControl": false,"includeFilingHistory": true,"maxOfficersPerCompany": 5,"maxFilingsPerCompany": 5,"requestDelayMs": 150}
Search by company number
If you already have exact Companies House numbers, use companyNumbers.
{"companyNumbers": ["00445790", "00000006"],"includeOfficers": false,"includeFilingHistory": true}
Search by direct company URLs
You can also pass direct company profile URLs in startUrls.
{"startUrls": [{ "url": "https://find-and-update.company-information.service.gov.uk/company/00445790" }]}
Output example
{"query": "tesco","resultRank": 1,"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"],"detailUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790","filingHistory": [{ "date": "03 Jul 2026", "type": "SH06", "description": "Cancellation of shares..." }]}
How to run it
- Add company names to
queries, or exact company numbers tocompanyNumbers. - Choose
maxResultsPerQuery. - Turn on officer, PSC, or filing enrichment only when required.
- Start the actor.
- Download results from the default dataset as CSV, JSON, Excel, or HTML.
Tips for better results
- Use exact registered names when possible.
- Use company numbers when you already know them.
- Keep
maxResultsPerQuerysmall for validation runs. - Use
activeOnlyto keep only companies whose detail-page status is exactly Active. Unknown, Inactive, and Not active statuses are excluded. - Enable detailed enrichment only for companies you actually need to inspect.
- Keep
requestDelayMsabove zero for polite public-service scraping.
Integrations
Common workflows include:
- Send company records to Google Sheets for manual compliance review.
- Enrich a CRM account list with company numbers and registered addresses.
- Trigger downstream checks when filing history shows recent filings.
- Join scraped company numbers with internal KYC or accounting data.
- Store source URLs for audit trails in Airtable, BigQuery, or Snowflake.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/companies-house-uk-company-search-scraper').call({queries: ['tesco'],maxResultsPerQuery: 10,includeFilingHistory: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('MY-APIFY-TOKEN')run = client.actor('automation-lab/companies-house-uk-company-search-scraper').call(run_input={'queries': ['tesco'],'maxResultsPerQuery': 10,'includeOfficers': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl "https://api.apify.com/v2/acts/automation-lab~companies-house-uk-company-search-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"queries":["tesco"],"maxResultsPerQuery":10,"includeFilingHistory":true}'
MCP: use with Claude Desktop or Claude Code
You can expose this actor through Apify MCP tools.
Add the Apify MCP server in Claude Code:
$claude mcp add --transport http apify-companies-house "https://mcp.apify.com/?tools=automation-lab/companies-house-uk-company-search-scraper"
For Claude Desktop, add this JSON server configuration:
{"mcpServers": {"apify-companies-house": {"url": "https://mcp.apify.com/?tools=automation-lab/companies-house-uk-company-search-scraper"}}}
For Cursor, add the same URL as a remote HTTP MCP server in Settings → Tools & MCP. For VS Code, add it as an HTTP MCP server in your MCP configuration. Authenticate to Apify when prompted; keep tokens out of checked-in configuration.
Use an MCP server URL with the actor tool selected:
https://mcp.apify.com/?tools=automation-lab/companies-house-uk-company-search-scraper
Example prompts:
- "Scrape Companies House records for these UK company names and return active companies only."
- "Find recent Companies House filings for Tesco-related companies."
- "Enrich this list of company numbers with registered office addresses and SIC codes."
Reliability and limits
The actor scrapes public, server-rendered HTML pages from Companies House.
It does not bypass login-only areas, private data, paid API limits, or user accounts. This independent Actor is not affiliated with or endorsed by Companies House. It uses deterministic HTML parsing, not AI models; no user input or extracted personal data is sent to an AI model. Public officer and PSC names may appear in your dataset. The Actor does not maintain an external cache; Apify run datasets and logs follow your account's retention settings and can be deleted using Apify storage controls. Requests go directly to the public Companies House website via the Actor's Apify infrastructure. No separate paid source account or pass-through charge is required.
Companies House page structure can change, so keep source URLs in your exports and rerun validation on critical workflows.
Legality and responsible use
Companies House publishes company information for public access, but users remain responsible for how they use, store, combine, and share the data.
Respect applicable laws, privacy rules, terms, and internal compliance policies.
Do not use scraped data for unlawful discrimination, harassment, spam, or other prohibited activity.
Troubleshooting
A query with no matches succeeds with an empty dataset. A run in which all discovered company detail pages fail instead fails with an actionable error. If a run returns no results, check whether the query is too narrow or misspelled.
If optional officers, PSCs, or filings are missing, check the run warning for the failed section and open the detailUrl manually. A failed optional page leaves the core company record intact; an empty PSC array can also legitimately mean the company is exempt or has no public PSC entries.
If a run is slow, reduce enrichment toggles and per-company limits.
If you need exact matches, prefer companyNumbers instead of broad keyword searches.
FAQ
Does this use the official Companies House API?
No. The MVP uses public Companies House web pages so users do not need an API key.
Can I scrape dissolved companies?
Yes. Leave activeOnly disabled to include all statuses returned by Companies House.
Why are some PSC arrays empty?
Some companies have no PSC records visible on the public page, and some company types do not expose PSC details in the same way.
Can I monitor filing changes?
Yes. Schedule recurring runs for exact company numbers and compare the newest filing rows in your downstream system.
Related scrapers
Useful Automation Lab actors for adjacent workflows:
- https://apify.com/automation-lab/linkedin-company-scraper
- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/google-search-results-scraper
Changelog
See the Actor changelog for releases. Initial version: public Companies House company search, company detail extraction, optional officers, optional PSC summaries, and optional filing history summaries.