Get started
Fundamentals

Financial statements API,
normalized and as filed.

Quarterly and annual income statements, balance sheets and cash flow statements for U.S.-listed companies and, on Pro and above, companies listed in Canada, the UK, France, the Netherlands and Australia, in one normalized shape. Valuation metrics, share counts and, for SEC filers, the as-reported XBRL facts sit beside them, and every query takes a knowledge cutoff.

Three statements, two periods

statement=income, balance_sheet or cash_flow, with period=quarterly or annual.

Normalized concepts

Lines use stable concept IDs such as revenue, gross_profit, operating_income, net_income and ebitda, so one field means the same thing for every company.

As-reported XBRL facts

/v1/financials/facts returns each us-gaap or dei fact exactly as filed with SEC EDGAR, with the accession number of its filing.

Metrics with definitions

Market capitalization, enterprise value, P/E, price-to-book, margins, growth and dividend metrics, each with a published formula.

What the financial statements API returns

Each record is one statement for one issuer and one fiscal period: company_id, period_start, period_end, fiscal_year, fiscal_quarter, period, statement, currency_code, filing_ids, restated and an array of lines. Each line names a concept and carries a value object with value, unit and currency_code. Values are decimal strings, so 109417000000 stays exact in any language. A null value means unavailable, never zero. The source does not establish a fiscal start date, fiscal year or quarter number, or the filing behind a statement, so period_start, fiscal_year and fiscal_quarter are null and filing_ids is empty; period_end and period identify the statement.

Statements belong to the issuer, not the ticker. Pass symbols=XNAS:AAPL and OHLC resolves the listing to its company; pass company_ids when you already hold the ID. The concept IDs and their source-taxonomy mappings are listed by /v1/financials/concepts.

EndpointWhat it answersOne record is
/v1/financials/statementsNormalized income statement, balance sheet and cash flowOne statement per issuer and fiscal period
/v1/financials/metricsValuation, profitability, growth and dividend metricsOne value per metric and observation date
/v1/financials/factsAs-reported SEC XBRL factsOne fact per concept, period, unit and dimension set
/v1/share-statisticsShares outstanding, float, insider and institutional ownership ratiosOne observation per listing and date

Normalized statements and as-reported facts

Normalized statements come from licensed fundamentals sources and map each company's line items onto a common set of concepts. That is the shape a screen, a valuation model or a peer comparison needs: revenue is the same field for Apple and for a regional bank.

When you need the number exactly as the company filed it, use /v1/financials/facts. It reads XBRL financial data from SEC EDGAR and returns each fact with its taxonomy (us-gaap, dei), concept name, unit, fiscal window and the accession number of the filing it came from. Filter by concepts and taxonomy to pull one line item across every period, for example concepts=RevenueFromContractWithCustomerExcludingAssessedTax.

Financial ratios and metrics with stated methodology

/v1/financials/metrics publishes market capitalization, enterprise value, P/E, price-to-book, profit margin, return on equity, revenue growth and a set of dividend metrics: trailing and forward yield, payout ratio, payments per year, five-year growth and streaks. /v1/financials/metric-definitions states every formula. Some metrics are passed through from the source and say so; the ones OHLC calculates list the records they were built from in input_record_ids. Enterprise value is published only when market capitalization and the balance sheet share a currency, because amounts in different currencies are never added.

Restatements and the knowledge cutoff

Companies restate. Every query accepts as_of, a UTC date: the response reflects what OHLC had recorded by the end of that day, so a later restatement never changes an earlier answer and a model rerun next month gets the same inputs. known_from and known_to narrow results to revisions first recorded in a date window, which suits incremental loads. restated marks a restated period when the source says so.

Knowledge history starts when OHLC began recording each dataset, which for statements is late September 2026. An as_of before that returns a point-in-time-unavailable error naming the earliest available cutoff. OHLC does not reconstruct what was knowable in earlier years.

Use cases

  • Valuation models and DCF inputs from quarterly and annual statements.
  • Screens on margins, growth or debt levels across the U.S. market: omit symbols to read the whole entitled universe.
  • Reproducible research: pin as_of so reruns don't drift when a company restates.
  • Auditing a normalized figure against the XBRL fact and accession number behind it.

Plans, history depth and credits

Financial statements, metrics, facts and share statistics are included on every plan, from Free (AAPL, NVDA, JNJ, PEP, MSFT, SPY and QQQ only) through Scale. History depth follows the plan: five years on Free and Developer, 15 years on Pro, full history on Commercial and Scale. On October 3, 2026, Apple's normalized statements reached back to the fiscal period ending September 30, 1985. A query costs 50 credits per symbol, or 500 credits for a page across the whole market. See pricing for the details.

Apple's latest quarterly income statement

RequestcURL
curl 'https://api.ohlc.io/v1/financials/statements?symbols=XNAS:AAPL&statement=income&period=quarterly&order=desc&limit=1' \
  -H "Authorization: Bearer $OHLC_API_KEY"
Response · Illustrative sampleJSON
{
  "data": [
    {
      "id": "record_5be14b152088ecb5d149",
      "company_id": "01M35H2KDW9VT69S5ZCEGMCPAX",
      "period_start": null,
      "period_end": "2026-06-30",
      "fiscal_year": null,
      "fiscal_quarter": null,
      "period": "quarterly",
      "statement": "income",
      "currency_code": "USD",
      "filing_ids": [],
      "lines": [
        { "concept": "revenue", "value": { "value": "109417000000", "unit": "currency", "currency_code": "USD" } },
        { "concept": "gross_profit", "value": { "value": "54770000000", "unit": "currency", "currency_code": "USD" } },
        { "concept": "operating_income", "value": { "value": "35695000000", "unit": "currency", "currency_code": "USD" } },
        { "concept": "net_income", "value": { "value": "29789000000", "unit": "currency", "currency_code": "USD" } }
      ],
      "restated": null
    }
  ],
  "meta": {
    "timezone": "UTC",
    "as_of": "2026-10-03T15:04:21Z",
    "next_cursor": "AfklNAA0ZvYf...",
    "coverage": { "status": "partial", "reason": "Coverage is partial for the entitled query scope." }
  }
}

Prices delayed 15 minutes · Illustrative sample data

Questions, answered.

Is there a free financial statements API?

Yes. The Free plan includes statements, metrics, XBRL facts and share statistics for AAPL, NVDA, JNJ, PEP, MSFT, SPY and QQQ, with five years of history and 12,500 credits a day for personal use, no card required. Developer ($49/month) opens every U.S.-listed stock, and Pro adds Canada, the UK, France, the Netherlands and Australia.

Where does the financial data come from?

Normalized statements and metrics come from licensed fundamentals sources. As-reported facts come from XBRL data filed with SEC EDGAR, and each fact carries the accession number of its filing.

Does the API return trailing-twelve-month (TTM) statements?

No. period is quarterly or annual. Four quarters of the source do not always add up to its annual statement, cash flow lines in particular, so OHLC does not publish a sum it cannot stand behind. Sum the last four quarters yourself where they reconcile to the annual figure.

Can I load financial statements into Excel or Google Sheets?

Yes. Add format=csv and the rows come back with a header row, nested fields flattened into dotted columns. See Excel and Google Sheets.

Does the API include revenue by business segment?

Not yet. The revenue segments endpoint is documented but returns 501 until a source is connected. Consolidated revenue is available today in statements and facts.

A little JSON.
A lot of possibility.

Explore the API