FINANCIALS · XBRL-NORMALIZED
The SEC financials API, without the XBRL.
Company fundamentals live in SEC EDGAR as raw XBRL — inconsistent tags, dimensional contexts, unit scaling. Filingrail's financials endpoint returns the income statement, balance sheet, and cash flow already parsed, normalized, and typed into clean JSON, with a link back to the exact 10-K or 10-Q on every response.
Free tier: 50 requests/day, no credit card. Endpoint: GET /v1/companies/{ticker}/financials
The fields
What every record carries.
Filingrail parses the underlying SEC filing into a flat, typed JSON object. These are the fields you get on each record:
| Field | What it is |
|---|---|
| revenue | Total revenue / net sales for the period, in USD. |
| gross_profit | Revenue minus cost of revenue. |
| operating_income | Income from operations, before interest and tax. |
| net_income | Bottom-line net income attributable to the company. |
| eps_diluted | Diluted earnings per share, as reported. |
| total_assets | Total assets from the balance sheet, in USD. |
| total_liabilities | Total liabilities from the balance sheet. |
| stockholders_equity | Total stockholders' equity. |
| operating_cash_flow | Net cash provided by operating activities. |
| capex | Capital expenditure (purchases of PP&E), from the cash-flow statement. |
| statement_type | income_statement, balance_sheet, or cash_flow — which statement the row is from. |
| period_type | annual, quarterly, or ytd. |
SAMPLE
A real-shaped response.
One GET returns the data array plus a meta
block. The values below are an illustrative example of the response shape.
The field that matters most for trust is the link to the source filing on
sec.gov — filing_url on each
record where the rows come from many filings, and
meta.source_filing_url where one filing backs the whole
response. Either way, any value you surface traces back to its source.
{
"data": [
{
"ticker": "AAPL",
"statement_type": "income_statement",
"period_type": "annual",
"period_end": "2025-09-27",
"revenue": 391035000000,
"gross_profit": 180683000000,
"operating_income": 123216000000,
"net_income": 93736000000,
"eps_diluted": 6.08,
"currency": "USD"
}
],
"meta": {
"ticker": "AAPL",
"as_of": "2026-07-07T08:00:00Z",
"source_filing_url": "https://www.sec.gov/Archives/edgar/data/320193/.../aapl-10k.htm",
"source_filing_date": "2025-11-01",
"accession_number": "0000320193-25-000098"
}
}Illustrative example. Every record links to its source filing.
HOW-TO
How to pull normalized SEC financials with Filingrail
Subscribe on RapidAPI, call the financials endpoint for a ticker, and read normalized income, balance-sheet, and cash-flow rows — each traceable to its filing.
- 1
Subscribe on RapidAPI
Subscribe to the free Basic tier (50 requests/day) on the Filingrail RapidAPI listing and copy your X-RapidAPI-Key.
- 2
Call the financials endpoint
Request GET /v1/companies/{ticker}/financials with your X-RapidAPI-Key and X-RapidAPI-Host headers.
- 3
Read the normalized rows
Filter data[] by statement_type (income_statement / balance_sheet / cash_flow) and period_type, then read the typed USD figures.
- 4
Trace any number to its filing
Open meta.source_filing_url to verify any figure against the original 10-K or 10-Q on sec.gov.
curl --request GET \
--url 'https://filingrail.p.rapidapi.com/v1/companies/AAPL/financials' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: filingrail.p.rapidapi.com'import os, requests
API = "https://filingrail.p.rapidapi.com"
HEADERS = {
"X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"],
"X-RapidAPI-Host": "filingrail.p.rapidapi.com",
}
def financials(ticker):
r = requests.get(f"{API}/v1/companies/{ticker}/financials",
headers=HEADERS, timeout=10)
r.raise_for_status()
return r.json()
payload = financials("AAPL")
inc = [row for row in payload["data"]
if row["statement_type"] == "income_statement"]
for row in inc:
if row.get("revenue"):
margin = row["net_income"] / row["revenue"]
print(f'{row["period_end"]} net margin {margin:.1%} '
f'src={payload["meta"]["source_filing_url"]}')FAQ
Common questions
Still wondering something? Email support@hudsonenterprisesllc.com — same business day response.
What is a SEC financials API?
What is the endpoint and what does it return?
How is this different from the SEC company-facts JSON?
How current is the data?
How far back does history go?
Is there a free tier?
Why does every response include a source filing URL?
Start on the free tier.
50 requests/day, no credit card. Query the endpoint and read the source filing behind every record.