Skip to main content
Segment data comes from the same filings as the statements, through a gated engine that decides which breakdown is real: every block must reconcile to the consolidated figure, member identity survives renames, and the intersegment-elimination row is seated only when it makes the block tie. Blocks that fail are held and never served. Two views expose it: a latest-breakdown card per axis, and the full history inside the segments_kpis statement of /financials.

Latest breakdown

No parameters. segment-revenue tries the business axes in order — PRODUCT, SEGMENT, BRAND, CHANNEL — and returns the freshest annual block it finds; regional-revenue does the same for GEOGRAPHY. Either is null when nothing is served.
  • items[].member is the stable row identity (display names can collide and change). isResidual marks the consolidated-minus-members remainder; isReconciling marks the filer’s own elimination line (negative, not a segment).
  • consolidatedRevenue is the denominator for shares. It is null when the top line is not revenue: banks, insurers and lessors have no revenue breakdown, so their reported segment top line stands in — metricKey is then NET_INTEREST_INCOME, PREMIUMS_EARNED, LEASE_INCOME or REVENUE_FTE, labelled as what it is.
  • source is the citation: the filing accession (or the source document for a non-SEC issuer), what the block was built from (sourceTag), which vintage is serving (current, or the displaced original while the current is held), and for Q4 blocks how the quarter was produced.
Blocks read from investor presentations look the same and say so:
That is Almarai (XSAU000001), in SAR, cited to page 19 of the deck the number was read from. See Investor presentations.

Full history: the segments_kpis statement

Inside GET /companies/{id}/financials, financials.segments_kpis.data holds every served segment block and every disclosed KPI, laid across the same period columns as the statements. Row keys encode what each row is: Axes are SEGMENT, PRODUCT, GEOGRAPHY, BRAND and CHANNEL; metrics include REVENUE, OPERATING_INCOME, DEPRECIATION_AMORT, GOODWILL, LONG_LIVED_ASSETS and the top-line families above. Reconciling rows carry negated: true and sort last; non-money rows carry no_scale. Where a cell was derived — a fourth quarter, a discrete quarter from year-to-date figures, a share — calc[<column>] shows the arithmetic. Annual blocks are always served on the as-reported basis; quarterly blocks follow the reporting_basis you asked for.

Disclosed KPIs

Issuers print numbers in results releases and decks that never appear in the statements — a bank’s net interest margin, cost of risk, NPL ratio, coverage, CET1, LCR, advances-to- deposits ratio and gross loans; a Saudi issuer’s results-announcement headline figures (“Net profit after zakat and tax”); like-for-like growth, adjusted EBITDA and operating counts from presentations. These reach the API only through kpi:: and kpim:: rows. Ratios are stored as fractions and served in the unit a reader expects (percent to two decimals, cost of risk in basis points, gross loans as a currency level in the statement’s scale). A statement-shaped KPI (revenue, net income) is served only where it ties the served statement column beside it. KPIs are not served on the semiannual cadence.

Citing a segment or KPI cell

Every row key is a fact-source key:
Segment provenance values: segment_filed, segment_derived_q4, segment_residual, segment_reconciling, segment_note (read from a filing-note table), segment_deck (read from a presentation), segment_derived_period, segment_derived_share. A kpi:: row returns kpi_press_release with the release’s document reference, page and printed text. source_tags on a segment row also carries vintage=<current|original> and, for a fourth quarter, q4=<provenance> tokens.

Monthly revenue

Taiwan-listed companies file revenue monthly. The response is { monthly_revenue: { currency, points[{ period, value, yoy, note }], attribution, licenseUrl, providerName, latestSourceDate } }; companies without a monthly series return 404.