UK Company Data — Directors, Owners & Firmographics avatar

UK Company Data — Directors, Owners & Firmographics

Pricing

from $4.00 / 1,000 results

Go to Apify Store
UK Company Data — Directors, Owners & Firmographics

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

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

4 days ago

Last modified

Share

UK Company Data — Companies House officers, PSC & SIC

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.

FieldTypeDescription
company_numberstring8-digit Companies House number
company_namestringRegistered legal name
company_status / company_status_detailstringe.g. active, dissolved, liquidation (+ detail)
company_type / subtypestringe.g. plc, ltd, llp
incorporation_date / dissolution_datestringISO dates
sic_codesarraySIC 2007 industry codes
registered_addressstringFull registered office address
registered_instringJurisdiction (e.g. england-wales, scotland)
previous_company_names / previous_names_countarray / intFormer names { name, ceased_on, effective_from }
foreign_company_details / branch_company_detailsobjectPresent for overseas companies / UK branches
officersarray{ name, role, appointed_on, resigned_on, nationality, country_of_residence, occupation, address }
officers_count / officers_textint / stringTotal officers + a short summary of the first few
persons_with_significant_controlarrayPSC / beneficial owners { name, kind, natures_of_control, notified_on, ceased_on, nationality, country_of_residence, address, identification }
psc_count / psc_textint / stringTotal PSC + a short summary
chargesarrayMortgages/debentures { charge_number, status, created_on, satisfied_on, classification, persons_entitled, amount_secured, ... }
charges_count / charges_outstanding / charges_textint / int / stringTotal, still-outstanding count, and a summary
recent_filings / filing_categories / total_filingsarray / array / intLast ~10 filings { category, type, date, description, pages, document_url }
accounts_type / accounts_period_start / accounts_period_endstringLatest accounts type and period
last_accounts_date / next_accounts_due / next_accounts_due_on / next_accounts_overduestring / boolAccounts filing dates and overdue flag
accounting_reference_datestringAccounting reference date (day/month)
last_confirmation_statement / next_confirmation_statement / next_confirmation_due / confirmation_overduestring / boolConfirmation-statement dates and overdue flag
annual_return / last_members_list_dateobject / stringLegacy annual-return dates (older companies)
has_charges / has_insolvency_historyboolQuick risk flags
can_file / undeliverable_registered_office / registered_office_in_disputeboolRegister housekeeping flags
registered_email / websitestringCH registered email / website where the register lists them (often null)
matchedbooltrue if resolved; false with an error if not found
source / source_url / scraped_atstringProvenance: 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 — plus has_charges and has_insolvency_history risk 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_control labels.
  • 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 ApifyClient
client = 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_email and website — Companies House rarely exposes these through the API, so expect null for 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: false on 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 maxConcurrency if you see 429 warnings 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, or sicCode; an empty input throws.
  • 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. companyNames resolves to the top match and can be ambiguous — use companyNumbers when 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_key to 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.