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.
/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
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"{
"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.
| Region | Listed tickers | Covered | Coverage |
|---|---|---|---|
| US & Canada | 35,594 | 32,426 | 91.1% |
| Europe | 24,274 | 21,591 | 88.9% |
| Asia / Pacific | 42,570 | 37,342 | 87.7% |
| Latin America | 3,000 | 2,327 | 77.6% |
| Africa / Middle East | 2,641 | 1,910 | 72.3% |
Coverage by market-cap bucket
Each bucket groups the listed tickers by market cap, converted to USD. Coverage increases with company size.
| Bucket | Listed tickers | Covered | Coverage |
|---|---|---|---|
| ≥ $10bn | 16,593 | 16,435 | 99.0% |
| $1–10bn | 19,244 | 18,481 | 96.0% |
| $100m–$1bn | 21,258 | 19,537 | 91.9% |
| < $100m | 30,855 | 24,759 | 80.2% |
Parameters
Path parameters
identifierstringrequiredA ticker ID, an exchange and symbol separated by a colon (e.g. NASDAQ:AAPL), or a FIGI.
NASDAQ:AAPLtkr_cO46h8pgSu9QqyBBG000B9XRY4Query parameters
period_typestringoptionalFinancial period cadence.
annualValues: annualquarterlyttmperiod_labelstringoptionalFilter quarterly data to one fiscal quarter. Use this parameter only with period_type=quarterly.
Q1Q2Q3Q4datestringoptionalPass 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- Hide filter modifiers
date.gtestringReturn statements whose period end date is on or after this date.
date.gtstringReturn statements whose period end date is strictly after this date.
date.ltestringReturn statements whose period end date is on or before this date.
date.ltstringReturn statements whose period end date is strictly before this date.
fiscal_yearobjectoptionalFilter by fiscal year. Combine the range modifiers below to select the reporting years you need.
+ Show filter modifiers- Hide filter modifiers
fiscal_year.gteintegerReturn statements for the specified fiscal year and all later fiscal years.
fiscal_year.gtintegerReturn statements only for fiscal years after the specified year.
fiscal_year.lteintegerReturn statements for the specified fiscal year and all earlier fiscal years.
fiscal_year.ltintegerReturn statements only for fiscal years before the specified year.
orderstringoptionalSort by period end date (period_end_date).
descValues: ascdesclimitintegeroptionalMaximum number of resources to return.
50Min: 1Max: 100pagestringoptionalToken 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 objectsArray of financial period resources for the current page, one per reporting period.
+ Show child attributes- Hide child attributes
idstringUnique identifier for the financial period record, beginning with fnd_. Store it as the stable reference to this period's figures.
symbolstringQualified symbol combining the exchange code and ticker separated by a colon, e.g. NASDAQ:AAPL.
period_typestringCadence of the period: annual for full fiscal years, quarterly for fiscal quarters, or ttm for trailing-twelve-month aggregates.
period_end_datestringLast calendar day of the financial period, in YYYY-MM-DD format.
fiscal_yearnumberFiscal 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_labelstringLabel of the period within the fiscal year: FY for annual periods, or Q1 through Q4 for quarters.
currencystringISO 4217 code of the currency the financial values are reported in, e.g. USD.
price_currencystringISO 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_appliedbooleanWhether metric values were converted from the company's reporting currency. false means the figures are as originally reported.
objectstringString representing the object's type, e.g. v3.fundamentals.income_statement. Each fundamentals endpoint returns its own object type.
is_sales_revenue_turnovernumberSales/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_revenuesnumberSales & 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_cogsnumberCost 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_soldnumberCost 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_profitnumberGross 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_incomenumberOther 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_expnnumberOperating Expenses: Money that the business spends on things that are not directly related to making its products or services.
is_sg_and_a_expensenumberSelling, General & Admin: Money that the business spends on things like marketing, salaries, rent, utilities, and office supplies.
is_operating_expenses_r_and_dnumberResearch & 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_expensesnumberOther 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_incomenumberOperating Income (Loss): Operating income is a measure of how much profit a business makes from its core operations.
is_nonop_income_lossnumberNon-Operating (Income) Loss: Any money that a company loses or earns from activities that are not related to its main business.
is_net_interest_expensenullableInterest Expense, Net: The amount that the business pays or receives for borrowing or lending money.
is_int_expensenullableInterest Expense: The money an entity pays for borrowing funds from others.
is_int_incomenullableInterest Income: The money an entity earns from lending funds to others.
is_other_nonop_income_lossnumberOther 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_incomenumberPretax Income: The amount of money a company makes from its business activities before paying taxes.
is_inc_tax_expnumberIncome 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_itemnumberIncome (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_taxnumberNet Extraordinary Losses (Gains): How much money a company lost or gained from unusual events after paying or saving taxes.
is_discontinued_operationsnullableDiscontinued 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_chngnumberExtraord. & 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_rationumberIncome (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_creditsnullableMinority Interest: The share of a subsidiary company that belongs to outside investors and not the parent company.
is_net_incomenumberNet Income, GAAP: The amount of money the company made after paying all its expenses.
is_tot_cash_pfd_dvdnullablePreferred Dividends: The money that a company pays to its preferred shareholders.
is_other_adjustmentsnullableOther 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_commonnumberNet 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_epsnumberBasic 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).
epsnumberBasic EPS, GAAP: The amount of money that a company earns for each share of its common stock.
eps_cont_opsnumberBasic 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_epsnumberDiluted 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_epsnumberDiluted 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_opsnumberDiluted 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.
ebitdanumberEBITDA: EBITDA stands for earnings before interest, taxes, depreciation, and amortization.
ebitda_marginnumberEBITDA Margin (%): EBITDA Margin is a measure of how much profit a company makes from its core operations as a percentage of its revenue.
ebitanumberEBITA: 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.
ebitnumberEBIT: EBIT stands for Earnings Before Interest and Taxes.
gross_marginnumberGross 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_marginnumberOperating 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_marginnumberProfit 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_emplnullableSales per Employee: Revenue per employee shows how much money each employee makes for the company in a given period.
div_per_shrnumberDividend 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_expnumberDepreciation Expense: The cost of using a fixed asset (such as a building or a machine) over its useful life.
next_page_urlnullableURL of the next page of results, or null on the last page. Request it unchanged to continue paging.
previous_page_urlnullableURL 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_epsto get the P/E ratio. Useebitdain EV/EBITDA models. - Margin analysis: Track margins across periods. For example, divide
is_gross_profitbyis_sales_revenue_turnoverto get the gross margin. The response also includesgross_margin,oper_margin, andprofit_margin. - Screening: Filter companies by growth and profitability in US and
international markets. For example, request
period_type=quarterlyfor a retailer. Find each quarter whereis_operating_expnincreases faster than revenue. - AI agents: Connect an LLM to the roic.ai MCP server. The
get_income_statementtool 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.
Related endpoints
Combine income-statement values with balance-sheet, cash flow, and profitability metrics.