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; 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 }. The data field is an array of records with these fields:
| Field | Type | Description |
|---|---|---|
| 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[].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[].operatingCashFlow | number | null | NetCashProvidedByUsedInOperatingActivities for the fiscal year |
| annual[].buybacks | number | null | PaymentsForRepurchaseOfCommonStock for the fiscal year, USD |
| annual[].dividends | number | null | PaymentsOfDividendsCommonStock or PaymentsOfDividends, USD |
| latest.cash / debt / equity / assets | number | null | Balance sheet instants at latest.end |
| latest.sharesOutstanding | number | null | Cover-page shares outstanding at latest.sharesDate |
Facts are loaded for the companies with company pages (about 1,500 tickers) and refreshed weekly; a ticker outside that set returns empty arrays until it is loaded.
Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication or API key needed. Attribution is appreciated: xoomar.com/markets.
Need more headroom? A free account raises your limit to 120 requests a minute with 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.