Dashboard

Income statement

GET/api/financials/income-statement

Free Starter Stock ETF Pro

Returns normalized income statement data — revenue, cost of revenue, operating expenses, EBITDA, net income, EPS, and more. Facts are mapped from raw XBRL to a curated set of standardized line items.

Monetary values default to US dollars. Pass the currency parameter to receive any supported ISO 4217 currency instead: line items not already in that currency are converted on the fly (flow items at the period-average rate, balance-sheet items at the period-end spot rate), and the per-period fx block records the exact rate(s) applied so each conversion is reproducible. Values already in the requested currency are passed through untouched.

Use period=ttm to get trailing twelve months data, computed by summing the last 4 reported quarters.

Get API key Try it live in the API explorer

Query parameters

Example request

curl 'https://api.stockfit.io/v1/api/financials/income-statement?symbol=AAPL&cik=320193&cusip=037833100&composite_figi=BBG000B9XRY4&share_class_figi=BBG001S5N8V8&currency=USD' \
  -H 'Authorization: Bearer YOUR_API_TOKEN'

Responses

200 OK

Income statement data organized by period

Response schema

array of:
  • period string

    The fiscal period end date

  • fiscalYear integer

    The company's fiscal year (handles non-December year-ends — AAPL FY ends Sep, COST FY ends Aug).

  • fiscalPeriod string (enum)

    Fiscal period of a reported value: `FY` (annual), `Q1`-`Q4` (quarterly), or `TTM` (trailing twelve months).

    Allowed values: FY, Q1, Q2, Q3, Q4, TTM
  • fx object

    Foreign-currency conversion audit for this period. Every monetary value in `facts` is in the requested `currency` (default **US dollars**). This block is absent when the period was already wholly in the target currency (e.g. a US filer with the default USD — nothing to convert). It is present when one or more line items were originally filed in a different currency and converted on the fly, and it records the exact rate(s) applied so the conversion can be reproduced. Rates come from the Frankfurter API (api.frankfurter.dev). Instant balance-sheet items use the spot rate at period end; flow income/cash-flow items use the day-weighted average rate over the period.

    • targetCurrency string

      The currency (ISO 4217) every `facts` value was converted INTO — the value of the request `currency` parameter (default USD). The literal `original` here means no conversion was requested: each fact stays in its as-reported currency (see `unconverted` for the per-fact mapping).

    • originalCurrencies array of string

      Every source currency (ISO 4217) that appeared in this period — the union of converted, unconverted, and already-in-target. The target currency itself is listed when some facts were natively in it (e.g. a foreign filer reporting some lines in USD alongside its converted local currency), so a mixed period reflects its true composition rather than appearing wholly converted.

    • rates array of object

      One entry per (source currency, method) actually applied. `rate` is the multiplier: `target = original * rate`.

      array of:
      • from string

        ISO 4217 source currency that was converted.

      • method string (enum)

        `spot` for instant balance-sheet items (rate at period end); `average` for flow income/cash-flow items (day-weighted mean over the period).

        Allowed values: spot, average
      • rate number

        Multiply the original-currency amount by this to get the `targetCurrency` amount.

      • effectiveDate string (date)

        Spot only: the date (YYYY-MM-DD) the applied rate was published (≤ period end).

      • start string (date)

        Average only: period start (YYYY-MM-DD).

      • end string (date)

        Average only: period end (YYYY-MM-DD).

    • unconverted map of string to array of string

      Facts that could NOT be converted (no published rate within tolerance, or an unsupported code/date), grouped by the currency they remain in: each key is a source ISO 4217 code, each value lists the curated fact names in `facts` still in that currency (NOT `targetCurrency`). Absent when everything converted. Use it to know exactly which figures to treat as native currency.

      • * (additional properties) array of string
  • facts object

    Normalized income statement line items, keyed by curated fact name with numeric values, in the requested `currency` (default USD). See `fx` for any conversion applied, and `fx.unconverted` for any figures that could not be converted (kept in their native currency).

    • revenue number

      Total Revenue — Total income generated from sales of goods or services before any expenses are deducted.

    • costOfRevenue number

      Cost of Revenue — Direct costs attributable to producing goods or services sold, including materials and direct labor.

    • grossProfit number

      Gross Profit — Revenue minus cost of revenue, showing profitability before operating expenses.

    • researchAndDevelopment number

      Research & Development — Spending on activities to develop new products, services, or processes.

    • generalAndAdministrativeExpenses number

      General & Administrative — Overhead costs for running the business, such as rent, salaries, and office expenses.

    • sellingAndMarketingExpenses number

      Selling & Marketing — Costs related to advertising, promotions, and sales activities.

    • sellingGeneralAndAdministrativeExpenses number

      SG&A — Combined selling, general, and administrative expenses.

    • otherExpenses number

      Other Expenses — Non-core income or expenses not classified elsewhere in operations.

    • restructuringCharges number

      Restructuring Charges — Costs from restructuring activities — severance, facility exits, contract terminations. Sourced from `us-gaap:RestructuringCharges` when reported. The broader umbrella `us-gaap:RestructuringSettlementAndImpairmentProvisions` (which includes related asset impairments and settlement provisions) is **not** mapped here — it lives in `restructuringAndImpairmentTotal` to keep the two distinguishable. Often called out by management as non-recurring; useful for deriving adjusted operating margin.

    • restructuringAndImpairmentTotal number

      Restructuring & Impairment (Total) — Umbrella aggregate of restructuring charges, settlement provisions, and asset impairments as a single combined line — used by filers (e.g. INTC during foundry reorganization) where the underlying write-off is BOTH a restructuring action AND an asset impairment, so the components overlap. When this fact is present, `unusualItemsNet` uses it in place of summing `restructuringCharges + impairments` to avoid double-counting. When absent, the derivation falls back to the component sum.

    • impairments number

      Impairments — Impairment charges (goodwill, intangibles, long-lived assets, other) recognized in operating expenses, reducing operating income. Reported literal as filed: the broad aggregate is preferred — when only a narrower category is tagged, that becomes the value. **Overlap note**: when a filer tags both `us-gaap:AssetImpairmentCharges` AND a narrower concept like `GoodwillImpairmentLoss`, the broad concept is preferred and the narrower one is ignored, since the aggregate already includes it. Often called out by management as non-recurring; useful for deriving adjusted operating margin.

    • operatingExpenses number

      Operating Expenses — Total costs incurred through normal business operations, excluding cost of revenue.

    • costAndExpenses number

      Cost & Expenses — Total of all costs and expenses, including cost of revenue and operating expenses.

    • interestIncome number

      Interest Income — Income earned from interest-bearing assets like deposits or bonds.

    • interestExpense number

      Interest Expense — Cost of borrowing money, including interest on debt and credit facilities. **IFRS note**: under IFRS, `FinanceCosts` may include lease-liability interest by default; US-GAAP filers typically separate lease interest into other line items.

    • interestIncomeNet number

      Net Interest Income (Expense) — Interest income minus interest expense. Key profitability metric for banks.

    • depreciationAndAmortization number

      Depreciation & Amortization — Non-cash charges for the gradual write-down of tangible and intangible assets.

    • depreciation number

      Depreciation — Non-cash expense reflecting the wear and aging of physical assets like equipment and buildings.

    • amortization number

      Amortization — Non-cash expense for the systematic write-off of intangible assets like patents and software.

    • operatingIncome number

      Operating Income — Profit from core business operations after subtracting operating expenses from gross profit.

    • nonOperatingIncome number

      Non-Operating Income — Income from activities outside core operations, such as investment gains or asset sales.

    • incomeBeforeTax number

      Income Before Tax — Total earnings before income tax is deducted. Also known as pre-tax income.

    • incomeTaxExpense number

      Income Tax Expense — Total income taxes owed for the period, including current and deferred taxes.

    • netIncome number

      Net Income — Total profit after all expenses, taxes, and costs are subtracted from revenue.

    • netIncomeCommonStockholders number

      Net Income to Common — Profit available to common shareholders after preferred dividends.

    • netIncomeCommonStockholdersDiluted number

      Net Income to Common (Diluted) — Profit available to common shareholders, adjusted for all dilutive securities.

    • weightedAverageSharesOutstanding number

      Shares Outstanding — Average number of basic shares outstanding during the period.

    • weightedAverageSharesOutstandingDiluted number

      Shares Outstanding (Diluted) — Average shares outstanding including dilutive effects of options, warrants, and convertibles.

    • eps number

      EPS — Net income divided by weighted average basic shares outstanding.

    • epsDiluted number

      EPS (Diluted) — Net income divided by weighted average diluted shares outstanding.

    • ebit number

      EBIT — Earnings before interest and taxes. Measures operating profitability regardless of capital structure.

    • ebitda number

      EBITDA — Earnings before interest, taxes, depreciation, and amortization. Proxy for operating cash generation.

    • premiumsEarned number

      Premiums Earned — Insurance premium revenue recognized during the period.

    • premiumsWritten number

      Premiums Written — Total insurance premiums from policies written during the period, whether or not yet earned.

    • policyholderBenefitsAndClaims number

      Policyholder Benefits & Claims — Payments and reserves for insurance claims and policyholder benefits.

    • policyAcquisitionCosts number

      Policy Acquisition Costs — Costs to acquire new insurance policies, such as commissions and underwriting expenses.

    • underwritingIncome number

      Underwriting Income (Loss) — Profit from insurance operations: premiums earned minus claims and acquisition costs.

    • netInvestmentIncome number

      Net Investment Income — Income from the insurance company's investment portfolio.

    • noninterestIncome number

      Non-Interest Income — Bank revenue from sources other than interest, such as fees, trading, and service charges.

    • noninterestExpense number

      Non-Interest Expense — Bank operating costs excluding interest expense, such as salaries, occupancy, and technology.

    • provisionForCreditLosses number

      Provision for Credit Losses — Amount set aside to cover estimated losses on loans and other credit exposures.

    • gainLossOnDisposition number

      Gain (Loss) on Disposition — Net gain or loss from selling business units, PP&E, or intangible assets. Credit-balance concept: positive = gain (increases income), negative = loss. The narrower `GainLossOnSaleOfBusiness` and `GainLossOnDispositionOfIntangibleAssets` are preferred when tagged; the umbrella `GainLossOnDispositionOfAssets1`/`…OfAssets` is the fallback for filers that lump everything together.

    • gainLossOnDebtExtinguishment number

      Gain (Loss) on Debt Extinguishment — Net gain or loss from retiring debt before maturity — premium/discount paid above carrying value, plus write-off of unamortized issuance costs. Credit-balance concept: positive = gain, negative = loss. Routinely called out as non-recurring.

    • acquisitionRelatedCosts number

      Acquisition-Related Costs — Transaction and integration costs incurred to complete a business combination — advisory fees, legal, due diligence, severance for acquired employees. Debit-balance expense, recognized in the period incurred.

    • goodwillImpairmentLoss number

      Goodwill Impairment Loss — Write-down of goodwill when its carrying value exceeds fair value. Always a positive expense; reduces operating income. **Overlap note**: also a component of the broader `impairments` field — when a filer tags only the aggregate `us-gaap:AssetImpairmentCharges`/`ifrs-full:ImpairmentLossRecognisedInProfitOrLossIntangibleAssetsAndGoodwill`, this field will be null even though some of the impairment may be goodwill. Reflects the literal tag from the filing.

    • unusualItemsNet number

      Unusual Items, Net — Aggregate of non-recurring income-statement items: restructuring charges, impairments, acquisition-related costs (all expenses, subtracted), plus gains/losses on disposition and debt extinguishment (sign-preserved). Convention: positive = net gain to income, negative = net charge against income. Derived from sibling curated facts — no single XBRL concept maps to it.

    • unusualItemsExcludingGoodwill number

      Unusual Items Excluding Goodwill, Net — Same as `unusualItemsNet` but with the goodwill-impairment component added back. When the filer explicitly tagged `goodwillImpairmentLoss` separately, this cleanly removes it from the aggregate. When the filer only tagged a broader impairment concept without breaking out goodwill, `goodwillImpairmentLoss` is null and this field equals `unusualItemsNet`. Derived; no XBRL mapping.

  • splitFactor number

    Only present when `splitAdjust=true` and this period was adjusted. The cumulative forward split factor applied to share counts for this period (per-share figures used `1 / splitFactor`). Absent means the period was already on the current split-adjusted basis.

  • sources map of string to object

    Map of SEC accession number to the filing's metadata and the list of curated fact names that filing supplied to this period. Combines provenance (which filing supplied each value) with the audit trail of restatements. Facts synthesized from other facts in the same period (e.g. `grossProfit = revenue - costOfRevenue`) are absent from this map and instead listed under `derived`. Q4 values reconstructed from cumulative period facts use a self-documenting synthetic key — `Q4-Recon-FY-9M`, `Q4-Recon-FY-H1-Q3`, or `Q4-Recon-FY-Q1-Q2-Q3` — with `type: "Q4-Recon"` and no `dateFiled` (the matching 10-K's `dateFiled` is on the period entry's top-level `dateFiled` field). **Pruning rules**: non-amendment filings that supplied no surviving fact value are dropped (their existence is already conveyed by the period's top-level `dateFiled`). **Amendment filings (`/A`) are always included even when their facts were all superseded by a later amendment** — their `facts` may be empty, but their existence is itself the audit signal needed to reconstruct point-in-time data between filing dates. Combine `sources[accession].facts` (which values came from this filing) with `sources[accession].dateFiled` (when each became public) to reconstruct point-in-time data and detect restatements.

    • * (additional properties) object
      • type string

        SEC form type: `10-K`, `10-K/A`, `10-Q`, `10-Q/A`, `20-F`, `20-F/A`, `40-F`, `40-F/A`, or `Q4-Recon` for a synthetic Q4 reconstruction.

      • dateFiled string (date)

        SEC acceptance date of this filing (YYYY-MM-DD). Absent for `Q4-Recon` entries — they're synthetic, not real filings.

      • amendment boolean

        True for /A amendment filings; false for originals and Q4-Recon synthetic entries.

      • facts map of string to object

        Map of curated fact name to metadata about this filing's contribution. Empty object `{}` means this filing supplied the value first (or didn't change it from the prior filing). `{ "before": <number> }` means this filing changed the value — `before` is what the immediately-prior filing in the chain had for this fact. Walk the chronological filings forward to reconstruct the value at any point in time, or follow `before` backward to recover any historical value. Re-tagging with an identical value is omitted (no entry added). May be empty (`{}`) for amendment (`/A`) filings whose values were all unchanged or superseded by a later amendment — the source entry is preserved so the amendment timeline remains visible.

        • * (additional properties) object
          • before number

            Value of this fact in the immediately-prior filing that supplied it. Present only when this filing CHANGED the value. Absent when this filing was the first to supply it (no prior).

  • derived array of string

    Names of facts whose values were calculated rather than taken directly from the source filing — for example, `grossProfit` synthesized from `revenue` minus `costOfRevenue` when the company did not tag gross profit explicitly, or every fact in a `period=ttm` response (summed across 4 quarters, or carried from the latest quarter for instant items).

  • dateFiled string (date)

    SEC filing acceptance date for the **original** 10-K (annual / Q4 quarterly entries) or 10-Q (Q1-Q3 quarterly entries) covering this period. Format: YYYY-MM-DD. Use this to gate point-in-time data access and avoid lookahead bias when joining with historical price data — backtesters should only treat the period's facts as "knowable" on or after this date. Amendments (10-K/A, 10-Q/A) are explicitly **not** used here; this field always reflects the original disclosure date. Not present when `period=ttm` — TTM is synthesized from 4 quarters and has no single filing date.

Example response

[
  {
    "period": "2025-12-31",
    "fiscalYear": 2025,
    "fiscalPeriod": "FY",
    "dateFiled": "2026-02-15",
    "facts": {
      "revenue": 100000000000,
      "costOfRevenue": 50000000000,
      "grossProfit": 50000000000,
      "researchAndDevelopment": 8000000000,
      "generalAndAdministrativeExpenses": 4000000000,
      "sellingAndMarketingExpenses": 6000000000,
      "sellingGeneralAndAdministrativeExpenses": 10000000000,
      "otherExpenses": 500000000,
      "restructuringCharges": 1000000000,
      "restructuringAndImpairmentTotal": 1000000000,
      "impairments": 1000000000,
      "operatingExpenses": 18500000000,
      "costAndExpenses": 68500000000,
      "interestIncome": 800000000,
      "interestExpense": 300000000,
      "interestIncomeNet": 500000000,
      "depreciationAndAmortization": 4000000000,
      "depreciation": 3000000000,
      "amortization": 1000000000,
      "operatingIncome": 31500000000,
      "nonOperatingIncome": 500000000,
      "incomeBeforeTax": 32000000000,
      "incomeTaxExpense": 6400000000,
      "netIncome": 25600000000,
      "netIncomeCommonStockholders": 25600000000,
      "netIncomeCommonStockholdersDiluted": 25600000000,
      "weightedAverageSharesOutstanding": 4000000000,
      "weightedAverageSharesOutstandingDiluted": 4050000000,
      "eps": 6.4,
      "epsDiluted": 6.32,
      "ebit": 31500000000,
      "ebitda": 35500000000,
      "premiumsEarned": 100000000000,
      "premiumsWritten": 100000000000,
      "policyholderBenefitsAndClaims": 30000000000,
      "policyAcquisitionCosts": 5000000000,
      "underwritingIncome": 31500000000,
      "netInvestmentIncome": 2000000000,
      "noninterestIncome": 5000000000,
      "noninterestExpense": 8000000000,
      "provisionForCreditLosses": 1500000000,
      "gainLossOnDisposition": 1000000000,
      "gainLossOnDebtExtinguishment": 1000000000,
      "acquisitionRelatedCosts": 1000000000,
      "goodwillImpairmentLoss": 1000000000,
      "unusualItemsNet": 1000000000,
      "unusualItemsExcludingGoodwill": 1000000000
    },
    "sources": {
      "0001234567-26-000001": {
        "type": "10-K",
        "dateFiled": "2026-02-15",
        "amendment": false,
        "facts": {
          "revenue": {},
          "costOfRevenue": {},
          "researchAndDevelopment": {},
          "generalAndAdministrativeExpenses": {},
          "sellingAndMarketingExpenses": {},
          "otherExpenses": {},
          "restructuringCharges": {},
          "restructuringAndImpairmentTotal": {},
          "impairments": {},
          "costAndExpenses": {},
          "interestExpense": {},
          "operatingIncome": {},
          "nonOperatingIncome": {},
          "incomeBeforeTax": {},
          "incomeTaxExpense": {},
          "netIncome": {},
          "netIncomeCommonStockholders": {},
          "netIncomeCommonStockholdersDiluted": {},
          "weightedAverageSharesOutstanding": {},
          "weightedAverageSharesOutstandingDiluted": {},
          "eps": {},
          "epsDiluted": {},
          "premiumsEarned": {},
          "premiumsWritten": {},
          "policyholderBenefitsAndClaims": {},
          "policyAcquisitionCosts": {},
          "underwritingIncome": {},
          "netInvestmentIncome": {},
          "noninterestIncome": {},
          "noninterestExpense": {},
          "provisionForCreditLosses": {},
          "gainLossOnDisposition": {},
          "gainLossOnDebtExtinguishment": {},
          "acquisitionRelatedCosts": {},
          "goodwillImpairmentLoss": {},
          "unusualItemsNet": {},
          "unusualItemsExcludingGoodwill": {}
        }
      },
      "0001234567-26-000042": {
        "type": "10-K",
        "dateFiled": "2026-05-30",
        "amendment": true,
        "facts": {
          "revenue": {
            "before": 98000000000
          }
        }
      }
    },
    "derived": [
      "grossProfit",
      "sellingGeneralAndAdministrativeExpenses",
      "operatingExpenses",
      "depreciationAndAmortization",
      "amortization",
      "depreciation",
      "interestIncomeNet",
      "ebit",
      "ebitda",
      "interestIncome"
    ],
    "fx": {
      "targetCurrency": "USD",
      "originalCurrencies": [
        "USD",
        "EUR",
        "VEF"
      ],
      "rates": [
        {
          "from": "EUR",
          "method": "average",
          "rate": 1.0824,
          "start": "2025-01-01",
          "end": "2025-12-31"
        },
        {
          "from": "EUR",
          "method": "spot",
          "rate": 1.0389,
          "effectiveDate": "2025-12-31"
        }
      ],
      "unconverted": {
        "VEF": [
          "otherIncomeExpense"
        ]
      }
    }
  }
]

400 Bad Request

Invalid parameters or symbol not found

Response schema

  • error string

    Human-readable error message

Example response

{}

403 Forbidden

Feature not available on current plan

Response schema

  • error string

    Human-readable error message

Example response

{}