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, 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

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

FieldTypeDescription
quarterlyarrayQuarterly income rows, oldest first
quarterly[].framestringCalendar quarter frame, e.g. CY2026Q2 (three-month figures); CY2025Q4 with derived=true is fiscal year less the three reported quarters
quarterly[].fiscalPeriodstring | nullThe 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[].fiscalYearstring | nullThe quarter's fiscal year as the annual rows name it, e.g. FY 2027
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)
annualarrayFiscal year rows, oldest first
annual[].fiscalYearstringThe fiscal year as the company names it in its annual report, e.g. FY 2026 for NVIDIA's year ended 25 Jan 2026
annual[].operatingCashFlownumber | nullNetCashProvidedByUsedInOperatingActivities for the fiscal year
annual[].capexnumber | nullCapital expenditure for the fiscal year, USD: PaymentsToAcquirePropertyPlantAndEquipment, or the element the company files it as (PaymentsToAcquireProductiveAssets and others)
annual[].buybacksnumber | nullPaymentsForRepurchaseOfCommonStock for the fiscal year, USD
annual[].dividendsnumber | nullPaymentsOfDividendsCommonStock or PaymentsOfDividends, USD
latest.cash / latest.debt / latest.equity / latest.assetsnumber | nullBalance sheet instants at latest.end
latest.sharesOutstandingnumber | nullCover-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?
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?
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.

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