XOOMAR

Free Earnings Calendar API

When US companies report results, from the filings themselves. A reported row is an 8-K with Item 2.02 (Results of Operations and Financial Condition) on EDGAR, exact to the day, since January 2023. An estimatedrow is an expected date, shown until the company's 8-K arrives. No consensus numbers, no EPS: dates only, from the primary source.

Endpoints

GET
/api/markets/earnings?from=2026-10-01&to=2026-10-31&status=estimated&ticker=NVDA&limit=500

The calendar for a window, by date then ticker. Default: today to fourteen days ahead, reported and estimated rows. from and to open any window up to 120 days (a past window returns reported rows only, and the free API reaches back six months); status keeps one kind; ticker one company; limit up to 2,000.

GET
/api/markets/earnings/{ticker}

One company: every reported date since 2023, newest first, each with its filing's accession number, and the next estimated date. 404 when the company has no Item 2.02 filing on record.

GET
/api/markets/earnings/csvsame parameters

The calendar window as CSV.

Example

import requests

r = requests.get("https://xoomar.com/api/markets/earnings", params={"status": "estimated", "to": "2026-10-31"})
for row in r.json()["data"]:
    print(row["date"], row["ticker"], row["status"])

nvda = requests.get("https://xoomar.com/api/markets/earnings/NVDA").json()["data"]
print(nvda["next"], [h["date"] for h in nvda["history"][:4]])

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 array of records with these fields:

FieldTypeDescription
datestring (date)The reported date (filing date of the 8-K) or the estimated date
tickerstringTicker as EDGAR maps it (class shares as BRK-B)
companystringFiler name as on the filing
cikstringSEC Central Index Key of the filer
statusstringreported (an 8-K with Item 2.02 on EDGAR) or estimated (an expected date, shown until the company's 8-K arrives)
basisstring (date) | nullReference date for an estimated row; null for reported rows
accessionNostring | nullThe filing's accession number for reported rows; null for estimates

A company keeps one estimate per quarter; when its 8-K arrives the estimate disappears and the reported row takes its place.

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.

The per-company route returns an object instead of a list:

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
tickerstringTicker as requested, upper case
companystring | nullFiler name from the newest filing
cikstring | nullSEC Central Index Key
historyarrayReported dates newest first: { date, accessionNo }, up to 80
nextobject | null{ date, status: estimated, basis } for the next expected report, or null
lastReportedstring (date) | nullNewest reported date

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

Where do the dates come from?
Reported dates are the filing dates of 8-K forms with Item 2.02 on SEC EDGAR, updated twice a day. An estimated date is marked as an estimate until the company's 8-K confirms it.
How good is the estimate?
It's an expected date, not an announced one. Treat it as a week, not a day, until the company's 8-K confirms it.
Why is a company missing?
It has no recent 8-K with Item 2.02 (foreign private issuers file 6-K instead; some small companies put results only in the 10-Q).
Is the time of day included?
No. The filing carries the date, not whether the release was before the open or after the close.
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.