Companies House Financial Data — Structured JSON API
Companies House holds annual accounts for millions of UK companies. Getting usable numbers out of them is the hard part. Here is what the data actually contains, what the raw API gives you, and how Registrum turns it into clean JSON you can use immediately.
What financial data does Companies House actually hold?
UK companies are required to file annual accounts with Companies House. For most private companies, those accounts are submitted as iXBRL documents — Inline XBRL files that embed structured financial tags inside human-readable HTML. HMRC has mandated iXBRL for corporation tax filings since 2011, which means a large proportion of accounts filed since then contain machine-readable data.
The data covers profit and loss (turnover, gross profit, operating profit, profit after tax) and balance sheet items (net assets, total equity, current liabilities). Employee headcount is included when the company reports it. Most filings contain both the current year and prior year comparatives in the same document.
What the raw Companies House API returns
The Companies House API exposes a /filing-history endpoint that lists documents filed by a company. To get financial data, you retrieve the filing list, identify accounts documents, fetch the document metadata, then download the raw iXBRL file. The API gives you a link to a document — it does not parse the document for you.
That raw iXBRL file is an XML-embedded HTML document using XBRL namespaces and taxonomy references that vary by filing type. Extracting a single number like turnover requires: downloading the file, parsing the XML, resolving the taxonomy namespace, matching context references to the correct period, handling unit declarations, and dealing with variations between the UK GAAP, FRS 102, FRS 105, and IFRS taxonomy versions. It is several hundred lines of parsing code for a number you could express in one JSON field.
What Registrum returns instead
Registrum fetches, parses, and caches the iXBRL filing so you never have to. A single GET request returns structured JSON with labelled fields, explicit currency and unit metadata, and a data_quality object documenting exactly which fields were found and which were absent. You get current year and prior year side by side, so you can calculate growth rates without making a second call.
Understanding the data_quality metadata
Not every company files iXBRL with every field populated. Micro-entity accounts under FRS 105 contain significantly less data than full accounts. Some companies only report a balance sheet, omitting profit and loss entirely. The data_quality object in every Registrum response tells you: which fields were successfully parsed, which were absent in the filing, whether the parser is confident in the values, and which taxonomy version was used. This lets you distinguish between a company that had zero turnover and a company whose filing simply did not include that figure.
Limitations to know about
- Listed companies (PLCs) typically file PDF annual reports rather than iXBRL, so financial data is not available for most FTSE companies via this route.
- Micro-entities filing under FRS 105 are only required to include a balance sheet — turnover and profit figures are optional and often absent.
- Filing lag. Companies have up to 9 months after their year-end to file accounts, so the most recent data may be up to a year old.
- Newly incorporated companies may not have filed any accounts yet — Registrum returns a clear error rather than empty data in this case.
Example: Tesco PLC financials
curl -H "X-API-Key: reg_live_..." \
"https://api.registrum.co.uk/v1/company/00445790/financials"
# Response (abbreviated):
{
"status": "ok",
"data": {
"company_number": "00445790",
"period_end": "2024-02-24",
"currency": "GBP",
"profit_and_loss": {
"turnover": { "value": 68190000000, "prior_year": 65762000000 },
"gross_profit": { "value": 3820000000, "prior_year": 3518000000 },
"profit_after_tax": { "value": 1000000000, "prior_year": 852000000 }
},
"balance_sheet": {
"net_assets": { "value": 8730000000, "prior_year": 8102000000 }
},
"other": {
"employees": { "value": 295622, "prior_year": 300000 }
},
"data_quality": {
"fields_found": 12,
"fields_missing": 2,
"confidence": "high",
"taxonomy": "uk-gaap-2009"
}
}
}Financial data is cached for 7 days. Company number 00445790 is Tesco PLC — used here as a publicly available reference example.
Get your free API key
50 free calls per month. No credit card required.