UK Companies House Scraper
Pricing
from $2.00 / 1,000 company (result)s
UK Companies House Scraper
Use this when you need UK companies from the official Companies House register: new incorporations, companies by name, SIC code, location, status or type, with registered address, SIC codes, accounts dates and officers (directors). Uses your free Companies House API key. Pay per result.
Pricing
from $2.00 / 1,000 company (result)s
Rating
0.0
(0)
Developer
Hexadata
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
9 hours ago
Last modified
Categories
Share
UK Companies House Scraper returns companies from the official UK register (Companies House) as clean JSON: new incorporations, companies by name, SIC code, location, status, type or incorporation date, with registered office address, SIC codes and, optionally, the company profile (accounts and confirmation-statement due dates, charges, previous names) and the officers (directors). It uses the official Companies House API with your own free API key, splits large searches automatically, runs incrementally for daily "new companies" alerts, and you pay per result.
What you get
One item per company, same field names as every Hexadata Actor:
| Field | Type | Description |
|---|---|---|
id / companyNumber | string | Company number (8 characters), unique |
name | string | Registered name |
status | string | active, dissolved, liquidation, administration… |
type / typeLabel | string | ltd / "Private limited company", plc, llp… |
subtype | string | null | community-interest-company, private-fund-limited-partnership |
incorporatedAt / dissolvedAt | string | null | YYYY-MM-DD |
address | string | null | Registered office in one line |
addressLine1 / addressLine2 / locality / region / postalCode / addressCountry | string | null | Registered office parts |
country | string | GB |
sicCodes | string[] | UK SIC 2007 codes |
url | string | Company page on find-and-update.company-information.service.gov.uk |
source, scrapedAt | string | Attribution and extraction timestamp |
With includeDetails: true (one extra request per company): jurisdiction, previousNames[], hasCharges, hasInsolvencyHistory, hasBeenLiquidated, isCommunityInterestCompany, accountsNextDue, accountsLastMadeUpTo, accountsType, confirmationStatementNextDue, confirmationStatementLastMadeUpTo, registeredOfficeInDispute, statusDetail.
With includeOfficers: true (one extra request per company): officers[] with name, role, isCorporate, appointedOn, resignedOn, nationality, countryOfResidence, occupation, appointmentsUrl, plus activeOfficersCount and resignedOfficersCount. Birth dates and correspondence addresses are never copied.
Use cases
- B2B sales and lead-generation teams (accountants, banks, insurers, SaaS, office services) get every company incorporated yesterday in their SIC codes or region, with the director's name, before anyone else contacts them.
- Fintech, KYC and credit teams verify company number, status, type, incorporation date, accounts due dates and insolvency flags in bulk against the official register.
- Market and competitive analysts count and list all active companies in a SIC code or town, or all companies dissolved in a period.
- Recruiters and investors track newly formed companies in a sector (
sicCodes+incorporatedFrom) and the people behind them. - AI agents and RAG pipelines call the Actor as an MCP tool ("which software companies were incorporated in Manchester this week?") and get structured answers from the official source.
Input
| Field | Type | Default | Description |
|---|---|---|---|
apiKey | secret string | required | Your free Companies House REST API key (see below). |
searchQueries | string[] | [] (prefill ["software"]) | Words the company name must contain; one search per line. |
companyNameExcludes | string | – | Words the name must not contain. |
sicCodes | string[] | [] | UK SIC 2007 codes (62012, 41100, 56101…). |
location | string | – (prefill London) | Registered-office town, county or postcode area. |
companyStatus | select | active | active, any, dissolved, liquidation, administration… |
companyTypes | string[] | [] | ltd, plc, llp, limited-partnership, private-limited-guarant-nsc… |
incorporatedFrom / incorporatedTo | date | – | Incorporation-date bounds. With no other filter, the last 7 days are used. |
onlyNewSinceLastRun | boolean | false | For schedules: only companies incorporated since the previous run that were not delivered before (named store hexadata-uk-companies-house). |
maxResults | integer | 100 | Hard cap on results and cost. |
includeDetails | boolean | false | Company profile, one extra request per company. |
includeOfficers | boolean | false | Officers, one extra request per company. |
includeRaw | boolean | false | Attach the original search hit. |
proxyConfiguration | object | off | Not needed. |
Getting your free API key (2 minutes): sign in or register at developer.company-information.service.gov.uk (GOV.UK One Login), open Manage applications → Create an application (environment Live), then Create new key of type REST with no IP restriction, and paste the key into apiKey. Each key allows 600 requests per 5 minutes; the Actor paces itself under that limit and waits when the API answers 429.
How large searches work: the Companies House advanced search pages up to 10,000 results per query. When a search has more matches, the Actor splits its incorporation-date range in halves until each part fits, so "every active company with SIC 62020" is just a matter of maxResults and time (about 2 requests per second).
Invalid input (missing key, bad SIC code, malformed date) stops the run before the first request, so it costs nothing.
Output example
Two real items from the runs saved in tests/ (2026-10-27). A new incorporation with includeDetails and includeOfficers (sicCodes: ["62012"], incorporatedFrom: "2026-10-20"):
{"id": "17530171","companyNumber": "17530171","name": "SAAD INNOVATION LAB LTD","status": "active","type": "ltd","typeLabel": "Private limited company","subtype": null,"incorporatedAt": "2026-10-20","dissolvedAt": null,"address": "6a Durham Road, Gloucester, Gloucestershire, GL4 3AS, United Kingdom","addressLine1": "6a Durham Road","addressLine2": null,"locality": "Gloucester","region": "Gloucestershire","postalCode": "GL4 3AS","addressCountry": "United Kingdom","country": "GB","sicCodes": ["62011", "62012"],"url": "https://find-and-update.company-information.service.gov.uk/company/17530171","jurisdiction": "england-wales","previousNames": [],"hasCharges": false,"hasInsolvencyHistory": false,"accountsNextDue": "2028-07-20","confirmationStatementNextDue": "2027-11-02","registeredOfficeInDispute": false,"officers": [{"name": "AHMAD, Mukhtar","role": "director","isCorporate": false,"appointedOn": "2026-10-20","resignedOn": null,"nationality": "Pakistani","countryOfResidence": "Pakistan","occupation": null,"appointmentsUrl": "https://find-and-update.company-information.service.gov.uk/officers/YihfmtlLeUSmKPFVR_qdQDt-llI/appointments"}],"activeOfficersCount": 1,"resignedOfficersCount": 0,"source": "Companies House (UK), public register via the Companies House API","scrapedAt": "2026-10-27T22:55:04.032Z"}
A plain search hit (searchQueries: ["software"], location: "London"):
{"id": "07438022","companyNumber": "07438022","name": "RICHWIND SOFTWARE DEVELOPMENT LIMITED","status": "active","type": "ltd","typeLabel": "Private limited company","incorporatedAt": "2010-11-12","address": "91 Tennyson Road, Stratford, London, E15 4DJ","locality": "London","postalCode": "E15 4DJ","country": "GB","sicCodes": ["62020"],"url": "https://find-and-update.company-information.service.gov.uk/company/07438022","source": "Companies House (UK), public register via the Companies House API","scrapedAt": "2026-10-27T22:54:45.686Z"}
Pricing & cost examples
$2.00 per 1,000 companies plus $1.00 per 1,000 detail requests (one request per company for includeDetails, one for includeOfficers). Pay per event: only companies saved to the dataset and detail requests actually made are charged; duplicates and failed runs are never billed. maxResults is a hard cost cap and Apify platform usage is included.
- A first look:
maxResults: 50≈ $0.10. - A daily "new companies" alert for two SIC codes with officers (about 100 companies a day) ≈ $0.30 per day, about $9 per month.
- Every active company in SIC 62020 in London (about 20,000) with profile ≈ $60.
Use with AI agents (MCP)
Every Apify Actor is available as a tool through the Apify MCP server. Add this server to Claude, Cursor, VS Code or any MCP client (OAuth sign-in on first use, or an Authorization: Bearer <APIFY_TOKEN> header):
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=hexadatalabs/uk-companies-house-scraper"}}}
Then ask, for example:
"List the software companies incorporated in Manchester in the last 7 days with their directors."
The agent calls the Actor with {"apiKey":"<your key>","sicCodes":["62012","62020"],"location":"Manchester","incorporatedFrom":"2026-10-20","includeOfficers":true} and reads name, incorporatedAt and officers. The Actor description and every input field start with "Use this when…" so tool selection works without extra prompting.
Pay with USDC (x402, no account needed)
AI agents can pay for this Actor directly with USDC through Apify's x402 support, with no Apify account: the agent buys a prepaid token from Apify AGI with a Coinbase Agentic Wallet (USDC on Base, minimum $1) and uses that token as a normal API token. This Actor runs with limited permissions, which is what makes it eligible. Current steps are in Apify's x402 guide:
npx -y awal auth login <email> && npx awal auth verify <code> # one-time wallet setup; then fund it with USDC and a little ETH on BaseTOKEN=$(npx awal x402 pay 'https://agi.apify.com/protocols/x402/prepaid-tokens?amount=1¤cy=usd' --max-amount 1000000 --json | jq -r .token)curl -s -X POST "https://api.apify.com/v2/acts/hexadatalabs~uk-companies-house-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \-d '{"apiKey":"<COMPANIES_HOUSE_KEY>","searchQueries":["software"],"location":"London","maxResults":50}'
Cost: $1 USDC ≈ 500 companies at this Actor's price (detail requests cost $1.00 per 1,000 on top); the token balance is a hard spending cap, and the token expires 14 days after purchase.
API & integrations
curl -X POST "https://api.apify.com/v2/acts/hexadatalabs~uk-companies-house-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"apiKey":"<COMPANIES_HOUSE_KEY>","searchQueries":["software"],"location":"London","maxResults":50}'
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("hexadatalabs/uk-companies-house-scraper").call(run_input={"apiKey": "<COMPANIES_HOUSE_KEY>", "sicCodes": ["62012"], "incorporatedFrom": "2026-10-20","includeDetails": True, "includeOfficers": True, "maxResults": 500,})for c in client.dataset(run["defaultDatasetId"]).iterate_items():print(c["companyNumber"], c["name"], c["incorporatedAt"], [o["name"] for o in c.get("officers", [])])
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('hexadatalabs/uk-companies-house-scraper').call({apiKey: '<COMPANIES_HOUSE_KEY>', sicCodes: ['62020'], location: 'Manchester', onlyNewSinceLastRun: true, maxResults: 1000,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((c) => `${c.incorporatedAt} · ${c.name} · ${c.postalCode}`).join('\n'));
Schedules and webhooks: create a daily Schedule in Apify Console with onlyNewSinceLastRun: true to receive each day's new incorporations, then add a webhook or integration (e-mail, Slack, Google Sheets, HubSpot, Make, Zapier) on the ACTOR.RUN.SUCCEEDED event.
Limitations & legal
- Source: the official Companies House Public Data API (
api.company-information.service.gov.uk), called with your own key; no HTML is scraped. Register information is Crown copyright, made available by Companies House for reuse under section 47 of the Copyright, Designs and Patents Act 1988; keep the attribution insource. Hexadata is not affiliated with Companies House. - Personal data: officers are named individuals and are returned only with
includeOfficers: true; their birth dates and correspondence addresses are never extracted. Use officer data only in line with UK GDPR and your lawful basis. - Rate limit: 600 requests per 5 minutes per key (about 2 per second). A run with
includeDetailsandincludeOfficersmakes three requests per company, so 1,000 companies take about 25 minutes; the Actor waits automatically when the API answers 429. - Search semantics:
searchQueriesandlocationuse the Companies House advanced search (word match on the name, free-text match on the registered office).locationis not a radius. - Result window: 10,000 results per search; larger searches are split by incorporation date automatically, which needs the incorporation-date filter to be meaningful (dissolved-date splitting is not implemented).
- If Companies House changes its response format and three consecutive pages lack the mandatory fields, the run fails with
SITE_LAYOUT_CHANGEDand nothing is charged.
Changelog
- 0.1.0 (2026-10-27): first release. Name, SIC, location, status, type and incorporation-date filters; automatic date splitting; optional profile and officers; incremental mode; dataset table view; MCP-ready descriptions.
Support
Open an issue in the Issues tab of this Actor (or e-mail Hexadata through the Apify profile). Issues are answered within 24 hours and confirmed bugs are fixed in a beta build within 48 hours.
En español
UK Companies House Scraper extrae empresas del registro mercantil oficial del Reino Unido (Companies House) mediante su API y tu clave gratuita: empresas nuevas, búsqueda por nombre, código SIC, localidad, estado, tipo y fecha de constitución, con domicilio registrado y, opcionalmente, perfil (cuentas, cargas, nombres anteriores) y directores. Divide búsquedas grandes automáticamente y tiene modo incremental para alertas diarias de empresas recién constituidas. Precio: $2.00 por cada 1,000 empresas más $1.00 por cada 1,000 consultas de detalle; maxResults limita el costo. Datos de personas (directores) solo si se piden.