Skip to main content
GET
Get income statements

Overview

The Financial Datasets income statement API returns revenue, expenses, and net income for a stock ticker, by year, by quarter, or trailing twelve months (TTM). It covers 19,000+ US tickers with 30+ years of history, updated within 1 second, parsed directly from SEC filings (data provenance). It also covers 674 UK companies and 376 French companies, annual only (market coverage). The same API serves balance sheets and cash flow statements, or all three in one call. You can call it as a REST endpoint with an API key, or from Claude, ChatGPT, Cursor, and other AI apps through the MCP server, or pay per request with x402. Pricing starts at $20. Income statements are financial statements that provide information about a company’s revenues, expenses, and profits over a specific period. You can filter the data by ticker, period, limit, and cik. The period parameter can be set to annual, quarterly, or ttm (trailing twelve months). The limit parameter is used to specify the number of statements to return. To get started, please create an account and grab your API key at financialdatasets.ai. You will use the API key to authenticate your API requests.

Coverage

Available Tickers

You can fetch a list of available tickers with a GET request to: https://api.financialdatasets.ai/financials/income-statements/tickers/

Getting Started

There are only 3 steps for making a successful API call:
  1. Add your API key to the header of the request as X-API-KEY.
  2. Add query params like ticker, period and limit to filter the data.
  3. Execute the API request.

Filtering the Data

You can filter the data by ticker, period, limit, and report_period. Note: ticker and period are required. Alternatively, you can use cik instead of ticker as a company identifier in your request. By default, period is annual,limit is 4, and report_period is null. The period parameter can be set to annual, quarterly, or ttm (trailing twelve months). The limit parameter is used to specify the number of periods to return. The report_period parameter is used to specify the date of the statement. For example, you can include filters like report_period_lte=2024-09-30 and report_period_gte=2024-01-01 to get statements between January 1, 2024 and September 30, 2024. The available report_period operations are:
  • report_period_lte
  • report_period_lt
  • report_period_gte
  • report_period_gt
  • report_period

Normalized vs. As-Reported

We support two views of the income statement:
  • Normalized (this endpoint, GET /financials/income-statements): every filer mapped onto a single canonical schema (revenue, operating_income, etc.). Consistent across companies and ideal for cross-company comparison and time-series analysis. Available from the 1990s onward.
  • As-Reported (GET /financials/income-statements/as-reported): the income statement exactly as filed in the 10-K or 10-Q, with original labels and parent-child line item hierarchy. Ideal when you need the exact wording, ordering, or subtotal structure from the filing. Available from 2010 onward, when XBRL became standard for SEC filings and companies started to report more granular data.

Examples

FAQ

Where does the income statement data come from?

Directly from the 10-K, 10-Q, and 8-K filings on SEC EDGAR. The original XBRL and HTML filings are parsed, and the line items are normalized so companies compare.

Are delisted companies included?

Yes. Delisted companies are included, so backtests are free of survivorship bias.

Can I get UK or French income statements?

Yes. Add market=UK or market=FR to the ticker, or pass the company’s isin. These markets are annual only, in the company’s reporting currency. See the UK guide and the France guide.

Can an AI agent use this data?

Yes. Claude, ChatGPT, Cursor, and other MCP clients reach it through the Financial Datasets MCP server. An agent with a wallet can also pay per request with x402, with no account.

Authorizations

X-API-KEY
string
header
required

API key for authentication.

Query Parameters

ticker
string

The ticker symbol. Required if cik or isin is not provided.

period
enum<string>
required

The time period of the income statements.

Available options:
annual,
quarterly,
ttm
limit
integer<int32>

The maximum number of income statements to return. This is the total across all pages, not a page size: each page holds up to 10 records, linked by next_page_url.

cik
string

The Central Index Key (CIK) of the company.

market
enum<string>

The market the company is listed in: US (the default), UK or FR. Any ticker of the company, including a second share class, returns the company's statements.

Available options:
US,
UK,
FR
exchange
string

Deprecated alias of market: LSE means market=UK. Existing requests keep working. France has no alias: name it with market=FR.

isin
string

The ISIN (International Securities Identification Number) of a non-US listing. An alternative to ticker and market.

report_period
string<date>

Filter by exact report period date in YYYY-MM-DD format.

report_period_gte
string<date>

Filter by report period greater than or equal to date in YYYY-MM-DD format.

report_period_lte
string<date>

Filter by report period less than or equal to date in YYYY-MM-DD format.

report_period_gt
string<date>

Filter by report period greater than date in YYYY-MM-DD format.

report_period_lt
string<date>

Filter by report period less than date in YYYY-MM-DD format.

filing_date
string<date>

Filter by exact SEC filing date in YYYY-MM-DD format. Rows without a known filing date are excluded.

filing_date_gte
string<date>

Filter by SEC filing date greater than or equal to date in YYYY-MM-DD format. Rows without a known filing date are excluded.

filing_date_lte
string<date>

Filter by SEC filing date less than or equal to date in YYYY-MM-DD format. Useful for point-in-time queries: returns only data that was publicly filed by the given date. Rows without a known filing date are excluded.

filing_date_gt
string<date>

Filter by SEC filing date greater than date in YYYY-MM-DD format. Rows without a known filing date are excluded.

filing_date_lt
string<date>

Filter by SEC filing date less than date in YYYY-MM-DD format. Rows without a known filing date are excluded.

cursor
string

Opaque pagination cursor from a previous response's next_page_url. When provided, all other query parameters are ignored: the cursor carries the original request's filters. Treat it as opaque; do not construct or modify it.

Response

Income statements response

income_statements
object[]
next_page_url
string

Absolute URL of the next page of results. Present only when more results remain; request it as-is to continue. Each page holds up to 10 records.