Bosco Labs

Tools › Companies

Company Financials API: UK, Denmark & Norway accounts + LEI

On Apify Store

Get 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.

Price$0.04 per company-year
DomainCompanies
Call itApify API or MCP

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

FieldTypeMeaning
schema_versionstringOutput schema version.
countrystringCountry of the register (ISO 3166 alpha-2).
company_numberstring | nullUK Companies House company number (GB rows).
cvrstring | nullDanish CVR number (DK rows).
org_numberstring | nullNorwegian organisation number (NO rows).
enterprise_numberstring | nullBelgian enterprise (KBO/BCE) number, 10 digits (BE rows).
company_namestring | nullRegistered name as tagged in the accounts (NO: from Enhetsregisteret; BE: from the filing reference).
leistring | nullLegal Entity Identifier found at GLEIF for this registration number; null when none is found or enrichLei is off.
lei_statusstring | nullGLEIF registration status of the LEI, e.g. ISSUED or LAPSED.
period_endstring | nullFiscal year end (YYYY-MM-DD), taken from the facts.
fiscal_year_startstring | nullFiscal year start (YYYY-MM-DD); null for balance-sheet-only accounts.
currencystring | nullISO 4217 currency of the monetary values.
revenuenumber | nullTurnover / 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_profitnumber | nullGross profit (DK: bruttofortjeneste, often reported instead of revenue).
operating_profitnumber | nullOperating profit (EBIT).
profit_before_taxnumber | nullProfit before tax.
net_incomenumber | nullProfit or loss for the year.
total_assetsnumber | nullTotal assets (DK; UK small-company balance sheets usually don't tag a total).
fixed_assetsnumber | nullFixed / non-current assets.
current_assetsnumber | nullCurrent assets.
cash_and_equivalentsnumber | nullCash at bank and in hand / cash and cash equivalents.
total_equitynumber | nullTotal equity (capital and reserves).
net_assetsnumber | nullNet assets (UK balance sheet total).
net_current_assetsnumber | nullNet current assets or liabilities (UK).
total_liabilitiesnumber | nullTotal liabilities; when not tagged, total_assets - total_equity (sources says derived).
current_liabilitiesnumber | nullUK: creditors falling due within one year. DK: short-term liabilities other than provisions. NO: short-term debt. BE: amounts payable within one year.
noncurrent_liabilitiesnumber | nullUK: 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.
employeesnumber | nullAverage number of employees during the year (BE: full-time equivalents). Not in the Norwegian data.
metrics_foundintegerHow many of the normalized metrics were found.
sourcesobjectPer 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.
publishedstring | nullGB: filing date (by company number) or date of the Companies House daily file (newest filings); DK: publication timestamp; BE: filing date; NO: null.
report_urlstring | nullGB (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_urlstring | nullCompany page in the official register (filing history / CVR).
source_documentstring | nullGB: Companies House filing transaction id (by company number) or file name of the accounts inside the daily bulk ZIP (newest filings).
source_urlstringGB: 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_atstringUTC 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

FieldTypeMeaning
countriesarrayRegisters 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.
companyNumbersarrayUK 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).
cvrNumbersarrayDanish CVR numbers, 8 digits, e.g. ["24256790"]. All years are available, newest first. Empty = the newest Danish filings.
orgNumbersarrayNorwegian 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.
enterpriseNumbersarrayBelgian 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.
enrichLeibooleantrue (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.
maxResultsintegerMaximum 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.