DEV Community

Devil Scrapes
Devil Scrapes

Posted on

Companies House UK Scraper: lead lists by town, SIC code and incorporation date

Quick answer

The Companies House UK Scraper turns the UK company register into lead lists: give it a town, one or more SIC codes, a status and an incorporation date window, and it returns one row per company with number, name, status, incorporation date, company type, SIC codes and registered office address. Optionally it adds SIC descriptions and the officers list. It also does plain name search for KYC checks. No Companies House API key, no registration, no rate-limit maths. Pricing is pay-per-result, $0.20 per run plus $0.003 per company, $3.20 per 1,000 companies, and the details and officers enrichment costs nothing extra.

Isn't Companies House data already free?

The data is free. Getting it into a spreadsheet is not. The official REST API needs a registered developer account and an API key, and it is rate limited, so a lead list of a few thousand companies with officers turns into a small engineering project: auth, paging, throttling, retries and stitching three endpoints together per company. The bulk data product is a monthly snapshot of every company in the UK, which is the wrong shape when you want "active software companies in Leeds incorporated this year".

The register's own website already answers that question. Its advanced search filters by registered-office town, SIC code, status and incorporation dates in one go. We drive that search and return the rows.

Companies House's advanced search filters by town, SIC code, status and incorporation date at once, which is exactly the shape of a UK lead list.

What makes the register awkward to scrape well?

  • Status is free text. The site shows "Active", "Dissolved", "Liquidation", "Active - Proposal to Strike off" and more. We normalise to active, dissolved, liquidation or other in status and keep the original in statusDetail, so you can filter cleanly and still see the nuance.
  • Search matches previous names. Search "Acme" and you get companies that were once called Acme. We return those names in previousNames, so you can tell a match on today's name from a historical one.
  • Results come 20 per page and stop at 10,000. We page automatically and stop when results end or your maxResults is reached.
  • One company can surface in several queries. We dedupe on companyNumber across every query and page.
  • Officers are personal data. We return what the register publishes: name, role, appointment and resignation dates, nationality, country of residence and date of birth as month and year only (dobMonthYear).

What the Actor gives you

One row per company: companyNumber, name, status, statusDetail, incorporatedOn, dissolvedOn, companyType, sicCodes, sicDescriptions, address, previousNames, url, officers and scrapedAt. Each officer carries name, officerId, role, appointedOn, resignedOn, nationality, countryOfResidence, dobMonthYear and address.

{
  "companyNumber": "13106211",
  "name": "ISOROBOT LIMITED",
  "status": "active",
  "statusDetail": "Active",
  "incorporatedOn": "2020-12-31",
  "dissolvedOn": null,
  "companyType": "Private limited company",
  "sicCodes": ["62012", "62020", "70229"],
  "address": "20 Syke Lane, Scarcroft, Leeds, England LS14 3BQ",
  "previousNames": [],
  "url": "https://find-and-update.company-information.service.gov.uk/company/13106211",
  "officers": null,
  "scrapedAt": "2026-10-11T09:00:00Z"
}
Enter fullscreen mode Exit fullscreen mode

Input: mode (search for company-name queries, advanced for filters), town, sicCodes (4 or 5 digits, for example 62020), status (active, dissolved, liquidation or any), incorporatedFrom and incorporatedTo, the includeDetails and includeOfficers switches, and maxResults up to 10,000.

Honest limitations ๐Ÿšง

Public search and company-page data only: no accounts, filing history, charges or persons with significant control. Officers cover the first page of appointments (up to 35). The incorporation end-date filter is unit-tested but has not yet been confirmed against the live site. A filter that matches nothing is a successful run that costs only the start fee.

FAQ

Do I need a Companies House API key?
No. Give us names or filters and we do the rest.

What about blocks and rate limits?
That's our job. Every request carries a browser-grade TLS fingerprint through curl-cffi, retries with exponential backoff on 408, 429 and 5xx up to 5 attempts per page, honours Retry-After, and rotates the Apify Proxy session on every block.

Do details and officers cost more?
No. Each adds one request per company on our side and no extra charge on yours.

How does pricing work?
$0.20 per run plus $0.003 per company: $3.20 per 1,000 companies.

โ†’ Companies House UK Scraper on Apify


Built by Devil Scrapes. We handle the paging, the fingerprints, the proxies and the retries, so your lead list stays clean. ๐Ÿ˜ˆ

Top comments (1)

Collapse
 
kevin_hall profile image
Kevin Hall •

Incorporation date as a filter is underrated as a signal. "Active software companies in Leeds incorporated this year" is a list of founders who do not have a bank, an accountant or a payroll provider yet, and the officers list gives you the name without a second lookup.

The piece I would pair it with is the people side: the same founders usually show up in career data a few weeks later with "founder" in the title and the new company as the current position, which is where you get the role history and whether they came from a large employer. The register says the company exists; the profile says who they were before.