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
/api/markets/earnings?from=2026-10-01&to=2026-10-31&status=estimated&ticker=NVDA&limit=500The 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.
/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.
/api/markets/earnings/csvsame parametersThe 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:
| Field | Type | Description |
|---|---|---|
| date | string (date) | The reported date (filing date of the 8-K) or the estimated date |
| ticker | string | Ticker as EDGAR maps it (class shares as BRK-B) |
| company | string | Filer name as on the filing |
| cik | string | SEC Central Index Key of the filer |
| status | string | reported (an 8-K with Item 2.02 on EDGAR) or estimated (an expected date, shown until the company's 8-K arrives) |
| basis | string (date) | null | Reference date for an estimated row; null for reported rows |
| accessionNo | string | null | The 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:
| Field | Type | Description |
|---|---|---|
| ticker | string | Ticker as requested, upper case |
| company | string | null | Filer name from the newest filing |
| cik | string | null | SEC Central Index Key |
| history | array | Reported dates newest first: { date, accessionNo }, up to 80 |
| next | object | null | { date, status: estimated, basis } for the next expected report, or null |
| lastReported | string (date) | null | Newest 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?
How good is the estimate?
Why is a company missing?
Is the time of day included?
What are the rate limits?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.