Developer API docs

Financial statements endpoint

Income statement, balance sheet and cash flow as filed with the SEC: JSON or CSV from EDGAR XBRL company facts with per-value provenance (tag, accession, date).

Documentation updated 2026-09-02. Machine-readable: openapi.json · llms.txt

Endpoint

GET https://tgmcharts.com/api/v1/statements/{symbol}/{statement} serves raw, as-filed statement rows from SEC EDGAR XBRL company facts — public-domain lineage end to end. {statement} is one of income-statement, balance-sheet, cash-flow. Keyless and CORS-open.

Query parameterValuesBehavior
periodannual (default) | quarterlyQuarterly serves the as-filed discrete quarters plus disclosed derived ones (see provenance).
yearsinteger 1–30 (default 10)Trailing fiscal years of rows; quarterly serves 4 × years rows, capped at 120. Out of range answers 400 — never clamped.
formatjson (default) | csvCSV: one row per fiscal period, one column per concept, # provenance comments.
curl · five annual income statements
curl -s "https://tgmcharts.com/api/v1/statements/AAPL/income-statement?years=5"
curl · quarterly cash flow as CSV
curl -s "https://tgmcharts.com/api/v1/statements/KO/cash-flow?period=quarterly&years=3&format=csv" -o ko-cash-flow-quarterly.csv

Response shape

A type sketch. Rows are newest first; every catalogue concept appears on every row, with null where the filer tagged nothing for that period — never a zero.

GET /api/v1/statements/{symbol}/{statement} — shape
{
  "symbol": "AAPL",
  "entityName": string | null,
  "cik": string | null,
  "statement": "income-statement" | "balance-sheet" | "cash-flow",
  "period": "annual" | "quarterly",
  "currency": "USD",
  "source": "SEC EDGAR XBRL company facts (public domain)",
  "asOf": ISO date-time | null,        // last EDGAR ingestion for this symbol
  "methodology": string,
  "status": "preparing" | "unavailable",   // ABSENT when rows are served
  "reason": string,                    // with status: unavailable
  "note": string,                      // honest-state explanation
  "concepts": [ { "key": string, "label": string, "unit": "USD" | "USD/shares" | "shares", "tags": string[] }, … ],
  "rows": [                            // newest first; null while status is set
    {
      "fiscalYear": integer,
      "fiscalPeriod": "FY" | "Q1" | "Q2" | "Q3" | "Q4",
      "periodStart": "YYYY-MM-DD" | null,   // null for balance-sheet instants
      "periodEnd": "YYYY-MM-DD",
      "form": "10-K" | "10-Q" | … | null,   // the most recently filed fact on the row
      "filed": "YYYY-MM-DD" | null,
      "metrics": { "<concept key>": number | null, … },
      "provenance": {
        "<concept key>": { "tag": string, "accn": string, "form": string, "filed": "YYYY-MM-DD",
                           "derived": "ytd-differencing", "inputs": [accn, accn] }   // derived/inputs on derived quarters only
      }
    }
  ],
  "links": { "page": string, "docs": string, "openapi": string }
}

Per-value provenance

  • provenance[key].tag — the us-gaap tag that produced the value (one winning tag per concept per symbol; the priority lists are below).
  • provenance[key].accn, form, filed — the accession number, form type and filing date of the filing the value was taken from. Latest-filed wins per period, so a restated figure supersedes the original.
  • provenance[key].derived: "ytd-differencing" with inputs: [accn, accn] — a quarter the filer did not tag discretely (Q4 generally; Q2–Q3 for cash-flow items, which 10-Qs tag year-to-date) was derived by differencing two same-tag, same-fiscal-year facts, and both source accessions are disclosed. Derivation is withheld when a surrounding filing restates prior periods.
  • Per-share values and share counts are never derived, and per-share values are as filed — not adjusted for later stock splits.

Preparing and unavailable states

  • status: "preparing" (HTTP 200, rows: null, short s-maxage=120 cache) — the symbol is covered by the site but its SEC EDGAR data has not been ingested yet. No value is substituted from any other source in the meantime.
  • status: "unavailable" with a reason (HTTP 200, daily cache) — the security has no usable us-gaap/USD company facts: typically an ETF or trust, or a filer reporting under IFRS or in a non-USD currency. This is a stable, periodically re-checked state, not a pending one.
  • 404 — the symbol is not covered at all (onboarding hint), or the statement slug is unknown (the body lists the three valid ones).
  • rows: [] with a note — ingested, but no XBRL fact mapped to this statement's concepts.

Methodology (served verbatim on every response)

Values as filed with the SEC (XBRL company facts, public domain), selected latest-filed per period; the winning us-gaap tag, accession number, and filing date are recorded per value in provenance. Quarters not filed discretely (Q4 generally; Q2-Q3 for cash-flow items, which 10-Qs tag year-to-date only) are derived solely by differencing two same-tag, same-fiscal-year facts and are marked derived with both source accessions; derivation is withheld when a surrounding filing restates prior periods. Per-share values are as filed and NOT adjusted for subsequent stock splits. Missing data is null — never zero-filled, never backfilled from any other source.

Income statement concepts

The metrics keys served for income-statement, with the us-gaap tags tried in priority order. Generated from the concept catalogue the ingestion lane uses. For revenue the priority is applied per period (Revenues first, then the ASC 606 tags), so filers that tag both never have the narrower contract-revenue subset served as total revenue.

KeyLabelUnitus-gaap tags (priority order)
revenueRevenueUSDRevenues, RevenueFromContractWithCustomerExcludingAssessedTax, RevenueFromContractWithCustomerIncludingAssessedTax, SalesRevenueNet, SalesRevenueGoodsNet, SalesRevenueServicesNet
costOfRevenueCost of RevenueUSDCostOfRevenue, CostOfGoodsAndServicesSold
grossProfitGross ProfitUSDGrossProfit
operatingExpensesOperating ExpensesUSDOperatingExpenses
researchAndDevelopmentExpensesResearch & Development ExpenseUSDResearchAndDevelopmentExpense, ResearchAndDevelopmentExpenseExcludingAcquiredInProcessCost
sellingGeneralAndAdministrativeExpensesSelling, General & Administrative ExpenseUSDSellingGeneralAndAdministrativeExpense
operatingIncomeOperating IncomeUSDOperatingIncomeLoss
interestExpenseInterest ExpenseUSDInterestExpense, InterestExpenseNonoperating
pretaxIncomePre-Tax IncomeUSDIncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest, IncomeLossFromContinuingOperationsBeforeIncomeTaxesMinorityInterestAndIncomeLossFromEquityMethodInvestments
incomeTaxExpenseIncome Tax ExpenseUSDIncomeTaxExpenseBenefit
netIncomeNet IncomeUSDNetIncomeLoss, ProfitLoss
epsBasicEPS (Basic)USD/sharesEarningsPerShareBasic
epsDilutedEPS (Diluted)USD/sharesEarningsPerShareDiluted
weightedAverageShsOutWeighted Average Shares (Basic)sharesWeightedAverageNumberOfSharesOutstandingBasic
weightedAverageShsOutDilWeighted Average Shares (Diluted)sharesWeightedAverageNumberOfDilutedSharesOutstanding

Balance sheet concepts

The metrics keys served for balance-sheet, with the us-gaap tags tried in priority order. Generated from the concept catalogue the ingestion lane uses.

KeyLabelUnitus-gaap tags (priority order)
cashAndCashEquivalentsCash & Cash EquivalentsUSDCashAndCashEquivalentsAtCarryingValue, CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents
shortTermInvestmentsShort-Term InvestmentsUSDShortTermInvestments, MarketableSecuritiesCurrent, AvailableForSaleSecuritiesCurrent
netReceivablesReceivables (Net)USDAccountsReceivableNetCurrent, ReceivablesNetCurrent
inventoryInventoryUSDInventoryNet
totalCurrentAssetsTotal Current AssetsUSDAssetsCurrent
propertyPlantEquipmentNetProperty, Plant & Equipment (Net)USDPropertyPlantAndEquipmentNet
goodwillGoodwillUSDGoodwill
intangibleAssetsIntangible Assets (ex. Goodwill)USDIntangibleAssetsNetExcludingGoodwill, FiniteLivedIntangibleAssetsNet
totalAssetsTotal AssetsUSDAssets
accountPayablesAccounts PayableUSDAccountsPayableCurrent, AccountsPayableAndAccruedLiabilitiesCurrent
totalCurrentLiabilitiesTotal Current LiabilitiesUSDLiabilitiesCurrent
shortTermDebtShort-Term DebtUSDDebtCurrent, ShortTermBorrowings, LongTermDebtCurrent
longTermDebtLong-Term DebtUSDLongTermDebtNoncurrent, LongTermDebt
totalLiabilitiesTotal LiabilitiesUSDLiabilities
totalStockholdersEquityTotal Stockholders' EquityUSDStockholdersEquity, StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest
retainedEarningsRetained EarningsUSDRetainedEarningsAccumulatedDeficit
commonSharesOutstandingCommon Shares OutstandingsharesCommonStockSharesOutstanding, CommonStockSharesIssued

Cash-flow statement concepts

The metrics keys served for cash-flow, with the us-gaap tags tried in priority order. Generated from the concept catalogue the ingestion lane uses.

KeyLabelUnitus-gaap tags (priority order)
operatingCashFlowOperating Cash FlowUSDNetCashProvidedByUsedInOperatingActivities, NetCashProvidedByUsedInOperatingActivitiesContinuingOperations
capitalExpenditureCapital ExpenditureUSDPaymentsToAcquirePropertyPlantAndEquipment, PaymentsToAcquireProductiveAssets, PaymentsForCapitalImprovements
depreciationAndAmortizationDepreciation & AmortizationUSDDepreciationDepletionAndAmortization, DepreciationAndAmortization, DepreciationAmortizationAndAccretionNet
stockBasedCompensationStock-Based CompensationUSDShareBasedCompensation
investingCashFlowInvesting Cash FlowUSDNetCashProvidedByUsedInInvestingActivities, NetCashProvidedByUsedInInvestingActivitiesContinuingOperations
acquisitionsNetAcquisitions (Net of Cash)USDPaymentsToAcquireBusinessesNetOfCashAcquired
financingCashFlowFinancing Cash FlowUSDNetCashProvidedByUsedInFinancingActivities, NetCashProvidedByUsedInFinancingActivitiesContinuingOperations
dividendsPaidDividends PaidUSDPaymentsOfDividends, PaymentsOfDividendsCommonStock
commonStockRepurchasedCommon Stock RepurchasedUSDPaymentsForRepurchaseOfCommonStock
debtIssuanceLong-Term Debt IssuedUSDProceedsFromIssuanceOfLongTermDebt
debtRepaymentLong-Term Debt RepaidUSDRepaymentsOfLongTermDebt, RepaymentsOfDebt
netChangeInCashNet Change in CashUSDCashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect, CashAndCashEquivalentsPeriodIncreaseDecrease

CSV format

Empty cells are nulls. A # status: comment line appears on preparing/unavailable bodies so a downloaded file is never mistaken for data.

CSV layout
# TGMCharts — AAPL income-statement (annual, SEC EDGAR XBRL)
# source: SEC EDGAR XBRL company facts (public domain)
# as of: <ISO date-time>
# methodology: <the methodology above>
# terms: https://tgmcharts.com/terms — attribution required (data by TGMCharts, tgmcharts.com; underlying facts: SEC EDGAR, public domain)
fiscalYear,fiscalPeriod,periodEnd,form,filed,revenue,costOfRevenue,grossProfit,…
<FY>,FY,<YYYY-MM-DD>,10-K,<YYYY-MM-DD>,<number or empty>,…

FAQ

Can I get SEC financial statements as JSON?
Yes. GET /api/v1/statements/{symbol}/{statement} returns the income statement, balance sheet or cash-flow statement as filed with the SEC, from EDGAR XBRL company facts, as JSON (or CSV with ?format=csv), annual or quarterly, up to 30 fiscal years, with the us-gaap tag, accession number and filing date recorded on every value.
Are the statement values split-adjusted or restated?
Values are as filed. For each period the latest-filed fact wins, so a company's own restatement supersedes the original figure. Per-share values are not adjusted for later stock splits.
Why is a statement value null?
The filer tagged no us-gaap fact for that concept and period (or none of the catalogue's tags). Nothing is backfilled from another source and nothing is zero-filled — null is the honest answer.
Can I redistribute the statement data?
The underlying XBRL facts are public-domain SEC data. Use of this API is governed by the API terms: name TGMCharts and link tgmcharts.com where the data is shown, and do not re-serve the API in bulk as a standalone data feed.