Companies House [$4💰] UK Companies, Directors, PSCs + Emails avatar

Companies House [$4💰] UK Companies, Directors, PSCs + Emails

Pricing

from $4.00 / 1,000 companies

Go to Apify Store
Companies House [$4💰] UK Companies, Directors, PSCs + Emails

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

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

2

Monthly active users

2 days ago

Last modified

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.

InputRows you get
Keyword (plumbing) + filtersOne 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 URLsCompany pages, keyword searches or advanced-search result pages
Optional: one row per directorA 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

How Companies House Scraper works

  1. 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).
  2. 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.
  3. Read the people and papers, in parallel. Officers (all pages, 35 per page), PSCs and PSC statements, filing history and charges, each switchable.
  4. 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.
  5. 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

CapabilityTypical Companies House actorsThis 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, residencepartial✅
Identity-verification status for officers and PSCs❌✅
PSCs with nature of control as text and register codespartial✅
Corporate PSC details (legal form, governing law, registration number)❌✅
PSC statements kept apart from people❌✅
Accounts and confirmation-statement deadlines with overdue flagspartial✅
Charges and insolvency flags on every row (no extra request)❌✅
Filing history with PDF links and page countspartial✅ opt-in
Charges with persons entitled and totalspartial✅ opt-in
Company website and email, confirmed by company number❌✅ opt-in
One flat row per active director for CRM importpartial✅ opt-in
Monitoring mode: only companies not seen beforepartial✅
Lead score with the reasons behind itpartial✅
Needs a Companies House API keysometimesnever

Use cases

WhoWhat they do with it
Sales and lead-gen teamsEvery active company in a SIC code and town, with directors, a confirmed website and email, sorted by lead score
Accountants, banks, insurers, agenciesA daily feed of new incorporations in their patch (monitoring mode + incorporated-from date + schedule)
KYC, KYB and complianceDirectors, owners (PSCs), nature of control, identity-verification status, charges and insolvency flags
Credit and riskOverdue accounts and confirmation statements, outstanding charges, insolvency history
Researchers and analystsFormation and dissolution trends by industry, region and date
Data teamsEnrich a CRM from a column of company numbers

Input

FieldTypeDefaultWhat it does
searchQueriesarray["packaging"]Keywords matched against the company name. Leave empty to search on filters alone
companyNumbersarray[]Exact company numbers (00445790, SC311560); leading zeros restored
startUrlsarray[]Company pages, keyword searches or advanced-search result URLs
companyNameExcludesstringnoneDrop names containing this text
statusarray["active"]active, dissolved, liquidation, administration, …
companyTypearrayallltd, plc, llp, limited-partnership, community-interest-company, …
sicCodesarrayall4-5 digit SIC codes, e.g. 62012, 43220
locationstringanywhereRegistered office contains this town, county or postcode
incorporatedFrom / incorporatedTostringnoneIncorporation date range, YYYY-MM-DD
dissolvedFrom / dissolvedTostringnoneDissolution date range, YYYY-MM-DD
includeOfficersbooleantrueOfficers array plus officer, director and resignation counts
maxOfficerPagesinteger3Officer pages per company (35 per page)
includePscsbooleantruePSCs and PSC statements
includeFilingHistorybooleanfalseRecent filings with PDF links
maxFilingsinteger25Filings kept per company
includeChargesbooleanfalseCharges and charge totals (only for companies that have charges)
emitOfficerRecordsbooleanfalseAlso output one row per active officer
enrichEmailsbooleanfalseConfirmed website, emails, phones and socials for active companies
monitoringModebooleanfalseOutput only companies not returned by an earlier run of the same search
maxItemsinteger1000Cap on company rows (officer rows not counted)
maxConcurrencyinteger10Companies processed in parallel
proxyobjectApify 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

GroupFields
IdentitycompanyNumber, companyName, profileUrl, previousNames[]
StatuscompanyStatus, isActive, companyType, incorporatedOn, dissolvedOn, companyAgeYears
Industry and placesicCodes[], sicCodeList[], registeredOfficeAddress
DeadlinesaccountsNextMadeUpTo, accountsNextDue, accountsLastMadeUpTo, accountsOverdue, confirmationStatementNextDate, confirmationStatementNextDue, confirmationStatementLastMadeUpTo, confirmationStatementOverdue
RiskhasCharges, hasInsolvencyHistory, charges[] and totals (opt-in)
Peopleofficers[], officersOnRegister, resignationsOnRegister, activeOfficersCount, directorsCount
Ownerspscs[], pscStatements[], pscCount, pscsOnRegister, pscStatementsOnRegister
Contact (opt-in)website, websiteMatchedBy, websiteCandidate, email, emails[], phones[], socials
ScoringleadScore (0-100), leadSignals[]

Pricing

Pay per event, no start fee, no monthly rental.

EventWhen it is chargedPrice
CompanyOne company row in the dataset$0.004
Officer rowOne type: "officer" row, only with emitOfficerRecords on$0.002
Contact emailA 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

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 searchQueries with 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".
  • includeOfficers and includePscs default 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; websiteCandidate holds 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