Income Statement API

The Income Statement API returns the profit and loss of one company for each reporting period. An income statement summarizes revenue, expenses, and profit over a period. Every record is built from the official filing: the 10-K or 10-Q for US companies, or the local equivalent in other markets. The API covers annual and quarterly periods. Each filed statement is normalized into more than 40 line items, including revenue, cost of goods sold, gross profit, operating income, net income, EPS, and EBITDA. The same schema applies to every company, so results are comparable across markets and years.

New periods appear when the company files, not when it reports earnings. A press release or earnings call is not a source. All values are stated in the company's reporting currency, named by the currency field. For ADRs, the reporting currency often differs from the currency the stock trades in.

GET/v3.0.0/fundamental/income-statement/{identifier}

Plan Access

Free

(Your plan)

Individual

$29/mo

Professional

$89/mo

Plan History

Free

(Your plan)

2 years, annual only

Individual

$29/mo

5 years · 20 quarters

Professional

$89/mo

All available

Request
curl "https://api.roic.ai/v3.0.0/fundamental/income-statement/NASDAQ:AAPL?apikey=YOUR_API_KEY&period_type=annual&fiscal_year.gte=2025&fiscal_year.lte=2025"
Response
200 OK
{
  "data": [
    {
      "id": "fnd_N7wh3Ukmc6CRKm",
      "symbol": "NASDAQ:AAPL",
      "period_type": "annual",
      "period_end_date": "2025-09-30",
      "fiscal_year": 2025,
      "period_label": "FY",
      "currency": "USD",
      "price_currency": "USD",
      "fx_applied": false,
      "object": "v3.fundamentals.income_statement",
      "is_sales_revenue_turnover": 416161000000,
      "is_sales_and_services_revenues": 416161000000,
      "is_cogs": 220960000000,
      "is_cog_and_services_sold": 220960000000,
      "is_gross_profit": 195201000000,
      "is_other_oper_income": 0,
      "is_operating_expn": 62151000000,
      "is_sg_and_a_expense": 27601000000,
      "is_operating_expenses_r_and_d": 34550000000,
      "is_other_operating_expenses": 0,
      "is_oper_income": 133050000000,
      "is_nonop_income_loss": 321000000,
      "is_net_interest_expense": null,
      "is_int_expense": null,
      "is_int_income": null,
      "is_other_nonop_income_loss": 321000000,
      "is_pretax_income": 132729000000,
      "is_inc_tax_exp": 20719000000,
      "is_inc_loss_affil": null,
      "is_inc_bef_xo_item": 112010000000,
      "is_xo_gl_net_of_tax": 0,
      "is_discontinued_operations": null,
      "is_extraord_items_and_acctg_chng": 0,
      "is_ni_including_minority_int_ratio": 112010000000,
      "is_min_noncontrol_interest_credits": null,
      "is_net_income": 112010000000,
      "is_tot_cash_pfd_dvd": null,
      "is_other_adjustments": null,
      "is_earn_for_common": 112010000000,
      "is_avg_num_sh_for_eps": 14948500000,
      "eps": 7.49305950429809,
      "eps_cont_ops": 7.49305950429809,
      "is_sh_for_diluted_eps": 15004697000,
      "diluted_eps": 7.464995794316939,
      "dil_eps_cont_ops": 7.464995794316939,
      "ebitda": 144748000000,
      "ebitda_margin": 34.78173110887373,
      "ebita": 133050000000,
      "ebit": 133050000000,
      "gross_margin": 46.90516410716045,
      "oper_margin": 31.970799762591884,
      "profit_margin": 26.91506412181824,
      "actual_sales_per_empl": null,
      "div_per_shr": 1.0316085225942402,
      "is_depr_exp": 11698000000
    }
  ],
  "next_page_url": null,
  "previous_page_url": null
}

Coverage

More than 95,000 tickers on US and international exchanges have income-statement history in the API.

For the median ticker, the history contains 19 annual and 56 quarterly income statements. For the average ticker, it contains 20 annual and 57 quarterly income statements.

Coverage grows with company size: 99% of listed tickers above a $10 billion market cap have data. The two tables below give the coverage for each region and each market-cap bucket.

Coverage by region

Each row counts the listed tickers from one region and the subset with income-statement data. A company belongs to the region of its home country, not the country of its exchange.

RegionListed tickersCoveredCoverage
US & Canada35,59432,42691.1%
Europe24,27421,59188.9%
Asia / Pacific42,57037,34287.7%
Latin America3,0002,32777.6%
Africa / Middle East2,6411,91072.3%

Coverage by market-cap bucket

Each bucket groups the listed tickers by market cap, converted to USD. Coverage increases with company size.

BucketListed tickersCoveredCoverage
≥ $10bn16,59316,43599.0%
$1–10bn19,24418,48196.0%
$100m–$1bn21,25819,53791.9%
< $100m30,85524,75980.2%

Parameters

Path parameters

identifierstringrequired

A ticker ID, an exchange and symbol separated by a colon (e.g. NASDAQ:AAPL), or a FIGI.

Examples: NASDAQ:AAPLtkr_cO46h8pgSu9QqyBBG000B9XRY4

Query parameters

period_typestringoptional

Financial period cadence.

Default: annualValues: annualquarterlyttm
period_labelstringoptional

Filter quarterly data to one fiscal quarter. Use this parameter only with period_type=quarterly.

Values: Q1Q2Q3Q4
datestringoptional

Pass a YYYY-MM-DD date directly for an exact period-end-date match. For a range, combine the modifiers below, for example, date.gte=2020-01-01&date.lt=2026-01-01.

+ Show filter modifiers
date.gtestring

Return statements whose period end date is on or after this date.

date.gtstring

Return statements whose period end date is strictly after this date.

date.ltestring

Return statements whose period end date is on or before this date.

date.ltstring

Return statements whose period end date is strictly before this date.

fiscal_yearobjectoptional

Filter by fiscal year. Combine the range modifiers below to select the reporting years you need.

+ Show filter modifiers
fiscal_year.gteinteger

Return statements for the specified fiscal year and all later fiscal years.

fiscal_year.gtinteger

Return statements only for fiscal years after the specified year.

fiscal_year.lteinteger

Return statements for the specified fiscal year and all earlier fiscal years.

fiscal_year.ltinteger

Return statements only for fiscal years before the specified year.

orderstringoptional

Sort by period end date (period_end_date).

Default: descValues: ascdesc
limitintegeroptional

Maximum number of resources to return.

Default: 50Min: 1Max: 100
pagestringoptional

Token to request the next page of data. Each response returns ready-made next_page_url and previous_page_url (null on the last and first page, respectively) that repeat your filters with this token. They are relative and carry no credentials: prefix the API host and pass apikey separately, or keep sending your Authorization header.

Response

Each normalized income-statement line item is a top-level field on the period resource. Missing values are null.

Response fields

dataarray of objects

Array of financial period resources for the current page, one per reporting period.

+ Show child attributes
idstring

Unique identifier for the financial period record, beginning with fnd_. Store it as the stable reference to this period's figures.

symbolstring

Qualified symbol combining the exchange code and ticker separated by a colon, e.g. NASDAQ:AAPL.

period_typestring

Cadence of the period: annual for full fiscal years, quarterly for fiscal quarters, or ttm for trailing-twelve-month aggregates.

period_end_datestring

Last calendar day of the financial period, in YYYY-MM-DD format.

fiscal_yearnumber

Fiscal year the period belongs to, e.g. 2025. Fiscal years may not align with calendar years; Apple's fiscal 2025 ends in September 2025.

period_labelstring

Label of the period within the fiscal year: FY for annual periods, or Q1 through Q4 for quarters.

currencystring

ISO 4217 code of the currency the financial values are reported in, e.g. USD.

price_currencystring

ISO 4217 code of the currency used for price-derived values such as market capitalization. It can differ from currency when the listing trades in another currency.

fx_appliedboolean

Whether metric values were converted from the company's reporting currency. false means the figures are as originally reported.

objectstring

String representing the object's type, e.g. v3.fundamentals.income_statement. Each fundamentals endpoint returns its own object type.

is_sales_revenue_turnovernumber

Sales/Revenue/Turnover: The money a company makes from selling its goods or services after taking out the costs of refunds, price reductions, and taxes on sales.

is_sales_and_services_revenuesnumber

Sales & Services Revenue: The money a company makes from selling its goods or providing its services after taking out the costs of refunds, price reductions, and taxes on sales.

is_cogsnumber

Cost of Revenue: The direct expenses involved in making the products that a company sells are called cost of goods sold (COGS).

is_cog_and_services_soldnumber

Cost of Goods & Services: The direct costs associated with providing services or producing goods that a company sells are called cost of goods and services (COGS).

is_gross_profitnumber

Gross Profit: The money a company makes from selling its products or services, minus the money it spends to produce or buy them.

is_other_oper_incomenumber

Other Operating Income: Money that the company makes from activities that are not its main business, such as renting out property or getting royalties.

is_operating_expnnumber

Operating Expenses: Money that the business spends on things that are not directly related to making its products or services.

is_sg_and_a_expensenumber

Selling, General & Admin: Money that the business spends on things like marketing, salaries, rent, utilities, and office supplies.

is_operating_expenses_r_and_dnumber

Research & Development: Money that the business spends on things like inventing new products, improving existing ones, or finding new ways to make them.

is_other_operating_expensesnumber

Other Operating Expense: The amount that the business spends on things that are not directly related to making its products or services, but are not included in selling and administrative expenses or research and development expenses.

is_oper_incomenumber

Operating Income (Loss): Operating income is a measure of how much profit a business makes from its core operations.

is_nonop_income_lossnumber

Non-Operating (Income) Loss: Any money that a company loses or earns from activities that are not related to its main business.

is_net_interest_expensenullable

Interest Expense, Net: The amount that the business pays or receives for borrowing or lending money.

is_int_expensenullable

Interest Expense: The money an entity pays for borrowing funds from others.

is_int_incomenullable

Interest Income: The money an entity earns from lending funds to others.

is_other_nonop_income_lossnumber

Other Non-Op (Income) Loss: The money an entity gains or loses from activities that are not related to its main business operations and appear on the income statement.

is_pretax_incomenumber

Pretax Income: The amount of money a company makes from its business activities before paying taxes.

is_inc_tax_expnumber

Income Tax Expense (Benefit): This is the amount of money that the company pays or gets back from the government based on its income.

is_inc_loss_affilnullable

(Income) Loss from Affiliates: (Income) Loss from Affiliates is the amount of profit or loss that a company recognizes from its investments in other companies that it does not control but has significant influence over.

is_inc_bef_xo_itemnumber

Income (Loss) from Cont Ops: How much money a company made or lost without counting the effects of unusual events like selling a business unit, changing accounting rules, or natural disasters.

is_xo_gl_net_of_taxnumber

Net Extraordinary Losses (Gains): How much money a company lost or gained from unusual events after paying or saving taxes.

is_discontinued_operationsnullable

Discontinued Operations: Discontinued Operations are parts of a company’s core business or product line that have been divested or shut down, and which are reported separately from continuing operations on the income statement.

is_extraord_items_and_acctg_chngnumber

Extraord. & Accounting Changes: Extraord. & Accounting Changes is a line item on the income statement that shows the net effect of any extraordinary items and accounting changes on the net income of the company.

is_ni_including_minority_int_rationumber

Income (Loss) Incl. MI: Income (Loss) Including Minority Interest reflects the parent company’s share of the net income or loss of its subsidiaries before accounting for the minority interest.

is_min_noncontrol_interest_creditsnullable

Minority Interest: The share of a subsidiary company that belongs to outside investors and not the parent company.

is_net_incomenumber

Net Income, GAAP: The amount of money the company made after paying all its expenses.

is_tot_cash_pfd_dvdnullable

Preferred Dividends: The money that a company pays to its preferred shareholders.

is_other_adjustmentsnullable

Other Adjustments: Includes any changes to net income (except for preferred dividends) that are needed to get Basic Net Income for Common Shareholders.

is_earn_for_commonnumber

Net Income Avail to Common, GAAP: The money that a company earns after paying all its expenses and taxes, and after giving some money to its preferred shareholders.

is_avg_num_sh_for_epsnumber

Basic Weighted Avg Shares: The average number of shares that a company has during a period, without counting any shares that can be created from other securities (such as bonds or options).

epsnumber

Basic EPS, GAAP: The amount of money that a company earns for each share of its common stock.

eps_cont_opsnumber

Basic EPS from Cont Ops: The amount of money that a company earns from its regular business activities for each share of its common stock.

is_sh_for_diluted_epsnumber

Diluted Weighted Avg Shares: The number of shares that a company would have if all the securities that can be turned into shares were actually turned into shares.

diluted_epsnumber

Diluted EPS, GAAP: A measure of how much money a company earns for each share of its stock, assuming that all the securities that can be turned into shares were actually turned into shares.

dil_eps_cont_opsnumber

Diluted EPS from Cont Ops: A measure of how much money a company earns from its regular business activities for each share of its stock, assuming that all the securities that can be turned into shares were actually turned into shares.

ebitdanumber

EBITDA: EBITDA stands for earnings before interest, taxes, depreciation, and amortization.

ebitda_marginnumber

EBITDA Margin (%): EBITDA Margin is a measure of how much profit a company makes from its core operations as a percentage of its revenue.

ebitanumber

EBITA: EBITA is a measure of company profitability that excludes some expenses, such as interest on loans, taxes due, and depreciation on tangible assets like equipment or buildings.

ebitnumber

EBIT: EBIT stands for Earnings Before Interest and Taxes.

gross_marginnumber

Gross Margin (%): Gross margin is a way to measure how much money a company keeps from its sales after paying for the direct costs of making or buying its products.

oper_marginnumber

Operating Margin (%): Operating margin is a way to measure how well a company can turn its sales into profits after paying for its main costs of doing business.

profit_marginnumber

Profit Margin (%): Net income to revenue ratio shows how much of the money a company makes from its sales is left as profit after paying all the expenses.

actual_sales_per_emplnullable

Sales per Employee: Revenue per employee shows how much money each employee makes for the company in a given period.

div_per_shrnumber

Dividend per Share: Dividend Per Share is a way to measure how much money a company pays out in dividends for each share of its common stock.

is_depr_expnumber

Depreciation Expense: The cost of using a fixed asset (such as a building or a machine) over its useful life.

next_page_urlnullable

URL of the next page of results, or null on the last page. Request it unchanged to continue paging.

previous_page_urlnullable

URL of the previous page of results, or null on the first page. Request it unchanged to page back.

Use cases

  • Valuation models: Calculate earnings multiples from normalized line items. For example, divide the stock price by diluted_eps to get the P/E ratio. Use ebitda in EV/EBITDA models.
  • Margin analysis: Track margins across periods. For example, divide is_gross_profit by is_sales_revenue_turnover to get the gross margin. The response also includes gross_margin, oper_margin, and profit_margin.
  • Screening: Filter companies by growth and profitability in US and international markets. For example, request period_type=quarterly for a retailer. Find each quarter where is_operating_expn increases faster than revenue.
  • AI agents: Connect an LLM to the roic.ai MCP server. The get_income_statement tool returns the same normalized fields. For example, ask Claude for the revenue growth of Apple. The agent then calls this tool.

FAQ

The API adds a period when the official filing (10-Q, 10-K, or a local equivalent) is available, usually one to two days after the filing date. The earnings call and the press release do not add data, because the API reads only the filing. For example, Alphabet reports Q3 results in a press release first. The Q3 income statement appears in the API after Alphabet files its 10-Q.

Values are in the currency that the company reports in. The currency field gives this currency as an ISO 4217 code. This is not always the currency of the stock quote. For example, the ADR of Toyota trades in USD on the NYSE, but Toyota reports in JPY. To get statements and prices in one currency, query the primary listing, TSE:7203.

The API returns standardized figures. Each filed statement maps into one schema, so the same field names apply to every company. The schema combines some sector-specific lines. For example, the interest income and fee income of a bank map into is_sales_revenue_turnover. Amendments are included: when a company amends a filing, the API stores the amended values. When fx_applied is false, the API applies no currency conversion.

You get the values as the company last reported them. A later filing can restate an earlier period. In that case, the record for the earlier period changes to the restated values. The API keeps one version of each period, not a point-in-time archive. The calculated_at field gives the time of the last update.

The company did not report that line item for that period. Which detailed lines a company reports depends on its sector and market. A bank, for example, reports no cost of goods sold, so is_cogs is null. Top-level items, such as is_sales_revenue_turnover and is_net_income, have a value for almost every company.

No. Each period contains one consolidated income statement. Revenue and profit are totals for the whole company. For example, the API returns one revenue line for Amazon. It does not report AWS and the retail business separately.

Combine income-statement values with balance-sheet, cash flow, and profitability metrics.