Stocks tool

PublicView as Markdown

stocks_get_income_statements

Normalized income statements for one US public company, newest first.

Description

Normalized income statements for one US public company, newest first.

Address the company by ticker or by SEC CIK: a CIK reaches a filer whose symbol now belongs to a different company (or that has no ticker at all), which a symbol alone cannot.

The result is the shared response envelope: data holds the company identity (ticker, cik, company_name, period_type, reporting_standard) and the bounded statements list; ticker is the company's active symbol, or null when it has none; reporting_standard is us-gaap, ifrs-full, or null when legacy rows have not observed the taxonomy yet. meta holds result-level provenance (source: "sec_edgar_companyfacts", and as_of, the freshest line-level timestamp on this page); pagination holds the cursor paging state. To page, pass pagination.next_cursor back as cursor; when pagination.has_more is false, next_cursor is null and you have reached the oldest period.

Set as_reported=true to serve as-originally-reported values instead of the latest restated values, and keep it constant while paging. Before a company's next statement ingest this mode raises out_of_coverage. In both modes, meta.restatements lists restated reported lines with original and superseding accessions. Arithmetic-derived Q4, non-fiscal-year TTM, YTD-difference, and FCF lines carry null lineage; a TTM matching a reported fiscal year carries the annual accessions.

Each statement is one fiscal period with a lines object keyed by canonical line names (revenue, cost_of_revenue, gross_profit, operating_income, net_income, eps_basic, eps_diluted, shares_basic, shares_diluted). A missing key means the company did not report that line for the period — never zero. Each value carries value (exact decimal as a JSON string), unit, currency, as_of, and the source filing's accession_number; data is normalized from SEC EDGAR XBRL. currency is the as-filed reporting currency on every value; IFRS filers report in their home currency (EUR/TWD/JPY, etc.) and values are never silently converted to USD.

Known IFRS 20-F/FPI filers are annual-only: request period="annual". For them, period="quarterly" raises out_of_coverage; period="ttm" is valid for income statements but returns an empty list because IFRS statement mappers are annual-only.

The default is 4 fiscal periods and the maximum is 12. Example: stocks_get_income_statements(ticker_or_cik="AAPL", period="annual", as_reported=true).

Errors carry a machine code: unknown_entity for a well-formed symbol we hold no mapping for, or a CIK we hold no company for (resolve the symbol first if unsure), out_of_coverage when as_reported is requested before the company's first vintage-era statement ingest or quarterly data is requested for a known IFRS filer, and bad_parameter for input the schema can't reject (a non-ticker, non-CIK string or a malformed cursor).

Parameters

Input schema advertised to MCP clients and mirrored by the REST query string.

NameTypeRequiredDefaultConstraintsDescription
ticker_or_cikstringYes——An exact ticker ('AAPL', 'BRK.B' — class separators accepted) or a numeric SEC CIK ('320193', zero-padded accepted). Use the CIK for a filer whose ticker was reused by another company, or that has no ticker at all. For a company *name*, call stocks_search_tickers first — this tool does not fuzzy-match.
period"annual" | "quarterly" | "ttm"No"annual"—Fiscal frame: 'annual' = full fiscal years (FY), 'quarterly' = fiscal quarters (Q1–Q4), 'ttm' = trailing twelve months (rolled up from quarters where available; returns no statements when none is computable, including IFRS filers). Known 20-F/FPI IFRS filers report annual statements only; quarterly requests raise `out_of_coverage`.
limitintegerNo4min 1, max 12Fiscal periods to return, newest first (1–12).
cursorstring | nullNonull—Opaque pagination cursor from a previous response's `pagination.next_cursor`; omit to start from the newest period.
as_reportedbooleanNofalse—Serve as-originally-reported values instead of latest restated values. Keep this constant while paging. Before the next statement ingest, this mode raises `out_of_coverage`. Reported restatements carry original and superseding accessions; arithmetic-derived Q4, non-fiscal-year TTM, YTD-difference, and FCF lines carry null lineage, while a TTM matching a reported fiscal year carries the annual accessions.

Provenance

Sources behind every value this tool returns.

Dataset registry: stocks_fundamentals