UK Company Data — Directors, Owners & Firmographics
Pricing
from $4.00 / 1,000 results
UK Company Data — Directors, Owners & Firmographics
Look up any UK company and get directors, persons with significant control (beneficial owners), and firmographics. 5M+ companies from the official Companies House API.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
UK Company Data — Directors, PSC & Firmographics (Companies House)
Need official, structured data on any UK company — not a scraped HTML snapshot that breaks next week? This Actor turns the UK Companies House register into ready-to-use records: 5M+ companies, with directors & secretaries, persons with significant control (PSC / beneficial owners), SIC industry codes, registered address, accounts & confirmation-statement status, charges (mortgages/debentures) and recent filing history — one clean, flat record per company.
Built on the official Companies House REST API (Crown copyright, Open Government Licence). No browser, no fragile HTML scraping — a default API key is built in, so you can start with one click and it doesn't break when a website changes.
- 🇬🇧 5M+ UK companies — the official Companies House register, by number, name, or SIC sector
- 👥 Directors & PSC — full officer list (roles, appointments, nationality) + beneficial owners with control levels
- 📑 Charges, filings & accounts — mortgages/debentures, filing-history timeline, accounts & confirmation-statement due dates and overdue flags
- ⚡ Official API, no browser — plain HTTP, one flat record per company (JSON / CSV / Excel / API)
Quick start (API)
Get a full record for a UK company in one call (Tesco PLC, company number 00445790):
curl -X POST "https://api.apify.com/v2/acts/foxlabs~uk-company-data/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{ "companyNumbers": ["00445790"], "companyNames": ["BP"], "maxResults": 10 }'
Prefer no code? Open the Input tab, paste company numbers or names (or pick a SIC sector), and click Start — then download the results.
What you get
One clean, flat record per company. Missing values are null (or []), never guessed.
| Field | Type | Description |
|---|---|---|
company_number | string | 8-digit Companies House number |
company_name | string | Registered legal name |
company_status / company_status_detail | string | e.g. active, dissolved, liquidation (+ detail) |
company_type / subtype | string | e.g. plc, ltd, llp |
incorporation_date / dissolution_date | string | ISO dates |
sic_codes | array | SIC 2007 industry codes |
registered_address | string | Full registered office address |
registered_in | string | Jurisdiction (e.g. england-wales, scotland) |
previous_company_names / previous_names_count | array / int | Former names { name, ceased_on, effective_from } |
foreign_company_details / branch_company_details | object | Present for overseas companies / UK branches |
officers | array | { name, role, appointed_on, resigned_on, nationality, country_of_residence, occupation, address } |
officers_count / officers_text | int / string | Total officers + a short summary of the first few |
persons_with_significant_control | array | PSC / beneficial owners { name, kind, natures_of_control, notified_on, ceased_on, nationality, country_of_residence, address, identification } |
psc_count / psc_text | int / string | Total PSC + a short summary |
charges | array | Mortgages/debentures { charge_number, status, created_on, satisfied_on, classification, persons_entitled, amount_secured, ... } |
charges_count / charges_outstanding / charges_text | int / int / string | Total, still-outstanding count, and a summary |
recent_filings / filing_categories / total_filings | array / array / int | Last ~10 filings { category, type, date, description, pages, document_url } |
accounts_type / accounts_period_start / accounts_period_end | string | Latest accounts type and period |
last_accounts_date / next_accounts_due / next_accounts_due_on / next_accounts_overdue | string / bool | Accounts filing dates and overdue flag |
accounting_reference_date | string | Accounting reference date (day/month) |
last_confirmation_statement / next_confirmation_statement / next_confirmation_due / confirmation_overdue | string / bool | Confirmation-statement dates and overdue flag |
annual_return / last_members_list_date | object / string | Legacy annual-return dates (older companies) |
has_charges / has_insolvency_history | bool | Quick risk flags |
can_file / undeliverable_registered_office / registered_office_in_dispute | bool | Register housekeeping flags |
registered_email / website | string | CH registered email / website where the register lists them (often null) |
matched | bool | true if resolved; false with an error if not found |
source / source_url / scraped_at | string | Provenance: UK Companies House, the public CH URL, ISO timestamp |
Sample output
Illustrative record (values shown for shape — run the Actor for live data):
{"company_number": "00445790","company_name": "TESCO PLC","company_status": "active","company_status_detail": null,"company_type": "plc","incorporation_date": "1947-11-27","sic_codes": ["47110"],"registered_address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, AL7 1GA, United Kingdom","registered_in": "england-wales","previous_company_names": [],"previous_names_count": 0,"officers": [{ "name": "SMITH, John", "role": "director", "appointed_on": "2020-01-15", "resigned_on": null, "nationality": "British", "country_of_residence": "England", "occupation": "Company Director", "address": "Welwyn Garden City, England" }],"officers_count": 74,"officers_text": "Illustrative — 74 officers on the real record","persons_with_significant_control": [],"psc_count": 0,"psc_text": null,"has_charges": true,"charges_count": 4,"charges_outstanding": 1,"recent_filings": [{ "category": "confirmation-statement", "type": "CS01", "date": "2025-05-12", "description": "confirmation-statement-with-updates", "pages": 5, "document_url": "https://.../document" }],"filing_categories": ["confirmation-statement", "accounts"],"total_filings": 312,"accounts_type": "group","next_accounts_due": "2025-11-30","next_accounts_overdue": false,"has_insolvency_history": false,"registered_email": null,"website": null,"matched": true,"source": "UK Companies House","source_url": "https://find-and-update.company-information.service.gov.uk/company/00445790","scraped_at": "2026-07-05T10:00:00.000Z"}
Input & filters
- Company numbers (
companyNumbers) — 8-digit Companies House numbers for exact, guaranteed lookup. - Company names (
companyNames) — best-effort search via Companies House; returns the top match per name (use numbers when you need certainty). - SIC sector — Discovery mode (
sicCode) — pick a UK SIC 2007 section (e.g. IT & Software, Construction, Manufacturing) to discover companies in that industry without a list. - API key (
api_key) — a default Companies House key is built in; supply your own for higher rate limits. - Max results (
maxResults) — hard cap on companies returned (up to 1,000 per run). - Concurrency (
maxConcurrency) — parallel lookups (1–10); keep it modest to respect the Companies House rate limit. - Proxy (
proxyConfiguration) — Apify Proxy for the API requests.
Example inputs (copy & paste)
// 1) Exact lookups by company number (most precise){ "companyNumbers": ["00445790", "00000006"], "maxResults": 10 }// 2) Resolve companies by name (best-effort search){ "companyNames": ["Tesco", "BP", "Monzo Bank"], "maxResults": 10 }// 3) Discover companies in a sector (SIC 2007: IT & Software services){ "sicCode": "JC", "maxResults": 200 }// 4) Sector discovery, active companies only (status filter, applied server-side){ "sicCode": "K", "statusFilter": "active", "maxResults": 500 }// 5) Distressed-company research: dissolved construction firms{ "sicCode": "F", "statusFilter": "dissolved", "maxResults": 200 }// 6) Filter a direct lookup by status — return Tesco only while it is active{ "companyNumbers": ["00445790"], "statusFilter": "active" }// 7) Manufacturing sector, active only, with tuned concurrency{ "sicCode": "C", "statusFilter": "active", "maxResults": 300, "maxConcurrency": 5 }
Use cases
- KYC / KYB & due diligence. Onboarding a UK counterparty? Pass its
companyNumbers→ verified legal identity, status, registered address, the full director list and the PSC (beneficial-owner) chain with control levels — plushas_chargesandhas_insolvency_historyrisk flags, in one call. - Supply-chain & vendor risk. Map a supplier's corporate structure, directors and outstanding charges (mortgages/debentures) to spot financial distress before you sign.
- Compliance & PSC-register checks. Verify persons with significant control for AML / Economic Crime Act obligations, with the register's own
natures_of_controllabels. - Firmographic enrichment. Already have UK company numbers or names? Feed them in → append status, type, SIC codes, incorporation date, accounts and confirmation-statement dates. Missing fields return
null, never a guess. - Sector prospecting & market mapping. Use SIC discovery to build a target-account list for an industry, then rank by status, age (incorporation date) or officer count.
- Monitoring & research. Track filing history, accounts-overdue and confirmation-overdue flags across a portfolio of companies to catch changes early.
Performance & throughput
Each company is assembled from 3–5 Companies House API calls — profile, officers and PSC always, plus charges (only when the company has_charges) and recent filing history. Throughput is bounded by the Companies House rate limit of ~600 requests per 5 minutes and your maxConcurrency (default 3, max 10) — keep concurrency modest to avoid 429 back-off. There are no browsers or page renders, so lookups are lightweight; results cap at 1,000 companies per run (maxResults).
Integrations
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('foxlabs/uk-company-data').call({companyNumbers: ['00445790'], companyNames: ['BP'], maxResults: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("foxlabs/uk-company-data").call(run_input={"companyNumbers": ["00445790"], "companyNames": ["BP"], "maxResults": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["company_name"], item.get("company_status"))
Also works with Make / n8n / Zapier (Apify app → run this Actor, map the input), scheduled runs, webhooks, and the Apify MCP server for AI agents.
Data quality
Identity, status, officers, PSC, charges and filing history come straight from the official Companies House register — never fabricated; missing values are null (or []). Coverage of any given field mirrors what Companies House itself holds:
- Always present: company number, name, status, type, incorporation date, SIC codes, registered address, officers and PSC (when the company has them).
- Frequently empty:
registered_emailandwebsite— Companies House rarely exposes these through the API, so expectnullfor most companies. This Actor is a firmographic / ownership / compliance source, not a contact-email list. - Present when applicable: charges (only if
has_charges), previous names, foreign/branch details, annual-return dates (older companies).
Pricing
You're billed through Apify for the compute/results this Actor uses — see the Pricing tab on the Actor page for the current plan. A default Companies House API key is built in, so there are no external API costs, and officer, PSC, charges and filing enrichment are all included. Apify's free tier lets you evaluate the full feature set before you scale.
FAQ
Can I look up a company by name? Yes — put names in companyNames. It's a best-effort search that returns the top match; for guaranteed results use the 8-digit companyNumbers.
What's the difference between officers and PSC? officers are the appointed directors/secretaries; persons_with_significant_control are the beneficial owners (people or entities that own/control the company), with natures_of_control levels like "Owns 75-100% of shares".
Do I need my own Companies House API key? No — a default key is built in. Supply your own api_key only if you need higher rate limits for large runs.
How many companies can I pull in one run? Up to 1,000 via maxResults.
What export formats are available? JSON, CSV, Excel, or via the Apify API / integrations.
Does it include financial statements? It includes accounts metadata (type, period, due/overdue dates) and charges (mortgages/debentures), plus a filing-history timeline — not the full parsed financial figures.
Can I discover companies by industry? Yes — set sicCode to a SIC 2007 section (Discovery mode) to find companies in that sector without a pre-built list.
Is contact email or phone included? Not reliably. Companies House rarely publishes an email and almost never a website through the API, so registered_email and website are usually null. Use this for firmographics and ownership, not for cold-email lists.
Why did a name return the wrong company? Name search picks the top Companies House match, which can be ambiguous for common names. Use the exact company number for certainty.
Is there a rate limit? Yes — Companies House allows ~600 requests per 5 minutes. Keep maxConcurrency modest; the Actor backs off automatically on 429.
Troubleshooting
matched: falseon a lookup → the company number wasn't found, or a name search returned nothing. Check the 8-digit number, or try a more specific name.- Run is slow on large pulls → each company is 3–5 API calls and Companies House caps throughput at ~600 requests / 5 minutes; lower
maxConcurrencyif you see429warnings in the log, don't raise it. - A company has no email or website → that's the register, not a miss — Companies House rarely exposes these, so the value is
null. - Nothing runs → you must provide at least one of
companyNumbers,companyNames, orsicCode; an empty input throws.
Notes, limits & legal (honest)
- Source & licence. Data comes from the official Companies House public register (Crown copyright), generally reusable under the UK Open Government Licence (OGL v3) with attribution. You are responsible for complying with Companies House's terms for your use.
- Personal data / GDPR. Officer and PSC records include individuals published by law in the register. If you process this personal data you're responsible for your own GDPR legal basis.
- Best-effort name search.
companyNamesresolves to the top match and can be ambiguous — usecompanyNumberswhen identity must be exact. - Shared default key. The built-in API key is shared across users; for heavy or scheduled runs, add your own
api_keyto avoid contended rate limits. - Not affiliated with Companies House or the UK Government; this Actor retrieves and structures their public data via the official API.
Support
Questions, a field you'd like added, or a custom build? Open the Issues tab on this Actor, or email info@foxlabs.com.tr. We reply fast.
If this Actor saves you time, a ⭐ review really helps.
Changelog
0.2 — 2026-07-05
- Reworked docs: API quick-start, full field reference, sample output, integration snippets (JS/Python/Make/MCP), FAQ & troubleshooting.
- Documented the complete emitted field set — officers, PSC, charges, filing history, accounts & confirmation-statement status, previous names, and foreign/branch details.
v0.1 — 2026-06-22
- Initial release: Companies House company profile + officers + PSC.
- 5M+ UK companies.
- Name search & company number lookup.
- Built-in default API key.
Part of the foXLabs data platform — official public-data company, contact, ownership, jobs, charity, location & AI-search intelligence scrapers. Browse the full suite at data.foxlabs.com.tr.
