UK Companies House Scraper
Pricing
from $1.00 / 1,000 companies
UK Companies House Scraper
Stream the full UK Companies House data snapshot and filter 5M+ companies by SIC code, status, location, and incorporation date. Fast, free, server-side filtering at scale.
Pricing
from $1.00 / 1,000 companies
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
UK Companies House Scraper
UK Companies House Scraper streams the official Companies House free company data snapshot — 5 million+ UK companies — and filters it server-side by SIC code, company status, legal type, postcode, county, and incorporation date, so you never have to download or parse the raw 500 MB file yourself.
| Filter the entire UK company register by up to ten criteria at once — SIC code prefix, SIC keyword, status, legal type, postcode/town/county/country, and incorporation date range — and get clean, structured JSON back in minutes. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor: Actor ID parsebird/uk-companies-house-scraper on Apify. Call it with the ApifyClient (from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/uk-companies-house-scraper").call(run_input={"companyStatuses": ["Active"], "sicCodePrefixes": ["62", "63"], "postTowns": ["LONDON"], "maxResults": 5000}); items = client.dataset(run["defaultDatasetId"]).list_items().items) — key inputs are snapshotMonth (string, default latest), companyStatuses (array, default ["Active"]), companyCategories (array), sicCodePrefixes (array of strings, e.g. ["62","63"]), sicKeywords (array of strings), nameContains (string), postCodePrefixes/postTowns/counties/countries (arrays), incorporatedSince/incorporatedBefore (YYYY-MM-DD), and maxResults (integer, 0 = unlimited); each output record has companyName, companyNumber, status, category, incorporationDate, address, sicCodes, accounts, mortgages, previousNames, confirmationStatement, url, and apiUrl; API docs at https://apify.com/parsebird/uk-companies-house-scraper/api and a token at https://console.apify.com/settings/integrations.
What does UK Companies House Scraper do?
Companies House publishes a free bulk snapshot of every live UK company, but it's a single ~500 MB ZIP containing a ~2 GB CSV with 5 million+ rows — not something you can filter by hand, and the Companies House REST API only supports per-company lookups, so scanning a whole industry sector means one HTTP request per company.
This actor solves both problems. It streams the ZIP straight from Companies House, decompresses and parses the CSV on the fly, applies your filters row-by-row, and stops as soon as it has enough matches — so a narrow query (a SIC code plus a city) can finish in a couple of minutes without ever downloading the full snapshot.
- 🔍 Filter by SIC code prefix or free-text keyword — industry classification down to the sub-code
- 📍 Filter by postcode prefix, post town, county, or country — from a single postcode district to all of Scotland
- 🏢 Filter by company status and legal type (Ltd, PLC, LLP, CIC, and 15+ others)
- 📅 Filter by incorporation date range — find newly registered companies or long-established ones
- 📛 Filter by company name substring
- ⚡ Stops early once
maxResultsis reached instead of always scanning the full register - 📊 Full company profiles: registered address, SIC codes, accounts and confirmation statement dates, mortgage/charge counts, and previous company names
- 🔗 Direct links to each company's Companies House page and REST API endpoint
- 📅 Runs on Apify's scheduler for recurring extracts, with full API access and export to JSON, CSV, or Excel
What data can you extract from Companies House?
| Field | Description |
|---|---|
companyName | Registered company name |
companyNumber | Unique Companies House registration number |
status | e.g. Active, Liquidation, In Administration |
category | Legal type, e.g. Private Limited Company, Limited Liability Partnership |
incorporationDate | Date of incorporation (YYYY-MM-DD) |
dissolutionDate | Dissolution date, if applicable |
address | Registered office address (line 1/2, post town, county, country, postcode) |
sicCodes | Up to 4 SIC industry classification codes with descriptions |
accounts | Accounts filing category, reference date, next/last due dates |
returns / confirmationStatement | Annual return / confirmation statement due dates |
mortgages | Counts of charges (total, outstanding, part-satisfied, satisfied) |
previousNames | Prior company names with the date each change took effect |
url / apiUrl | Direct links to the public register page and the Companies House REST API |
How to use UK Companies House Scraper
- Open the actor's Input tab on Apify.
- Choose your filters — for example, set SIC code prefixes to
62,63for IT companies and Post towns toLONDON. - Set Company status to
Active(the default) to skip liquidated or dissolved-in-progress companies. - Set Max results — start low (e.g.
1000) to preview matches before running an unlimited extraction. - Click Start and watch the run log for scan progress.
- Open the Dataset tab and export your results as JSON, CSV, or Excel — or pull them via the Apify API.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| snapshotMonth | string | No | latest | Snapshot month, format YYYY-MM. Companies House only keeps the current month online; an unavailable month throws an error listing what's actually available. |
| companyStatuses | array | No | ["Active"] | Keep only these statuses. Empty = all statuses. |
| companyCategories | array | No | [] | Keep only these legal types. Empty = all types. |
| sicCodePrefixes | array | No | [] | OR-matched SIC code prefixes, e.g. ["62","63"]. |
| sicKeywords | array | No | [] | OR-matched, case-insensitive substrings in SIC descriptions. |
| nameContains | string | No | "" | Case-insensitive substring match on company name. |
| postCodePrefixes | array | No | [] | OR-matched UK postcode outward-code prefixes, e.g. ["EC","SW1"]. |
| postTowns | array | No | [] | Exact (case-insensitive) match on registered post town. |
| counties | array | No | [] | Substring match on registered county. |
| countries | array | No | [] | Substring match on registered country (ENGLAND, SCOTLAND, WALES, NORTHERN IRELAND). |
| incorporatedSince | string | No | "" | Only companies incorporated on/after this date, YYYY-MM-DD. |
| incorporatedBefore | string | No | "" | Only companies incorporated on/before this date, YYYY-MM-DD. |
| maxResults | integer | No | 0 | Stop after this many matches. 0 = scan the full snapshot. |
| logEveryNRows | integer | No | 100000 | How often to log scan progress. |
All filters other than companyStatuses/companyCategories combine with AND logic; values within an array filter (e.g. multiple SIC prefixes) combine with OR logic.
Output example
{"companyName": "ACME TECHNOLOGIES LIMITED","companyNumber": "12345678","status": "Active","category": "Private Limited Company","incorporationDate": "2020-06-01","dissolutionDate": null,"address": {"line1": "10 Fintech Square","line2": null,"postTown": "LONDON","county": null,"country": "UNITED KINGDOM","postCode": "EC2A 1AB"},"sicCodes": ["62012 - Business and domestic software development"],"accounts": {"referenceDay": "30","referenceMonth": "6","nextDueDate": "2025-03-31","lastMadeUpDate": "2024-06-30","category": "TOTAL EXEMPTION FULL"},"mortgages": { "numCharges": 0, "numOutstanding": 0, "numPartSatisfied": 0, "numSatisfied": 0 },"previousNames": [],"confirmationStatement": { "nextDueDate": "2026-06-14", "lastMadeUpDate": "2025-06-01" },"url": "https://find-and-update.company-information.service.gov.uk/company/12345678","apiUrl": "https://api.company-information.service.gov.uk/company/12345678"}
Use cases
- Sales prospecting — pull every active company in a target industry (SIC prefix) and city for cold outreach or CRM import
- Market sizing — count how many companies of a given legal type or sector exist in a region
- New-business monitoring — filter by
incorporatedSinceto find recently registered companies before competitors reach them - Investor and compliance research — list all active PLCs, LLPs, or CICs nationwide
- Data enrichment — cross-reference a list of company names or postcodes against the full register
- Academic and journalistic research — analyze company formation and dissolution trends by sector or region
How it works
- Snapshot discovery — the actor reads the Companies House download index page and resolves the requested (or latest)
BasicCompanyDataAsOneFile-YYYY-MM-DD.zipsnapshot. - Streaming download — the ZIP is streamed directly from Companies House; nothing is written to disk.
- Streaming decompression — the CSV inside is decompressed on the fly, in lockstep with the download, so the actor can start emitting matches before the ZIP has finished downloading.
- Row-by-row filtering — each row is tested against every active filter (status, category, SIC, name, postcode, town, county, country, incorporation date) as it's parsed.
- Batch dataset writes — matching rows are normalized and pushed to the Apify dataset in batches of 500.
- Early stop — once
maxResultsmatches are saved, the actor closes the download immediately instead of scanning the remaining rows.
Because filtering happens while streaming, a narrow query (a SIC code plus a postcode prefix, for example) can finish in a couple of minutes. An unfiltered run has to scan and save every one of the 5 million+ rows on the register, which can take up to 20+ minutes and produce a multi-million-row dataset — start with a low maxResults to preview your filter first.
How much does it cost to scrape Companies House data?
This actor uses the Pay-Per-Event model — you're charged only for company records actually saved to your dataset, not for rows scanned.
| Event | Price per event | Price per 1,000 |
|---|---|---|
company-extracted | from $0.001 | from $1.00 |
Pricing scales down with your Apify plan tier (Free, Bronze, Silver, Gold — see the actor's Pricing tab for exact tier rates). Pulling 5,000 active IT companies in London, for example, costs roughly $5–7 depending on your plan. Apify's platform usage credits apply on top of any plan you're already on.
Is it legal to scrape Companies House data?
Yes. Companies House publishes this data specifically as a free, open bulk data product under the Open Government Licence, intended for exactly this kind of bulk reuse. This actor reads only that public snapshot — no login, scraping of rendered pages, or bypassing of access controls is involved. For general web scraping legality, see Apify's guide on the legality of web scraping. Always comply with UK GDPR and your own applicable data protection obligations when using extracted data for marketing or outreach.
Related Actors
- Pappers.fr Company Scraper — the French company registry equivalent (SIREN, directors, NAF codes)
- Website Contact Finder — pull emails, phone numbers, and social profiles once you have a list of companies
- Shopify Store Leads Scraper — find e-commerce leads to combine with Companies House filters
FAQ
How often does the snapshot update?
Companies House republishes the full snapshot around the 1st of each month. This actor always resolves to whichever snapshot is currently live unless you set snapshotMonth.
Can I get dissolved companies? No — the Companies House bulk snapshot only contains companies still on the live register, so there's no "Dissolved" status to filter by. For a specific dissolved company's history, use the Companies House REST API directly.
Why is my run scanning millions of rows even with a low maxResults?
The actor has to scan from the start of the file in company-name order, so a very narrow or rare filter combination (an obscure SIC code with rare status/location combinations) can require scanning further before finding enough matches. Broaden a filter or raise the log frequency to monitor progress.
Can I schedule recurring runs? Yes — use Apify's scheduler to re-run this actor daily, weekly, or monthly and catch newly incorporated companies automatically.
Can I access this via API? Yes — every run, dataset, and input is available through the Apify API and official client libraries for Python and JavaScript.
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("parsebird/uk-companies-house-scraper").call(run_input={"companyStatuses": ["Active"],"sicCodePrefixes": ["62", "63"],"postTowns": ["LONDON"],"maxResults": 5000,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["companyName"], item["companyNumber"])
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('parsebird/uk-companies-house-scraper').call({companyStatuses: ['Active'],sicCodePrefixes: ['62', '63'],postTowns: ['LONDON'],maxResults: 5000,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Found an issue or have a feature request? Use the actor's Issues tab on Apify — feedback shapes what gets built next.