If you've ever needed a list of UK companies (suppliers to check, leads in a sector, or the directors behind a competitor), you've probably copied rows out of the Companies House website one at a time. The data is public and comes from a good official API, but that API needs a key, pagination and some JSON wrangling.
This guide shows how to get the same data into a spreadsheet without writing any code, using a ready-made Apify Actor that calls the official Companies House Public Data API for you.
Disclosure: I built the Actor used here. Everything it returns comes from Companies House's own API.
What you get
For each company:
- company number, name, status (active/dissolved) and type (ltd, plc…)
- incorporation and dissolution dates
- SIC codes (industry)
- registered address and postcode
- next accounts and confirmation statement due dates
- flags for charges and insolvency history
- optionally: current and past officers (directors, secretaries) and the 25 most recent filings
Step 1: Open the Actor
Go to Companies House Scraper on Apify and click Try for free. You'll need a free Apify account. You don't need your own Companies House key, but you can paste one in for dedicated rate limits.
Step 2: Enter what you're looking for
You can search by name/keyword, or paste exact company numbers. Here's the input I used:
{
"searchQueries": ["tesco"],
"maxItems": 5,
"includeOfficers": true
}
Other useful switches:
- Only active companies: skips dissolved and liquidated ones
- Include filing history: adds recent filings
- Incremental mode: on a schedule, returns only companies you haven't already received (handy for watching new incorporations matching a keyword)
Step 3: Run it and look at the output
That run returned 5 companies in about 8 seconds. Here's the first record, trimmed to the first two officers:
{
"companyNumber": "00445790",
"url": "https://find-and-update.company-information.service.gov.uk/company/00445790",
"name": "TESCO PLC",
"status": "active",
"type": "plc",
"incorporatedOn": "1947-11-27",
"sicCodes": ["47110"],
"registeredAddress": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA, United Kingdom",
"postcode": "AL7 1GA",
"jurisdiction": "england-wales",
"accountsNextDue": "2027-08-26",
"confirmationStatementNextDue": "2027-07-02",
"hasCharges": false,
"hasInsolvencyHistory": false,
"officers": [
{ "name": "TAYLOR, Christopher Jon", "role": "secretary", "appointedOn": "2025-04-14", "resignedOn": null },
{ "name": "BETHELL, Melissa", "role": "director", "appointedOn": "2018-09-24", "resignedOn": null, "nationality": "British" }
]
}
Step 4: Export to a spreadsheet
In the run's Storage → Dataset tab, click Export and choose CSV or Excel. Fields are flat, so they open as clean columns. To send rows straight to Google Sheets, use Apify's Google Sheets integration on the Actor's Integrations tab, or schedule the Actor and add the integration so the sheet updates itself.
What it costs
Pricing is pay-per-event: $0.003 per run start, $0.008 per company, and $0.02 per enriched company (with officers/filings). So 100 basic company records cost about $0.80 plus the start fee. Apify's free plan includes monthly usage credit, which covers small tests.
Ideas
- Lead lists: search a sector keyword ("coffee roasters", "solar"), keep active companies, export to CSV.
- Supplier checks: paste company numbers, turn on officers and filings, and look for insolvency flags.
- New-company watch: schedule daily with incremental mode on.
A note on personal data: officer names are public register data, but if you use them for outreach, UK GDPR still applies (legitimate interest, an opt-out, and no special-category data).
Questions or missing fields? Leave a comment, I'm actively improving it.
Top comments (0)