Companies House [$4💰] UK Companies, Directors, PSCs + Emails
Pricing
from $4.00 / 1,000 companies
Companies House [$4💰] UK Companies, Directors, PSCs + Emails
Scrape UK Companies House: company profiles, directors, PSCs (owners), filing history, charges, overdue flags and a lead score. Search by keyword, SIC code, location or incorporation date, or paste company numbers. Optional confirmed website and email, director rows, new-company monitoring.
Pricing
from $4.00 / 1,000 companies
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
18
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Companies House Scraper - UK Companies, Directors, PSCs & Emails
Turn the UK Companies House register into B2B lead lists. Pull every company in an industry (SIC code), town and incorporation window, or paste a list of company numbers, and get one clean row per company: profile, directors, owners (PSCs), filing history, charges, overdue flags and a lead score. Switch on email enrichment and each active company also gets its own website, contact emails and phone numbers, confirmed against the company number printed on that website. No API key, no login, pay per result.
| Input | Rows you get |
|---|---|
Keyword (plumbing) + filters | One company row per match, paged through the advanced search |
Filters only (SIC 62012 + Manchester + incorporated since 2026-01-01) | Every company matching the filters, no keyword needed |
Company numbers (00445790, SC311560) | That company, fetched directly |
| Companies House URLs | Company pages, keyword searches or advanced-search result pages |
| Optional: one row per director | A flat type: "officer" row per active officer, ready for a CRM |
Pure HTTP against the public GOV.UK register. No browser, no Companies House API key.
How it works

- Collect. Keywords and filters run the register's advanced search and walk every results page. Company numbers and URLs are fetched directly. Numbers that lost their leading zeros in a spreadsheet (
445790) are restored (00445790). - Read the company. The company page gives status, type, dates, registered office, SIC codes, previous names and the accounts and confirmation-statement deadlines. Its tab bar tells us whether the company has charges or an insolvency history, at no extra cost.
- Read the people and papers, in parallel. Officers (all pages, 35 per page), PSCs and PSC statements, filing history and charges, each switchable.
- Find the website (optional). First by name, then by trying the UK domains the name suggests. A site is only accepted when it shows the company number, the registered-office postcode or the full registered name with its "Ltd". UK companies must print their number on their website, and the register refuses duplicate names, so a namesake's site cannot slip through. Emails, phones and social links are then read from the confirmed site.
- Score and push. Each row gets a 0-100 lead score with the signals behind it, and lands in the dataset. Monitoring mode remembers what it returned so the next run outputs only new companies.
Why this scraper
| Capability | Typical Companies House actors | This actor |
|---|---|---|
| Company profile, SIC codes, registered office | ✅ | ✅ |
| Search on filters alone (SIC + town + dates, no keyword) | partial | ✅ |
| Directors with officer id, DOB (month/year), nationality, residence | partial | ✅ |
| Identity-verification status for officers and PSCs | ❌ | ✅ |
| PSCs with nature of control as text and register codes | partial | ✅ |
| Corporate PSC details (legal form, governing law, registration number) | ❌ | ✅ |
| PSC statements kept apart from people | ❌ | ✅ |
| Accounts and confirmation-statement deadlines with overdue flags | partial | ✅ |
| Charges and insolvency flags on every row (no extra request) | ❌ | ✅ |
| Filing history with PDF links and page counts | partial | ✅ opt-in |
| Charges with persons entitled and totals | partial | ✅ opt-in |
| Company website and email, confirmed by company number | ❌ | ✅ opt-in |
| One flat row per active director for CRM import | partial | ✅ opt-in |
| Monitoring mode: only companies not seen before | partial | ✅ |
| Lead score with the reasons behind it | partial | ✅ |
| Needs a Companies House API key | sometimes | never |
Use cases
| Who | What they do with it |
|---|---|
| Sales and lead-gen teams | Every active company in a SIC code and town, with directors, a confirmed website and email, sorted by lead score |
| Accountants, banks, insurers, agencies | A daily feed of new incorporations in their patch (monitoring mode + incorporated-from date + schedule) |
| KYC, KYB and compliance | Directors, owners (PSCs), nature of control, identity-verification status, charges and insolvency flags |
| Credit and risk | Overdue accounts and confirmation statements, outstanding charges, insolvency history |
| Researchers and analysts | Formation and dissolution trends by industry, region and date |
| Data teams | Enrich a CRM from a column of company numbers |
Input
| Field | Type | Default | What it does |
|---|---|---|---|
searchQueries | array | ["packaging"] | Keywords matched against the company name. Leave empty to search on filters alone |
companyNumbers | array | [] | Exact company numbers (00445790, SC311560); leading zeros restored |
startUrls | array | [] | Company pages, keyword searches or advanced-search result URLs |
companyNameExcludes | string | none | Drop names containing this text |
status | array | ["active"] | active, dissolved, liquidation, administration, … |
companyType | array | all | ltd, plc, llp, limited-partnership, community-interest-company, … |
sicCodes | array | all | 4-5 digit SIC codes, e.g. 62012, 43220 |
location | string | anywhere | Registered office contains this town, county or postcode |
incorporatedFrom / incorporatedTo | string | none | Incorporation date range, YYYY-MM-DD |
dissolvedFrom / dissolvedTo | string | none | Dissolution date range, YYYY-MM-DD |
includeOfficers | boolean | true | Officers array plus officer, director and resignation counts |
maxOfficerPages | integer | 3 | Officer pages per company (35 per page) |
includePscs | boolean | true | PSCs and PSC statements |
includeFilingHistory | boolean | false | Recent filings with PDF links |
maxFilings | integer | 25 | Filings kept per company |
includeCharges | boolean | false | Charges and charge totals (only for companies that have charges) |
emitOfficerRecords | boolean | false | Also output one row per active officer |
enrichEmails | boolean | false | Confirmed website, emails, phones and socials for active companies |
monitoringMode | boolean | false | Output only companies not returned by an earlier run of the same search |
maxItems | integer | 1000 | Cap on company rows (officer rows not counted) |
maxConcurrency | integer | 10 | Companies processed in parallel |
proxy | object | Apify residential (GB) | Proxy settings |
Example: new software companies in Manchester, with leads
{"sicCodes": ["62012"],"location": "Manchester","incorporatedFrom": "2026-01-01","status": ["active"],"enrichEmails": true,"emitOfficerRecords": true,"monitoringMode": true,"maxItems": 500}
Example: enrich a list of company numbers
{"companyNumbers": ["00445790", "09446231", "SC311560"],"includeCharges": true,"includeFilingHistory": true,"maxFilings": 10}
Output
One row per company (type: "company"). With emitOfficerRecords on, also one row per active officer (type: "officer"). Every company row carries the same core fields in the same order; values the register does not have are null or [], so your columns stay stable between runs.
type: "company" (real row, trimmed to one officer and one PSC)
{"type": "company","source": "companies-house","companyNumber": "02095358","companyName": "T.M. WEST PLUMBING SERVICES LIMITED","profileUrl": "https://find-and-update.company-information.service.gov.uk/company/02095358","companyStatus": "Active","companyType": "Private limited Company","incorporatedOn": "1987-02-02","dissolvedOn": null,"registeredOfficeAddress": "Unit 5a New Craven Gate Ind Est, New Craven Gate, Leeds, West Yorkshire, LS11 5NF","isActive": true,"companyAgeYears": 39.6,"sicCodes": [{ "code": "43220", "description": "Plumbing, heat and air-conditioning installation" }],"sicCodeList": ["43220"],"previousNames": [{ "name": "DETOUREAGER LIMITED", "period": "02 Feb 1987 - 10 Mar 1987" }],"accountsNextMadeUpTo": "2026-03-31","accountsNextDue": "2026-12-31","accountsLastMadeUpTo": "2025-03-31","accountsOverdue": false,"confirmationStatementNextDate": "2027-06-30","confirmationStatementNextDue": "2027-07-14","confirmationStatementLastMadeUpTo": "2026-06-30","confirmationStatementOverdue": false,"hasCharges": true,"hasInsolvencyHistory": false,"leadScore": 100,"leadSignals": ["active", "accountsOnTime", "confirmationOnTime", "noInsolvencyHistory", "hasActiveDirector","mailableAddress", "websiteFound", "emailFound", "emailOnWebsiteDomain"],"officersCount": 8,"activeOfficersCount": 2,"directorsCount": 2,"officersOnRegister": 8,"resignationsOnRegister": 6,"officers": [{"name": "CAMERON, Dean Douglas","officerId": "A6kuUtsbdDtKwXeUldVV73EHsKc","role": "Director","status": "Active","appointedOn": "2024-03-13","appointedBefore": false,"resignedOn": null,"dateOfBirth": "May 1994","nationality": "British","countryOfResidence": "Scotland","occupation": null,"correspondenceAddress": "Unit 5a New Craven Gate Ind Est, New Craven Gate, Leeds, West Yorkshire, LS11 5NF","identityVerificationStatus": "Verified Verification requirements complete","identityVerificationDue": null,"isCorporateOfficer": false,"placeRegistered": null,"registrationNumber": null}],"pscCount": 1,"pscsOnRegister": 1,"pscStatementsOnRegister": 0,"pscs": [{"name": "T.M West Trading Ltd","kind": "corporate-entity","status": "Active","notifiedOn": "2024-03-13","natureOfControl": ["Ownership of shares – 75% or more", "Ownership of voting rights - 75% or more","Right to appoint or remove directors"],"natureOfControlCodes": ["ownership-of-shares-75-to-100-percent", "voting-rights-75-to-100-percent","right-to-appoint-and-remove-directors"],"legalForm": "Private Company Limited By Shares","governingLaw": "Law Of England And Wales","placeRegistered": "Companies House England And Wales","registrationNumber": "15236836","incorporatedIn": "United Kingdom"}],"pscStatements": [],"website": "https://tmwest.co.uk","websiteMatchedBy": "postcode","websiteCandidate": null,"email": "service@tmwest.co.uk","emails": ["service@tmwest.co.uk"],"phones": ["01132471888", "+441132471888"],"socials": {"facebook": ["https://facebook.com/tmwest1906"],"instagram": ["https://instagram.com/tm_west1906"],"linkedin": ["https://uk.linkedin.com/company/tm-west-plumbing-services-limited"]},"scrapedAt": "2026-09-27T20:11:50.762Z"}
With includeFilingHistory: lastFilingDate, lastFilingType and filingHistory[] (date, type, description, documentUrl, documentId, pages). With includeCharges: chargesTotal, chargesOutstanding, chargesSatisfied, chargesPartSatisfied and charges[] (chargeId, title, status, satisfiedOn, createdOn, deliveredOn, personsEntitled, particulars, url).
type: "officer"
Every officer field above, plus companyName, companyNumber, companyStatus, companyUrl, companyWebsite and companyEmail. Only active officers get a row.
Dataset views
The Storage tab (and the API, with ?view=) offers three ready-made tables: Companies, Leads (website and email) and Officer rows.
Key output fields
| Group | Fields |
|---|---|
| Identity | companyNumber, companyName, profileUrl, previousNames[] |
| Status | companyStatus, isActive, companyType, incorporatedOn, dissolvedOn, companyAgeYears |
| Industry and place | sicCodes[], sicCodeList[], registeredOfficeAddress |
| Deadlines | accountsNextMadeUpTo, accountsNextDue, accountsLastMadeUpTo, accountsOverdue, confirmationStatementNextDate, confirmationStatementNextDue, confirmationStatementLastMadeUpTo, confirmationStatementOverdue |
| Risk | hasCharges, hasInsolvencyHistory, charges[] and totals (opt-in) |
| People | officers[], officersOnRegister, resignationsOnRegister, activeOfficersCount, directorsCount |
| Owners | pscs[], pscStatements[], pscCount, pscsOnRegister, pscStatementsOnRegister |
| Contact (opt-in) | website, websiteMatchedBy, websiteCandidate, email, emails[], phones[], socials |
| Scoring | leadScore (0-100), leadSignals[] |
Pricing
Pay per event, no start fee, no monthly rental.
| Event | When it is charged | Price |
|---|---|---|
| Company | One company row in the dataset | $0.004 |
| Officer row | One type: "officer" row, only with emitOfficerRecords on | $0.002 |
| Contact email | A company's email from a confirmed website, only with enrichEmails on | $0.05 |
Companies skipped by monitoring mode, websites that could not be confirmed, and companies with no email found are never charged. Set a maximum charge on the run for a hard cap on spend.
Monitoring mode
With monitoringMode on, the actor stores every company number a search has returned in a named key-value store in your account (companies-house-monitoring) and skips those companies on later runs, before fetching them, so they cost nothing. Each distinct search (keywords, company numbers and filters) keeps its own memory. Add an incorporatedFrom date, sicCodes and location, then schedule the run daily in Apify Schedules: each run returns only the companies registered since the last one.
FAQ
Do I need a Companies House API key? No. The actor reads the public register website, so there is no key, no registration and no rate-limit sign-up.
How is the website confirmed?
A website counts only when one of its pages (home, contact, about) shows the company's registered number, its registered-office postcode, or its full registered name including the legal form ("… Ltd"). UK companies must show their number on their website, and Companies House refuses a name that is already taken, so each of these points to one company. websiteMatchedBy says which one matched.
What is websiteCandidate?
A site found by name that showed none of the three. It is often a different company with a similar name, so no email is taken from it and nothing is billed. It is there in case you want to check it by hand.
How many companies get an email? It depends on the sample. Large brands are usually found; small local firms often have no website, or a site that does not show the number, postcode or registered name. On a test of 20 established Leeds plumbing firms, 4 had a confirmed website and 3 of those an email. Misses are never billed.
Can I search without a keyword?
Yes. Leave searchQueries empty and set at least one of sicCodes, location, companyType or a date range. Status alone is not enough: it matches millions of companies.
Does every company have officers and PSCs?
Most limited companies do. Listed PLCs are exempt from the PSC register, so their pscs is empty. Some partnership types list officers differently. An empty array reflects the register, not a failed scrape.
Is the date of birth complete? No. Companies House publishes only the month and year of birth.
Why is occupation usually null?
The register no longer shows occupation on the officers list. The field is kept so your columns do not change if it returns.
What about companies with hundreds of officers?
officers holds the first maxOfficerPages pages (active officers come first). officersOnRegister and resignationsOnRegister are the register's own totals and are always complete.
Support
- Found a bug or need a field? Open an issue on the actor's Issues tab.
- Direct contact: muhamed.didovic@gmail.com
Additional services
- Custom output shape, extra fields or one-off datasets: muhamed.didovic@gmail.com
- A similar scraper for another company registry (Irish CRO, OpenCorporates, …)? Send an email.
- API access without the Apify fee, for a usage fee: muhamed.didovic@gmail.com
Explore more scrapers
See the other actors on memo23's Apify profile: B2B directories, job boards, real estate, social media and more. Pairs well with the Europages Scraper for a UK and EU B2B data stack.
🤖 For AI Agents & LLM Apps
Compact reference for agents calling this actor through the Apify MCP server or the Apify API (actor: memo23/companies-house-scraper).
Purpose: UK Companies House register as structured rows: company profile, directors, PSCs, deadlines with overdue flags, charges and insolvency flags, lead score; optionally filing history, charges, a confirmed website and contact email, and one row per director. No API key.
Minimal input:
{ "searchQueries": ["packaging"], "maxItems": 25 }
Filters only: { "searchQueries": [], "sicCodes": ["62012"], "location": "Leeds", "maxItems": 25 }. By number: { "companyNumbers": ["00445790"] }.
Output: type: "company" rows with companyNumber, companyName, profileUrl, companyStatus, isActive, companyType, incorporatedOn, dissolvedOn, companyAgeYears, registeredOfficeAddress, sicCodes[] {code, description}, sicCodeList[], previousNames[] {name, period}, accountsNextMadeUpTo, accountsNextDue, accountsLastMadeUpTo, accountsOverdue, confirmationStatementNextDate, confirmationStatementNextDue, confirmationStatementLastMadeUpTo, confirmationStatementOverdue, hasCharges, hasInsolvencyHistory, leadScore, leadSignals[], officers[], officersOnRegister, resignationsOnRegister, activeOfficersCount, directorsCount, pscs[], pscStatements[], pscCount; plus website, websiteMatchedBy, websiteCandidate, email, emails[], phones[], socials with enrichEmails; filingHistory[] and charges[] when enabled. type: "officer" rows with emitOfficerRecords.
Behaviors an agent should know:
- Always set
maxItems; it caps company rows only. - An empty
searchQuerieswith at least one of sicCodes, location, companyType or a date range searches on the filters alone; with nothing at all the actor runs the demo keyword "packaging". includeOfficersandincludePscsdefault to true; filing history, charges, officer rows, email enrichment and monitoring default to false.- Email enrichment only returns a website that shows the company number, postcode or registered name;
websiteCandidateholds an unconfirmed site with no email. - Monitoring mode skips companies returned by an earlier run of the same search.
- Billing: $0.004 per company row, $0.002 per officer row, $0.05 per confirmed email.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Companies House, GOV.UK, or the UK Government. All trademarks mentioned are the property of their respective owners.
The scraper reads only the publicly available register at find-and-update.company-information.service.gov.uk, with no authenticated endpoints or content behind a login, and, when email enrichment is on, the public pages of each company's own website. Register data (including officer names, month and year of birth and correspondence addresses) is published by Companies House as public record. Users are responsible for making sure their use complies with Companies House's terms of use, UK GDPR and other data-protection law (particularly when processing officers' personal data or contacting people), and any contractual obligations of their own organisation.
SEO Keywords
companies house scraper, scrape companies house, companies house api alternative, uk company data scraper, company register scraper, companies house directors, uk directors list, company officers scraper, psc register scraper, persons with significant control, beneficial owners uk, sic code company list, uk companies by sic code, new company incorporations uk, new business leads uk, uk company email finder, company website finder uk, b2b lead generation uk, kyc company data, kyb uk, company filing history, companies house charges, overdue accounts companies, dissolved companies data, company number lookup, opencorporates alternative