Belgium NBB Annual Accounts & Financial Health Score avatar

Belgium NBB Annual Accounts & Financial Health Score

Pricing

from $5.00 / 1,000 balance sheet scrapeds

Go to Apify Store
Belgium NBB Annual Accounts & Financial Health Score

Belgium NBB Annual Accounts & Financial Health Score

Get the latest Belgian annual accounts from the National Bank of Belgium (CBSO) for any enterprise number, parsed into key figures, liquidity and solvency ratios and a transparent 0-100 financial health score. Invalid numbers and companies without structured filings are free.

Pricing

from $5.00 / 1,000 balance sheet scrapeds

Rating

0.0

(0)

Developer

goober

goober

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Belgian company data API: annual accounts, ratios and financial health score

Look up Belgian companies by enterprise number and get their latest filed annual accounts as clean JSON. Built for credit and counterparty checks, sales teams and analysts who need official figures without reading PDFs. You get key balance-sheet and income-statement figures, standard ratios and a transparent 0-100 health score.

The data comes from the National Bank of Belgium (NBB) Central Balance Sheet Office. Figures are the rubric codes of the filed accounts, and anything a filing does not report is null.

Why use this Actor

  • Official source: the NBB's public Consult service, not a third-party aggregator.
  • Any number format: 0403.227.515, BE0403227515, 10 or 9 digits. Numbers are checked with the mod-97 check digits before any request.
  • Multi-year view: the last 1 to 10 fiscal years per company in one run.
  • Free rows for failures: invalid numbers, companies without filings and errors cost nothing.
  • No API key, proxy or browser: plain HTTP, about 1 request per second.

Quick start

Click Start with the prefilled input:

{ "enterpriseNumbers": ["0403.227.515", "BE0402206045"], "filingsPerCompany": 1, "maxItems": 5 }

You get 2 dataset items (KBC Groep and Delhaize) with key figures, ratios and a health score. It takes about 5 seconds.

What you get

One dataset item per filed balance sheet (status: "ok"). Inputs that cannot be resolved give a free status row: invalid_enterprise_number, duplicate, skipped_max_items, no_filings, no_structured_filings or error.

FieldMeaning
enterpriseNumber, enterpriseNumberFormatted, name, legalForm, addressIdentity as stated in the filing
filing.fiscalYearCalendar year of the fiscal year end (a year ending 2025-03-31 is 2025)
filing.reference, depositDate, periodStart, fiscalYearEnd, modelCode, modelName, depositType, currencyFiling metadata (m02-f full model, m87-f micro model, others possible)
keyFiguresNamed figures from rubric codes (table below)
keyFiguresPreviousYearComparative values the same filing prints for the previous year (only some rubrics; may be null)
ratioscurrentRatio, quickRatio, solvencyPct, debtToEquity, operatingMarginPct, netMarginPct, returnOnEquityPct, returnOnAssetsPct
healthScorescore (0-100 or null), band, coverage, per-component points, flags
sourceUrlThe exact NBB CSV export the figures came from

Input fields: enterpriseNumbers (required), filingsPerCompany (1-10, default 1), maxItems (default 50), includeAllRubrics (default false, adds raw rubrics and rubricsPreviousYear), requestDelaySecs (default and minimum 1).

Rubric codes used (verified on real filings)

Key figureRubricNotes
totalAssets20/58Equals 21/28 + 29/58 (checked on a real filing)
equity10/15Equals capital + premiums + reserves + result carried forward (checked)
totalLiabilities / totalDebts / longTermDebts / currentDebts10/49 / 17/49 / 17 / 42/48
fixedAssets, currentAssets, inventories, tradeAndOtherReceivables, currentInvestments, cashAtBankAndInHand21/28, 29/58, 3, 40/41, 50/53, 54/58
turnover70Not filed by micro companies (m87-f): null
operatingIncome70/76A
grossMargin9900Only for companies using the gross-margin presentation
operatingResult9901
profitBeforeTax / incomeTaxes / netResult9903 / 67/77 / 99049904 = 9903 - 67/77 (checked)
personnelCosts, depreciation62, 630
fte9087, falling back to 1003Average FTE from the social balance sheet

Financial health score (formula)

A simple, fully visible heuristic. It is not a credit rating.

ComponentMax pointsRule (linear between the bounds, clamped)
Solvency30equity (10/15) / total assets (20/58): 0 points at 0% or below, 30 at 40% or above
Liquidity25current assets (29/58) / current debts (42/48): 0 points at 0.5 or below, 25 at 1.5 or above. Full points if current debts are exactly 0 and current assets are above 0
Profitability25net result (9904) / total assets: 0 points at -5% or below, 25 at 8% or above
Operating result109901 > 0: 10 points, otherwise 0
Equity1010/15 > 0: 10 points, otherwise 0

score = round(points earned / max points of the components that could be computed * 100, 1). coverage is the share of the 100 points that could be computed; below 0.5 the score is null. Bands: 80+ excellent, 60+ good, 40+ moderate, 20+ weak, below 20 critical. flags can contain negativeEquity, operatingLoss, netLoss, currentRatioBelow1.

Other ratios: quickRatio = (40/41 + 50/53 + 54/58) / 42/48 (a missing rubric counts as 0 inside the sum, null if all three are missing); solvencyPct = 10/15 / 20/58 * 100; debtToEquity = 17/49 / 10/15 (positive equity only); margins use turnover 70, or 70/76A if there is no turnover; returnOnEquityPct needs positive equity. Division by zero gives null.

Sample output (real run, 2026-10-18)

Input: {"enterpriseNumbers": ["BE0402206045"], "filingsPerCompany": 1}

{
"status": "ok",
"input": "BE0402206045",
"enterpriseNumber": "0402206045",
"enterpriseNumberFormatted": "0402.206.045",
"name": "Delhaize Le Lion/De Leeuw",
"legalForm": "Naamloze vennootschap",
"address": { "street": "Brusselsesteenweg", "number": "347", "postalCode": "1730", "city": "Asse", "country": "België" },
"filing": {
"reference": "2026-00158106",
"depositId": "65334ee0-632f-11f1-b5ca-e3295b0e7b47",
"depositDate": "2026-06-08T11:47:56.043Z",
"fiscalYear": 2025,
"periodStart": "2025-01-01",
"fiscalYearEnd": "2025-12-31",
"modelCode": "m02-f",
"modelName": "Volledig model kapitaalvennootschap",
"depositType": "Initial",
"language": "nl",
"currency": "EUR",
"generalAssemblyDate": "2026-05-28",
"importFileType": "ZIP",
"taxonomy": "Modellen 2021 (25.0.12)",
"liquidationFlag": false,
"correctionFlag": false
},
"keyFigures": {
"totalAssets": 2023612498.52,
"fixedAssets": 824073807.0,
"currentAssets": 1199538691.52,
"inventories": 156510451.45,
"tradeAndOtherReceivables": 628133622.49,
"currentInvestments": null,
"cashAtBankAndInHand": 352880812.95,
"equity": 239392751.69,
"totalLiabilities": 2023612498.52,
"totalDebts": 1745628523.86,
"longTermDebts": 171871263.45,
"currentDebts": 1555728055.26,
"turnover": 5492209172.95,
"operatingIncome": 5757488503.08,
"grossMargin": null,
"operatingResult": 207342298.47,
"profitBeforeTax": 191447663.03,
"incomeTaxes": 13782493.6,
"netResult": 177827804.16,
"personnelCosts": 326883544.17,
"depreciation": 124017144.0,
"fte": 3423.3
},
"keyFiguresPreviousYear": { "fte": 6013.7 },
"ratios": {
"currentRatio": 0.77,
"quickRatio": 0.63,
"solvencyPct": 11.83,
"debtToEquity": 7.29,
"operatingMarginPct": 3.78,
"netMarginPct": 3.24,
"returnOnEquityPct": 74.28,
"returnOnAssetsPct": 8.79
},
"healthScore": {
"score": 60.6,
"band": "good",
"coverage": 1.0,
"components": [
{ "name": "solvency", "points": 8.9, "maxPoints": 30.0, "available": true, "basis": "equity / total assets: 0 pts at <= 0%, full at >= 40%" },
{ "name": "liquidity", "points": 6.8, "maxPoints": 25.0, "available": true, "basis": "current ratio: 0 pts at <= 0.5, full at >= 1.5" },
{ "name": "profitability", "points": 25.0, "maxPoints": 25.0, "available": true, "basis": "net result / total assets: 0 pts at <= -5%, full at >= 8%" },
{ "name": "operatingResult", "points": 10.0, "maxPoints": 10.0, "available": true, "basis": "operating result (9901) > 0: full points, otherwise 0" },
{ "name": "equity", "points": 10.0, "maxPoints": 10.0, "available": true, "basis": "equity (10/15) > 0: full points, otherwise 0" }
],
"flags": ["currentRatioBelow1"]
},
"sourceUrl": "https://consult.cbso.nbb.be/api/external/broker/public/deposits/consult/csv/65334ee0-632f-11f1-b5ca-e3295b0e7b47",
"scrapedAt": "2026-10-18T22:15:50Z"
}

Pricing

Pay per event: $5.00 per 1,000 balance sheets (event balance-sheet-scraped, $0.005 each). You are charged once for each item with status: "ok". Invalid numbers, duplicates, skipped inputs, companies without filings and errors are free status rows. maxItems caps the number of charged items per run.

Example: 100 companies with filingsPerCompany: 3 returns up to 300 balance sheets, which is at most $1.50. The prefilled run (2 companies, 1 filing each) costs $0.01.

Use with AI agents (MCP, Claude, Cursor, n8n, Make)

AI agents can call this Actor through the Apify MCP server. Add it to your MCP client config (you sign in with OAuth in the browser on first use):

{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=goobertje/belgium-nbb-financial-scorer" } } }

Example prompts and the input each one maps to:

  • "How financially healthy is the company with number BE0402.206.045?" -> { "enterpriseNumbers": ["BE0402206045"] }
  • "Show the last 3 years of accounts and score for 0403.227.515." -> { "enterpriseNumbers": ["0403227515"], "filingsPerCompany": 3 }
  • "Check these two suppliers and give me the raw rubric codes too." -> { "enterpriseNumbers": ["0403227515", "0402206045"], "includeAllRubrics": true }

In n8n, Make or Zapier, use the Apify node or module, pick this Actor and paste the same JSON.

Use cases

  • Credit and counterparty checks on Belgian customers and suppliers (KYB).
  • Ranking sales leads by company size and financial strength.
  • Multi-year trend screening for investment, M&A and competitor research.
  • Enriching a CRM or data warehouse with official statutory figures.

FAQ

Where does the data come from and is it allowed? From the NBB Central Balance Sheet Office, which publishes annual accounts free of charge. The Actor uses the public endpoints behind consult.cbso.nbb.be. NBB's copyright notice allows reuse if the content is accurate and NBB is named as source.

How fresh is it? Accounts appear when companies deposit them, usually within 7 months of year end. The Actor returns what NBB publishes at run time.

What does a typical run cost? About $0.005 per balance sheet. Ten companies with the latest year cost $0.05.

What if the source blocks or changes? After repeated 403/429 answers the run stops with a clear message and keeps the items already pushed. It never tries to get around blocking.

Can I schedule it or get only new items? You can schedule runs with Apify schedules. There is no built-in delta mode, so compare filing.reference or filing.depositId between runs yourself.

What is not included? Consolidated accounts, PDF-only or paper filings, annual-report text, directors and shareholders.

Limits and honest caveats

  • Statutory (non-consolidated) accounts only. Consolidated accounts are skipped.
  • Only structured filings carry figures. Many large groups and older filings are deposited as PDF, paper or microfilm. The Actor skips them, uses the next most recent structured filing, and returns a free no_structured_filings row if there is none.
  • A deposit only counts as a balance sheet if it holds at least one core figure (total assets, equity, current assets or net result). Otherwise it is skipped and the next one is tried.
  • If a later year fails to download, earlier years already collected are still returned.
  • One filing per fiscal year: when a company filed both Dutch and French versions or a correction, the most recently deposited one is used.
  • Non-profit and other models (associations, foundations) have different rubrics; unreported figures are null and the score may be null (low coverage).
  • Amounts are in the filing currency (normally EUR), not rescaled.
  • Throughput: roughly 2-3 requests per filing at 1 request per second.

The Actor uses only the public endpoints behind consult.cbso.nbb.be, honours robots.txt (the site publishes no crawl restrictions), identifies itself in its User-Agent, limits itself to about 1 request per second and stops on repeated 403/429 responses. The same data remains available free of charge from the NBB site.

Source: National Bank of Belgium, Central Balance Sheet Office. This Actor is not affiliated with, endorsed by or sponsored by the National Bank of Belgium. The health score is an automated heuristic for screening, not a credit rating, financial advice or a statement about any company's solvency. Filed accounts may contain errors or be outdated. Check the original filing before relying on it. Personal data in filings is public company data, but you are responsible for GDPR-compliant use.

Found a problem or want a field added? Open an issue on the Actor page.