Skip to main content
/financials returns every statement in one call, as maps of line key → row, with values keyed by period label. Turn that into a DataFrame once and everything else is pandas.
Row keys are the standardized vocabulary (std:revenue, std:cost_of_revenue, std:gross_profit, std:cfo, …) — the same keys fact-source accepts, so any cell in the frame can be cited: statement=income_statement&key=std:revenue&end_date=<column>. The filer’s own XBRL lines (us-gaap:Revenues) sit in the same map with a parent_key; the filter above keeps only the standardized rows. Values are in fin["reporting_currency"].

Handle limits like a good citizen

Watch X-Quota-Remaining on quota-carrying plans, and remember: one /financials call returns whole statements — never page line by line.

Discrete or cumulative quarters

The default (reporting_basis=individual) gives discrete three-month figures. If you want the year-to-date column exactly as each 10-Q prints it, add reporting_basis=as_reported. Annual columns are the same either way.

As originally reported

Backtesting against what the market knew at the time? /financials serves the latest restated value for every period. For the originally filed figures use the as-filed view:
Add format=csv or format=xlsx to download the grid instead. Macro endpoints are point-in-time by construction — no look-ahead there either.