UK Companies House Scraper avatar

UK Companies House Scraper

Pricing

from $2.00 / 1,000 company (result)s

Go to Apify Store
UK Companies House Scraper

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

Hexadata

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 hours ago

Last modified

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:

FieldTypeDescription
id / companyNumberstringCompany number (8 characters), unique
namestringRegistered name
statusstringactive, dissolved, liquidation, administration…
type / typeLabelstringltd / "Private limited company", plc, llp…
subtypestring | nullcommunity-interest-company, private-fund-limited-partnership
incorporatedAt / dissolvedAtstring | nullYYYY-MM-DD
addressstring | nullRegistered office in one line
addressLine1 / addressLine2 / locality / region / postalCode / addressCountrystring | nullRegistered office parts
countrystringGB
sicCodesstring[]UK SIC 2007 codes
urlstringCompany page on find-and-update.company-information.service.gov.uk
source, scrapedAtstringAttribution 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

FieldTypeDefaultDescription
apiKeysecret stringrequiredYour free Companies House REST API key (see below).
searchQueriesstring[][] (prefill ["software"])Words the company name must contain; one search per line.
companyNameExcludesstring–Words the name must not contain.
sicCodesstring[][]UK SIC 2007 codes (62012, 41100, 56101…).
locationstring– (prefill London)Registered-office town, county or postcode area.
companyStatusselectactiveactive, any, dissolved, liquidation, administration…
companyTypesstring[][]ltd, plc, llp, limited-partnership, private-limited-guarant-nsc…
incorporatedFrom / incorporatedTodate–Incorporation-date bounds. With no other filter, the last 7 days are used.
onlyNewSinceLastRunbooleanfalseFor schedules: only companies incorporated since the previous run that were not delivered before (named store hexadata-uk-companies-house).
maxResultsinteger100Hard cap on results and cost.
includeDetailsbooleanfalseCompany profile, one extra request per company.
includeOfficersbooleanfalseOfficers, one extra request per company.
includeRawbooleanfalseAttach the original search hit.
proxyConfigurationobjectoffNot 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 Base
TOKEN=$(npx awal x402 pay 'https://agi.apify.com/protocols/x402/prepaid-tokens?amount=1&currency=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 ApifyClient
client = 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.

  • 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 in source. 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 includeDetails and includeOfficers makes three requests per company, so 1,000 companies take about 25 minutes; the Actor waits automatically when the API answers 429.
  • Search semantics: searchQueries and location use the Companies House advanced search (word match on the name, free-text match on the registered office). location is 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_CHANGED and 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.