Companies House API Scraper: UK Company Directors, SIC Codes and Filings

One fully enriched row per UK company: registered details, SIC codes, directors and officers, and the 25 most recent filings, from the official register.

Run on Apify →See pricing

What it does

The Companies House website is fine for looking up one company. It is slow when you need two hundred, and the official API makes you stitch together separate calls for the profile, the officers and the filing history, then deal with rate limits.

Companies House Enrichment does that stitching for you. Give it a list of company numbers, a free-text name search, or advanced filters (SIC codes, status, incorporation date range, registered-office location) and it returns one row per company with the registered address, status, incorporation date, SIC codes, current and resigned officers (name, role, appointment and resignation dates, occupation, nationality) and the 25 most recent filings (date, category, type, description). Data comes from the official Companies House API, so it is as current as the register itself.

It suits lead generation ('active scaffolding companies in Manchester incorporated since 2020'), KYC and supplier checks, and bulk enrichment of company numbers already in a spreadsheet. Privacy is built in: officers' dates of birth and personal addresses are never returned, only statutory business-register fields.

How it works

  1. If you pass companyNumbers, those exact companies are enriched; otherwise the actor runs an advanced search on SIC code, status, incorporation dates and location, or a plain name search with searchTerms.
  2. For each company it calls the official Companies House API for the profile, then (if enabled) the officers list and the filing history.
  3. Responses are merged into one clean row; officers are capped at 100 per company and filings at the 25 most recent.
  4. Requests stay within the Companies House rate limit of 600 requests per 5 minutes (a fully enriched company uses 3), and you can add your own free API key for dedicated throughput.
  5. Mistyped or missing company numbers are skipped and never charged, and the run stops cleanly at maxResults or your spend limit.

Input example

A typical run input (JSON). Every field is also available as a form in the Apify console.

{
  "sicCodes": [
    "43991"
  ],
  "companyStatus": "active",
  "incorporatedFrom": "2020-01-01",
  "location": "Manchester",
  "maxResults": 200,
  "includeOfficers": true,
  "includeFilings": true
}
All input fields
FieldTypeRequiredDefaultWhat it does
companyNumbersarraynoEnrich exactly these companies (e.g. 09876543). Takes priority over search terms and filters.
searchTermsarraynoFree-text company name search, e.g. 'plumbing manchester'. Used only when no company numbers and no advanced filters are given.
sicCodesarraynoFilter by Standard Industrial Classification codes, e.g. 43991 for scaffolding. Combine with status/date/location filters for targeted lead lists.
companyStatusstringno"any"Only companies in this state. 'any' disables the filter.
incorporatedFromstringnoEarliest incorporation date, YYYY-MM-DD. Great for 'new companies' lead lists.
incorporatedTostringnoLatest incorporation date, YYYY-MM-DD.
locationstringnoRegistered-office location filter, e.g. 'Manchester'.
maxResultsintegerno100Stop after this many companies. You are charged per company: 1,000 companies = $5.00. If you set a run budget (max total charge), the actor automatically stays inside it.
includeOfficersbooleannotrueAttach current and resigned officers (name, role, dates, occupation, nationality). No dates of birth or personal addresses are ever returned.
includeFilingsbooleannotrueAttach the 25 most recent filings (date, category, type, description).
apiKeystringnoOptional: bring your own free key from developer.company-information.service.gov.uk for dedicated throughput (600 requests/5 min per key). Without it, the actor's shared key is used.

Output example

Each row is one company, with officers and filings attached as nested lists (summarised here):

companyNumbernamestatusincorporatedOnregisteredAddresssicCodesofficersfilings
12345678EXAMPLE SCAFFOLDING LTDactive2019-03-141 Example Street, Unit 4, Manchester, M1 2AB, England43991, 439992 active, 1 resigned (names, roles, dates)25 most recent (date, type, description)
87654321SAMPLE JOINERY (LEEDS) LTDactive2021-09-0222 Demo Road, Leeds, LS1 4XY, England433201 active (name, role, dates)25 most recent (date, type, description)

Pricing

Pay per event: you are charged only for the results you receive, with no subscription. Set a maximum total charge on any run and it stops cleanly at the cap.

Charged forWhenPricePer 1,000Worked example
Enriched companyOne UK company with profile, officers and filing history from the official register.$0.005$51,000 companies = $5.00; 100 companies = $0.50
Actor Start (platform start fee)Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).$0.00005—One run at up to 1 GB = $0.00005 (charged as one event)

Prices are read from the live Apify Store listing when this page is built. The listing is always authoritative.

Try Companies House Enrichment on Apify. Pay only for the results you get.

Run on Apify →

Use cases

New-company lead lists

Filter by SIC code, active status and incorporatedFrom to find businesses formed recently in a town or city. The officers list gives you the directors' names and roles to address outreach properly.

Bulk enrichment of a company list

Paste the company numbers from your CRM or a supplier sheet into companyNumbers and get status, SIC codes, directors and recent filings back in one dataset, instead of opening each record by hand.

Due diligence and supplier checks

See at a glance whether a company is active, dissolved or in liquidation, who its current and resigned officers are, and what it has filed lately, such as accounts or confirmation statements.

Trade and sector research

Combine several SIC codes with a location filter to map an industry in a region, then use incorporation dates to see how many firms were formed in each period.

How it compares

ActorForge Companies House EnrichmentCompanies House website by handCalling the Companies House API yourself
Data sourceOfficial Companies House APIOfficial registerOfficial Companies House API
Profile, officers and filings in one rowYesNo, separate pagesNo, separate endpoints to combine
Search by SIC code, status, dates and locationYesPartialYes, with your own code
Bulk list of company numbersYesNoYes, with your own code
Officers' dates of birth and personal addressesNever returnedShown as published on each pageRaw fields, you decide what to keep
Rate-limit handlingBuilt in, optional own keyNot applicableYou build it
Cost$5 per 1,000 companiesFreeFree API, your development time

For a handful of companies the free website is all you need, and developers with time to spare can call the free API directly. This actor earns its keep when you need hundreds of enriched rows in a spreadsheet-ready format without writing the glue code.

Limits and honest notes

FAQ

How do I get a list of directors for many UK companies at once?

Put the company numbers into companyNumbers and keep includeOfficers on. Each output row then has an officers list with name, role, appointment and resignation dates, occupation and nationality, up to 100 officers per company.

Can I search Companies House by SIC code and incorporation date?

Yes. Use sicCodes (for example 43991 for scaffolding) with companyStatus, incorporatedFrom, incorporatedTo and location. These advanced filters take over from searchTerms, and companyNumbers takes priority over both.

Does it return directors' dates of birth or home addresses?

No. Dates of birth and personal addresses are never returned. You get only statutory business-register fields: name, role, dates, occupation and nationality.

Which companies are covered?

Companies on the official Companies House register: UK-registered companies in England, Wales, Scotland and Northern Ireland. Overseas companies not on the register are not covered.

Do I need my own Companies House API key?

No, a shared key is used by default. You can add your own free key from developer.company-information.service.gov.uk in apiKey for dedicated throughput of 600 requests per 5 minutes, which is roughly 180 fully enriched companies per 5 minutes.

How much does it cost to enrich 1,000 companies?

$5.00, at $0.005 per enriched company with profile, officers and filings included. 100 companies cost $0.50. Companies that are not found are never charged.

Use it from code

Run the actor through the Apify API with the input above.

cURL

curl -X POST "https://api.apify.com/v2/acts/actor-forge~uk-companies-house-enrichment/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sicCodes": ["43991"], "companyStatus": "active", "incorporatedFrom": "2020-01-01", "location": "Manchester", "maxResults": 200, "includeOfficers": true, "includeFilings": true}'

JavaScript (Node.js)

// Node.js 18+ (built-in fetch). Set APIFY_TOKEN in your environment.
const input = {
  "sicCodes": [
    "43991"
  ],
  "companyStatus": "active",
  "incorporatedFrom": "2020-01-01",
  "location": "Manchester",
  "maxResults": 200,
  "includeOfficers": true,
  "includeFilings": true
};

const res = await fetch(
  "https://api.apify.com/v2/acts/actor-forge~uk-companies-house-enrichment/run-sync-get-dataset-items",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.APIFY_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(input),
  }
);
const items = await res.json();
console.log(items.length, items[0]);

Python

# pip install apify-client   (set APIFY_TOKEN in your environment)
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "sicCodes": [
        "43991"
    ],
    "companyStatus": "active",
    "incorporatedFrom": "2020-01-01",
    "location": "Manchester",
    "maxResults": 200,
    "includeOfficers": True,
    "includeFilings": True
}

run = client.actor("actor-forge/uk-companies-house-enrichment").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

The run-sync-get-dataset-items endpoint waits for the run (up to 5 minutes) and returns the dataset rows directly. For longer runs, start the run asynchronously and read the dataset when it finishes, as the Python example does. Replace APIFY_TOKEN with your own token from the Apify console.

Step-by-step guides

How to Export UK Company Directors from Companies House in Bulk

Give Companies House Enrichment a list of company numbers or a SIC code, status and location filter, keep includeOfficers on, then flatten the…

Related actors

UK Planning Applications Scraper — 15 Councils, Weekly Leads

New and decided UK planning applications (applications for planning permission) from 15 council portals in one clean dataset: reference, proposal…

$3 per 1,000 · planning application

Startup Funding Rounds Tracker — Recently Funded (SEC Form D)

Track recently funded US startups from official SEC Form D filings: company, amount raised and offered, round date, industry, exemption, business…

$10 per 1,000 · filing result

Business Places Data — Google Maps Alternative, 80M+ POIs

Business leads by city from open Overture Maps data: name, category, address, lat/lon, phone, website, email, socials and brand for 80M+ places…

$3 per 1,000 · area query

Try Companies House Enrichment on Apify. Pay only for the results you get.

Run on Apify →

More Business Leads & Company Data tools · All actors