Companies House UK Financials & Beneficial Owners Scraper
Companies House UK Financials & Beneficial Owners Scraper
Extract UK company records from Companies House with parsed filed accounts (iXBRL) — turnover, profit, assets, director pay — plus officers, beneficial owners (Persons with Significant Control), and registered charges. Other Companies House actors stop at basic profile fields; this one parses the actual filed accounts documents into structured financials.
What You Get
Each record includes:
Company profile
- Company number, name, status (active/dissolved/liquidation), type (ltd/plc/llp/…)
- Incorporation date, registered office address, SIC codes
- Insolvency history flag, charges flag + counts (total / outstanding)
- Filing history entry count
Officers & beneficial ownership (each independently toggleable)
- Officers — JSON array of
{name, role, appointed, resigned} - Active directors count
- PSCs (Persons with Significant Control / beneficial owners) — JSON array of
{name, kind, natures_of_control, notified_on}
Parsed financials (from the company's filed iXBRL accounts, when includeFinancials is on)
- Turnover, gross profit, operating profit, profit before/after tax
- Total assets, total-assets-less-current-liabilities, current assets, total liabilities, net assets
- Cash at bank, average employees, director remuneration, highest-paid director, audit firm name
- Accounts period end date and
accounts_year(1 = most recently filed year)
Every financial field is null when the filer didn't tag that concept — never fabricated. Many small
companies file abridged/micro-entity accounts that only disclose the balance sheet (assets, employees), not
a profit & loss statement — turnover and profit legitimately come back null for those. total_assets_gbp
is reserved for a genuine gross-assets tag; the very common small-company subtotal ("total assets less
current liabilities" — fixed assets + net current assets) is a distinct, separately-reported field,
total_assets_less_current_liabilities_gbp, so the two are never conflated.
Billing Unit
One record = one company profile (when includeFinancials is off, or a company has no accounts filings)
or one company-year of parsed financials (when includeFinancials is on — one row per requested
financialYears, each with its own accounts_year). Base company/officer/PSC/charge fields repeat across
each year's row for the same company.
Query Modes
| Mode | Uses input field | What it does |
|---|---|---|
by_company_number |
companyNumbers |
Direct lookup — you already know the company number(s) |
by_name |
names |
Keyword search against company names (Companies House /search/companies) |
by_sic_code |
sicCodes |
Companies matching a UK SIC 2007 code |
by_psc_name |
pscNames |
Search for companies by a beneficial owner's name |
advanced_search |
names |
Company-name-includes substring search |
Known limitation — by_psc_name: Companies House's documented /search/persons-with-significant-control
endpoint returned zero results for every query tried against the standard free-tier API key during
construction — including an exact name pulled straight from a real company's own live PSC record. The mode
is wired per the documented API, but in practice you'll get more reliable beneficial-ownership data via
by_company_number + includePscs: true against a company you already know.
Inputs
| Field | Type | Default | Description |
|---|---|---|---|
mode |
select | by_company_number |
Query mode — see table above |
companyNumbers |
array | — | Companies House company numbers (mode = by_company_number) |
names |
array | — | Company names / keywords (mode = by_name or advanced_search) |
sicCodes |
array | — | UK SIC 2007 codes (mode = by_sic_code) |
pscNames |
array | — | Beneficial owner names (mode = by_psc_name) |
includeFinancials |
boolean | true |
Download + parse filed iXBRL accounts |
financialYears |
integer | 3 |
How many years of accounts filings to parse per company (max 10) |
includePscs |
boolean | true |
Include Persons with Significant Control |
includeOfficers |
boolean | true |
Include officers (directors/secretaries) |
includeCharges |
boolean | false |
Include registered charges (liens) |
maxItems |
integer | 100 |
Maximum number of records (company-years) to process |
Example Output
{
"company_number": "10122954",
"company_name": "DRAGONS HEAD SHOP LTD",
"company_status": "active",
"company_type": "ltd",
"incorporation_date": "2016-04-14",
"registered_office_address": "14, Broadview Road, London, SW16 5AU",
"sic_codes": "47910|62012",
"accounts_last_made_up_to": "2022-04-30",
"accounts_next_due": "2027-01-31",
"accounts_overdue": false,
"has_been_liquidated": false,
"has_charges": false,
"total_charges_count": 0,
"outstanding_charges_count": 0,
"officers_count": 2,
"active_directors_count": 2,
"officers": "[{\"name\":\"Mr Lee Brook\",\"role\":\"director\",\"appointed\":\"2016-04-14\",\"resigned\":null}]",
"psc_count": 2,
"psc_controllers": "[{\"name\":\"Mr Lee Brook\",\"kind\":\"individual-person-with-significant-control\",\"natures_of_control\":\"ownership-of-shares-25-to-50-percent\",\"notified_on\":\"2016-04-14\"}]",
"filing_history_count": 12,
"accounts_period_end": "2022-04-30",
"turnover_gbp": null,
"gross_profit_gbp": null,
"operating_profit_gbp": null,
"profit_before_tax_gbp": null,
"profit_after_tax_gbp": null,
"total_assets_gbp": null,
"total_assets_less_current_liabilities_gbp": 9616,
"current_assets_gbp": 9032,
"total_liabilities_gbp": null,
"net_assets_gbp": 7656,
"cash_at_bank_gbp": null,
"employees_average": 2,
"director_remuneration_gbp": null,
"highest_paid_director_gbp": null,
"audit_firm_name": null,
"accounts_year": 1
}
This example is a real micro-entity filing — note turnover/profit are correctly null (this company's
abridged accounts don't tag a profit & loss statement), while the balance-sheet fields that were actually
tagged (assets, net assets, employees) come back as real numbers.
Notes
- This actor calls the official Companies House REST API and Document API directly. It does not scrape HTML.
- iXBRL parsing matches concepts by their FRC taxonomy local name, independent of the namespace prefix a
filer's accounting software assigns (different real filings use
uk-bus:,uk-core:,core:, or custom prefixes for the identical concept). - Where a concept is tagged more than once (current year, prior-year comparative, or a dimensional note breakdown), the parser prefers the primary (non-dimensional) statement figure for the most recent period.
- This actor uses a single orblabs-managed API key shared across all runs (and with the sibling uk-companies-house-scraper actor) — you never need to supply your own.