XOOMAR

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

GET
/api/markets/financials?symbol=AAPL

quarterly (12 quarters), annual (6 years) and latest for one ticker.

GET
/api/markets/financials/csv?symbol=AAPL

The same quarterly and annual rows for one ticker as CSV.

GET
/api/markets/buybacks

Largest 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:

FieldTypeDescription
quarterly[].framestringCalendar quarter frame, e.g. CY2026Q2 (three-month figures); CY2025Q4 with derived=true is fiscal year less the three reported quarters
quarterly[].derivedboolean | undefinedtrue for a computed fourth quarter (EPS left empty)
quarterly[].revenuenumber | nullRevenues or RevenueFromContractWithCustomerExcludingAssessedTax, USD
quarterly[].netIncomenumber | nullNetIncomeLoss, USD
quarterly[].epsDilutednumber | nullEarningsPerShareDiluted (basic when diluted is absent)
annual[].operatingCashFlownumber | nullNetCashProvidedByUsedInOperatingActivities for the fiscal year
annual[].buybacksnumber | nullPaymentsForRepurchaseOfCommonStock for the fiscal year, USD
annual[].dividendsnumber | nullPaymentsOfDividendsCommonStock or PaymentsOfDividends, USD
latest.cash / debt / equity / assetsnumber | nullBalance sheet instants at latest.end
latest.sharesOutstandingnumber | nullCover-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?
A quarter appears when the SEC assigned the company's three-month figure a calendar frame. Fourth quarters are reported only inside the 10-K, so they are derived as the fiscal year less the three reported quarters when all four figures are on file; companies with fiscal quarters far from calendar quarter ends still have gaps.
Are the numbers adjusted?
No. They are the values the company tagged, restated when a later filing restates them. Non-GAAP figures are not in XBRL and not here.
What are the rate limits?
30 requests per minute per IP without a key, 120 with a free account key.

Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.