Company Financials API: UK, Denmark & Norway accounts + LEI
On Apify StoreGet normalized financials of UK, Danish and Norwegian companies, including private ones, straight from the official accounts they file with Companies House (UK), Erhvervsstyrelsen (Denmark) and the Brønnøysund Register of Company Accounts (Norway): revenue, gross profit, operating profit, net income, equity, net assets, current assets, cash, creditors and employees. Every number comes with the exact fact or field it was taken from, so you can audit any value. Each row also gets the company's LEI from GLEIF when it has one. Look up companies by company number, CVR or organisation number, or get the newest filings. For credit checks, KYB, M&A and lead research, and for AI agents.
Pricing (pay per event): $0.04 per company-year ($40 per 1,000 rows). Rows where the filing tags no figures at all (e.g. some dormant companies) are skipped and not charged. The Actor stops at your max charge limit.
Questions agents ask
- “What were Novo Nordisk's revenue and equity in its latest Danish annual report?”
- “Get the last three years of Equinor ASA's own accounts from the Norwegian register.”
- “What is the LEI and the latest net assets of UK company 03117531?”
Example
Input
{ "countries": ["GB", "DK", "NO"], "companyNumbers": ["03117531"], "cvrNumbers": ["24256790"], "orgNumbers": ["923609016"], "maxResults": 10 }Output
{
"country": "GB",
"company_number": "03117531",
"company_name": "MNM Property Services Limited",
"lei": null,
"lei_status": null,
"period_end": "2026-03-31",
"fiscal_year_start": "2025-04-01",
"currency": "GBP",
"revenue": 12961072,
"gross_profit": 4267732,
"operating_profit": 1386710,
"net_income": 952557,
"current_assets": 4342436,
"cash_and_equivalents": 1011336,
"total_equity": 1345970,
"current_liabilities": 3339068,
"employees": 98,
"metrics_found": 13,
"sources": {
"revenue": {
"concept": "ns5:TurnoverRevenue",
"fact_id": null,
"context_ref": "FY_31_03_2026",
"period": "2025-04-01/2026-03-31",
"unit": "iso4217:GBP",
"decimals": 0
}
},
"registry_url": "https://find-and-update.company-information.service.gov.uk/company/03117531/filing-history",
"source_document": "Prod223_4344_03117531_20260331.html",
"source_url": "https://download.companieshouse.gov.uk/Accounts_Bulk_Data-2026-11-05.zip",
"retrieved_at": "2026-11-05T15:23:16+00:00"
}What you get
| Field | Type | Meaning |
|---|---|---|
schema_version | string | Output schema version. |
country | string | Country of the register (ISO 3166 alpha-2). |
company_number | string | null | UK Companies House company number (GB rows). |
cvr | string | null | Danish CVR number (DK rows). |
org_number | string | null | Norwegian organisation number (NO rows). |
enterprise_number | string | null | Belgian enterprise (KBO/BCE) number, 10 digits (BE rows). |
company_name | string | null | Registered name as tagged in the accounts (NO: from Enhetsregisteret; BE: from the filing reference). |
lei | string | null | Legal Entity Identifier found at GLEIF for this registration number; null when none is found or enrichLei is off. |
lei_status | string | null | GLEIF registration status of the LEI, e.g. ISSUED or LAPSED. |
period_end | string | null | Fiscal year end (YYYY-MM-DD), taken from the facts. |
fiscal_year_start | string | null | Fiscal year start (YYYY-MM-DD); null for balance-sheet-only accounts. |
currency | string | null | ISO 4217 currency of the monetary values. |
revenue | number | null | Turnover / revenue for the fiscal year. Small UK companies (filleted accounts) and Danish class B companies often don't publish it. NO: sales revenue (salgsinntekter), else total operating income. |
gross_profit | number | null | Gross profit (DK: bruttofortjeneste, often reported instead of revenue). |
operating_profit | number | null | Operating profit (EBIT). |
profit_before_tax | number | null | Profit before tax. |
net_income | number | null | Profit or loss for the year. |
total_assets | number | null | Total assets (DK; UK small-company balance sheets usually don't tag a total). |
fixed_assets | number | null | Fixed / non-current assets. |
current_assets | number | null | Current assets. |
cash_and_equivalents | number | null | Cash at bank and in hand / cash and cash equivalents. |
total_equity | number | null | Total equity (capital and reserves). |
net_assets | number | null | Net assets (UK balance sheet total). |
net_current_assets | number | null | Net current assets or liabilities (UK). |
total_liabilities | number | null | Total liabilities; when not tagged, total_assets - total_equity (sources says derived). |
current_liabilities | number | null | UK: creditors falling due within one year. DK: short-term liabilities other than provisions. NO: short-term debt. BE: amounts payable within one year. |
noncurrent_liabilities | number | null | UK: creditors falling due after more than one year. DK: long-term liabilities other than provisions. NO: long-term debt. BE: amounts payable after more than one year. |
employees | number | null | Average number of employees during the year (BE: full-time equivalents). Not in the Norwegian data. |
metrics_found | integer | How many of the normalized metrics were found. |
sources | object | Per metric: concept, fact_id, context_ref, period, unit, decimals of the source fact, or {derived: formula}. NO: concept is the JSON path in the record at source_url; BE: the NBB rubric code. |
published | string | null | GB: filing date (by company number) or date of the Companies House daily file (newest filings); DK: publication timestamp; BE: filing date; NO: null. |
report_url | string | null | GB (by company number): the accounts on the Companies House website; DK: the human-readable annual report (XHTML or PDF); NO: PDF copy of the filed accounts at Brønnøysund. |
registry_url | string | null | Company page in the official register (filing history / CVR). |
source_document | string | null | GB: Companies House filing transaction id (by company number) or file name of the accounts inside the daily bulk ZIP (newest filings). |
source_url | string | GB: the Companies House document (by company number, needs a key) or bulk ZIP (newest filings); DK: the XBRL file; NO: the Regnskapsregisteret JSON record; BE: the NBB accounting-data URL (needs a key). |
retrieved_at | string | UTC time the source was fetched. |
Coverage
UK: accounts filed electronically with Companies House in the last ~60 days. Denmark: every annual report filed digitally with Erhvervsstyrelsen, all years. Norway: the last 3 fiscal years of every company that files accounts with the Brønnøysund Register (company accounts, not group accounts). Belgium only when the Actor owner has configured access. LEI looked up at GLEIF.
Use with AI agents (MCP)
Add this URL to your MCP client (Claude, Cursor, VS Code, ...) to load the Actor as a tool through the Apify hosted MCP server. It signs you in with OAuth or accepts Authorization: Bearer <APIFY_TOKEN>.
https://mcp.apify.com?tools=bosco_labs/company-accounts
For “What were Novo Nordisk's revenue and equity in its latest Danish annual report?” the agent passes:
{"cvrNumbers": ["24256790"], "maxResults": 1}
stable, typed JSON, one row per company per fiscal year. Every row has schema_version and a source_url pointing to the official filing or register record (plus registry_url and a sources entry per value), so the agent can cite its source. With registration numbers, only their countries are read, so a lookup never returns other companies; bad numbers fail at once with a valid example.
Or call the Apify API: POST https://api.apify.com/v2/acts/bosco_labs~company-accounts/run-sync-get-dataset-items with the input as JSON body. Cost: $0.04 per company-year.
Input fields
| Field | Type | Meaning |
|---|---|---|
countries | array | Registers to read, as codes: GB (Companies House), DK (Erhvervsstyrelsen), NO (Brønnøysund Regnskapsregisteret), BE (National Bank of Belgium; needs enterprise numbers and NBB access set up by the Actor owner). Default ["GB", "DK", "NO"]. Used only when no numbers are given (it then returns each country's newest filings); with numbers, the countries of those numbers are read and this is ignored. |
companyNumbers | array | UK Companies House numbers, e.g. ["03117531", "SC123456"] (shorter numbers are zero-padded to 8). Accounts of any year filed digitally (iXBRL), newest first; paper/PDF-only filings are skipped. Empty = the newest UK filings (last ~60 days). |
cvrNumbers | array | Danish CVR numbers, 8 digits, e.g. ["24256790"]. All years are available, newest first. Empty = the newest Danish filings. |
orgNumbers | array | Norwegian organisation numbers, 9 digits, e.g. ["923609016"]. The last 3 fiscal years are available, newest first. Empty = companies whose accounts were registered in the last 2 days. |
enterpriseNumbers | array | Belgian KBO/BCE enterprise numbers, 10 digits with or without dots, e.g. ["0403.170.701"]. Required for BE (there is no "newest filings" mode for Belgium), which works only when the Actor owner has set up NBB access. |
enrichLei | boolean | true (default) = look up each company's Legal Entity Identifier at GLEIF by its registration number and add lei and lei_status (null when the company has no LEI). false = skip the lookup. |
maxResults | integer | Maximum company-years per country, newest filings first, e.g. 1 for a company's latest accounts. Default 5. One row per company per fiscal year. |
Sources, licence and limits
Are the numbers in thousands? No. All values are in full currency units: the Actor applies each fact's scale and sign as tagged.
Why is revenue empty? The company didn't publish it (common for small UK and Danish companies, see above), or tagged it with a non-standard concept. metrics_found tells you how complete a row is.
Can I get older UK accounts? Yes, by company number: every year with digital (iXBRL) accounts. Older paper or PDF-only filings have no data to read and are skipped.
Why is lei null? The company has no LEI (most small companies don't), or GLEIF has it under a different registration number. lei_status shows whether an LEI found is still ISSUED or e.g. LAPSED (not renewed).
Are Norwegian figures consolidated? No: rows hold the company's own accounts. Equinor's row, for example, is the parent company, not the group.
Is Belgium supported? Only when the Actor owner has configured access to the National Bank of Belgium's web services; otherwise BE is skipped with a log message and costs nothing.
Personal data? Rows contain company-level figures and the company name only. Names of directors, board members, auditors or meeting chairs, addresses and free-text notes are never output. Norwegian sole proprietorships are skipped.
Legal basis? The accounts are public register filings. See LEGAL.md in the source for the terms checked.