Free Company Financials API
The numbers companies tag in their 10-Q and 10-K filings, as JSON per ticker: quarterly revenue, net income and diluted EPS on calendar frames, each named by the company's own fiscal quarter; annual revenue, net income, operating cash flow, capex, buybacks and dividends; and the latest cash, debt, equity, assets and shares outstanding. Values are as filed, in USD; nothing is adjusted.
Endpoints
/api/markets/financials?symbol=AAPLquarterly (12 quarters), annual (6 years) and latest for one ticker.
/api/markets/financials/csv?symbol=AAPLThe same quarterly and annual rows for one ticker as CSV.
/api/markets/buybacksLargest share repurchases in each company's latest fiscal year, 100 rows; /api/markets/buybacks/csv for 1,000.
Example
import requests
r = requests.get("https://xoomar.com/api/markets/financials", params={"symbol": "MSFT"}).json()["data"]
for q in r["quarterly"][-4:]:
print(q["frame"], q["revenue"], q["netIncome"], q["epsDiluted"])
print(r["latest"]["cash"], r["latest"]["debt"])Response shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs, license, attribution, meta }. In meta, source names who publishes the data and sourceAttribution is the credit line to show with it. The data field is an object with these fields:
| Field | Type | Description |
|---|---|---|
| quarterly | array | Quarterly income rows, oldest first |
| quarterly[].frame | string | Calendar quarter frame, e.g. CY2026Q2 (three-month figures); CY2025Q4 with derived=true is fiscal year less the three reported quarters |
| quarterly[].fiscalPeriod | string | null | The quarter as the company names it, e.g. Q2 FY 2027 for NVIDIA's quarter ended 26 Jul 2026; null when the company's fiscal calendar isn't on file |
| quarterly[].fiscalYear | string | null | The quarter's fiscal year as the annual rows name it, e.g. FY 2027 |
| quarterly[].derived | boolean | undefined | true for a computed fourth quarter (EPS left empty) |
| quarterly[].revenue | number | null | Revenues or RevenueFromContractWithCustomerExcludingAssessedTax, USD |
| quarterly[].netIncome | number | null | NetIncomeLoss, USD |
| quarterly[].epsDiluted | number | null | EarningsPerShareDiluted (basic when diluted is absent) |
| annual | array | Fiscal year rows, oldest first |
| annual[].fiscalYear | string | The fiscal year as the company names it in its annual report, e.g. FY 2026 for NVIDIA's year ended 25 Jan 2026 |
| annual[].operatingCashFlow | number | null | NetCashProvidedByUsedInOperatingActivities for the fiscal year |
| annual[].capex | number | null | Capital expenditure for the fiscal year, USD: PaymentsToAcquirePropertyPlantAndEquipment, or the element the company files it as (PaymentsToAcquireProductiveAssets and others) |
| annual[].buybacks | number | null | PaymentsForRepurchaseOfCommonStock for the fiscal year, USD |
| annual[].dividends | number | null | PaymentsOfDividendsCommonStock or PaymentsOfDividends, USD |
| latest.cash / latest.debt / latest.equity / latest.assets | number | null | Balance sheet instants at latest.end |
| latest.sharesOutstanding | number | null | Cover-page shares outstanding at latest.sharesDate |
Covers about 2,000 US companies, refreshed weekly; a ticker outside coverage returns empty arrays.
Numeric fields typed string in the table carry exact decimals; parse them with your language's decimal type. No key needed to start: 10 requests a minute per IP without a key and 30 a minute with a free account key, with at least six months of history. A 429 response carries a Retry-After header in seconds. Credit XOOMAR with a link to the dataset page when you republish the data; the data terms are on the terms page.
A free account key raises the limit; send it in an X-API-Key header.
Frequently Asked Questions
Why are some quarters missing?
Are the numbers adjusted?
What are the rate limits?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.