All Posts
ProductAccurate Earnings DatesEarnings Calendar APIData Accuracy

Accurate Earnings Dates API: Predict, Then Confirm

How StockFit gets earnings dates right: predict from each issuer's SEC filing cadence, then confirm the next 28 days against Nasdaq-based exchange data.

Published July 12, 202611 min readStockFit Engineering
Accurate Earnings Dates API: Predict, Then Confirm

Getting an accurate earnings date is one of those problems that looks trivial and is not. A date three months out is a guess; a date next week is close to certain, and the whole industry charges for the difference. StockFit closes that gap with a two-layer approach: predict the date from each issuer's SEC filing cadence, then confirm the near-term window (the next 28 days) against official exchange data. This post is how that works, with real production responses so you can see exactly where a prediction turns into a confirmed date.

Every JSON block below is a live response pulled from the production API on July 12, 2026. If you want the full endpoint walkthrough (batch calls, consensus EPS fields, cURL and Node examples), that lives in the earnings calendar API guide. This post is about one thing: why the dates are right, and how to tell a confirmed date from a predicted one.

Why accurate earnings dates are hard to come by

A company does not file its earnings date anywhere machine-readable in advance. The SEC gives you filing deadlines (a large accelerated filer has 40 days after quarter-end to file a 10-Q, 60 for the 10-K), not the actual announcement day, and companies routinely report well inside the deadline on a date that drifts a few days year to year. Investor-relations pages announce the date eventually, but in unstructured HTML and often only two or three weeks ahead. So a data provider is left doing two different jobs at once: guessing the date far out from historical patterns, and capturing the real date once the company commits to it.

This is not a StockFit-specific hurdle, it is a problem the whole data industry visibly struggles with. Search for an earnings calendar API and you find providers selling a separate "confirmed" endpoint alongside the regular one, calendars advertising a headline accuracy figure that only applies to their confirmed dates, and dedicated vendors whose entire pitch is that they finally get forecast dates right. When multiple established providers each carve out a distinct product just to signal which dates are trustworthy, that tells you the naive single-date approach is unreliable often enough to matter. The common guidance in these tools is the same: treat dates inside two to three weeks as confirmed and earlier ones as estimates.

Most calendars blur those two jobs into one field and leave you to guess how much to trust it. The better ones split the difference explicitly. That split is the right instinct. StockFit builds it into the data model instead of leaving it to the reader, and sources each layer from a primary place: the company's SEC filings for the prediction, the exchange for the confirmation.

Layer one: predict from SEC filing cadence

The first layer is a prediction from each issuer's own SEC filing history. For a given company and fiscal quarter, we look at when the same-quarter 10-Q or 10-K hit EDGAR in prior years, adjust for fiscal-calendar drift and the weekday pattern the company tends to report on, and project the next date forward. This is deterministic and works for any established filer, because the raw material is the company's public filing record, not a third-party guess. First-time filers are excluded from the market-wide list because there is no prior cadence to fit.

The single-ticker lookup, /api/earnings/date, returns exactly this: the predicted earnings and filing date for the next report.

bash
curl 'https://api.stockfit.io/v1/api/earnings/date?symbol=NVDA' \
  -H 'Authorization: Bearer $STOCKFIT_API_KEY'
json
{
  "symbol": "NVDA",
  "earningsDate": "2026-08-26",
  "filingDate": "2026-08-26"
}

On July 12, NVIDIA's next report is projected for August 26, roughly six weeks out. Notice what is not in that response: no expected report time, no consensus estimate. That absence is deliberate and it is the tell. Six weeks out, all we have is the cadence-based prediction, so that is all the endpoint claims. For a large- or mid-cap issuer the prediction typically lands within a few business days of the eventual filing, which is good enough to plan around but not something we dress up as confirmed.

Layer two: confirm the next 28 days from exchange data

The second layer kicks in inside the near-term window. For roughly the next month (the market-wide /api/earnings/upcoming endpoint looks ahead up to 28 days), the predicted date is cross-checked and enriched against official exchange data, Nasdaq-based, rather than scraped from a press release or inferred by an algorithm. That is the layer that turns a projection into a date you can schedule around: it firms up the day, adds the expected report time (pre-market or after-hours), and carries the analyst consensus where it exists.

Here is the near-term window in one call. The market-wide calendar returns every issuer expected to report soon, sorted by date.

bash
curl 'https://api.stockfit.io/v1/api/earnings/upcoming?days=14&pageSize=15' \
  -H 'Authorization: Bearer $STOCKFIT_API_KEY'
json
{
  "page": 1,
  "pageSize": 15,
  "totalPages": 34,
  "totalResults": 509,
  "data": [
    { "symbols": ["JPM"],  "name": "JPMORGAN CHASE & CO",       "earningsDate": "2026-07-14", "filingDate": "2026-07-14", "filingType": "10-Q", "epsEstimate": 5.52, "numEstimates": 6, "reportTime": "pre_market" },
    { "symbols": ["C","C-PN","C-PR"], "name": "CITIGROUP INC",   "earningsDate": "2026-07-14", "filingDate": "2026-07-14", "filingType": "10-Q", "epsEstimate": 2.72, "numEstimates": 7, "reportTime": "pre_market" },
    { "symbols": ["FAST"], "name": "FASTENAL CO",                "earningsDate": "2026-07-14", "filingDate": "2026-07-17", "filingType": "10-Q", "epsEstimate": 0.33, "numEstimates": 7, "reportTime": "pre_market" }
  ]
}

509 issuers are expected to report in the next 14 days, three shown. Every one of these near-term rows carries a concrete reportTime: the big banks (JPMorgan, Citigroup) report pre-market on July 14, and Fastenal is expected to announce July 14 but file its 10-Q on July 17, so earningsDate and filingDate are tracked separately. These are inside the confirmation window, so they carry the exchange-confirmed timing, not just a cadence guess.

Estimated vs confirmed, visible in the JSON

You never have to wonder which layer a date came from, because the response shows you. Put a far-out name and a near-term name side by side with the batch endpoint, /api/earnings/calendar (up to 50 tickers in one call).

bash
curl 'https://api.stockfit.io/v1/api/earnings/calendar?symbols=JPM,GOOGL,MSFT,AAPL,NVDA' \
  -H 'Authorization: Bearer $STOCKFIT_API_KEY'
json
{
  "JPM":   { "earningsDate": "2026-07-14", "filingDate": "2026-07-14", "filingType": "10-Q", "epsEstimate": 5.52, "numEstimates": 6,  "reportTime": "pre_market" },
  "GOOGL": { "earningsDate": "2026-07-22", "filingDate": "2026-07-23", "filingType": "10-Q", "epsEstimate": 2.86, "numEstimates": 11, "reportTime": "after_hours" },
  "MSFT":  { "earningsDate": "2026-07-29", "filingDate": "2026-07-29", "filingType": "10-Q", "epsEstimate": 4.21, "numEstimates": 15, "reportTime": "after_hours" },
  "AAPL":  { "earningsDate": "2026-07-30", "filingDate": "2026-07-31", "filingType": "10-Q", "epsEstimate": 1.88, "numEstimates": 11, "reportTime": "after_hours" },
  "NVDA":  { "earningsDate": "2026-08-26", "filingDate": "2026-08-26", "filingType": "10-Q" }
}

Read that from top to bottom. JPMorgan (July 14), Alphabet (July 22), Microsoft (July 29), and Apple (July 30) all sit inside the 28-day window, and all four carry a reportTime and a consensus estimate. NVIDIA (August 26) sits outside it, and it carries neither: just the predicted date. The presence of reportTime is the machine-readable line between a confirmed date and a predicted one. When you see a report time, the date has been through the exchange-data confirmation layer. When you do not, you are looking at the cadence prediction, accurate enough to plan around, honest enough to label as an estimate. The fields are omitted rather than nulled, so a simple if (row.reportTime) check tells you which layer you are on.

Why an exchange-sourced date is a trust factor

The near-term layer being sourced from official exchange data, Nasdaq-based, is the part that matters most and the part most calendars are quiet about. Confirmed dates elsewhere are often assembled from press-release scraping or a third-party algorithm, and their provenance is not something you can point a compliance reviewer at. An exchange is the venue where the security trades and where the corporate-action and event calendar is maintained as a matter of market infrastructure, so a date sourced from it carries a different weight than a date a scraper inferred from an IR web page. We do not resell a black-box calendar; the near-term confirmation is exchange-grade, and the far-term prediction is derived from the company's own SEC filings. Both ends of the pipeline trace to a primary source.

That is the same principle that runs through the rest of StockFit: every fundamental value carries its SEC accession number, and every earnings date carries a provenance you can name. Accuracy is not a feature we bolt on, it is the reason the data model is shaped this way. For a workflow that keys trades or signals to the calendar, provenance is not a nicety. A date that silently shifts breaks a scheduled job; a date you can trust to a source does not.

Same-day truth: the 8-K Item 2.02 stream

There is a third, absolute source of truth, and it arrives the moment earnings are actually released. US issuers report earnings on Form 8-K under Item 2.02, Results of Operations and Financial Condition, within minutes of market close, with the press release attached as Exhibit 99.1. Once that filing hits EDGAR, the date is no longer predicted or confirmed, it is recorded. The official 8-K instructions on sec.gov spell out the item.

Stream every earnings 8-K across the market with /api/filings/latest filtered to event=earnings. The item codes are classified server-side, so a filing tagged 2.02 shows up in the earnings stream without any client-side parsing.

bash
curl 'https://api.stockfit.io/v1/api/filings/latest?event=earnings&pageSize=10' \
  -H 'Authorization: Bearer $STOCKFIT_API_KEY'
json
{
  "page": 1, "pageSize": 10, "totalPages": 7, "totalResults": 67,
  "data": [
    {
      "type": "8-K",
      "accessionNumber": "0001193125-26-280314",
      "url": "https://www.sec.gov/Archives/edgar/data/723531/000119312526280314/payx-20260624.htm",
      "dateFiled": "2026-06-24",
      "items": ["2.02", "9.01"],
      "events": ["earnings", "financial_exhibits"],
      "symbol": "PAYX",
      "companyName": "PAYCHEX INC"
    },
    {
      "type": "8-K",
      "accessionNumber": "0000815097-26-000086",
      "url": "https://www.sec.gov/Archives/edgar/data/815097/000081509726000086/ccl-20260623.htm",
      "dateFiled": "2026-06-23",
      "items": ["2.02", "9.01"],
      "events": ["earnings", "financial_exhibits"],
      "symbol": "CCL",
      "companyName": "CARNIVAL CORP"
    }
  ]
}

Each record carries the accessionNumber and a direct url to the filing on EDGAR, so the recorded earnings date is auditable to the exact document. This is the anti-lookahead anchor for any event study: the date a strategy is allowed to act on is the date the 8-K was filed, not the fiscal period it describes. Once you have an accession number, /api/filings/item with item=2.02 pulls the press-release body as HTML or plain text. The three layers stack cleanly: predict far out, confirm near term, record on filing. The companion SEC forms field guide lists every 8-K item code we classify.

The earnings dates API endpoints and tiers

Three endpoints answer the earnings-date question at different scopes, and the filings stream provides the same-day source of record.

text
/api/earnings/date        Single ticker, next predicted date (+ estimate when confirmed)
/api/earnings/calendar    Batch up to 50 tickers, one map keyed by symbol
/api/earnings/upcoming    Market-wide, next 1-28 days, sorted by date
/api/filings/latest       event=earnings: the 8-K Item 2.02 stream (source of record)
/api/filings/item         item=2.02: extract the press-release body

Tier coverage: /api/earnings/date is on Starter ($15/mo), alongside /api/filings/latest. The market-wide /api/earnings/upcoming and batch /api/earnings/calendar require Stock ($39/mo) or Professional ($69/mo), which is also where 8-K body extraction via /api/filings/item unlocks. If you are prototyping, the free tier includes /api/earnings/eps-history and /api/earnings/dividend-history so you can wire up the surrounding earnings data before upgrading. Free signup at /signup, no credit card required. Every endpoint is also an MCP tool, so a Claude, Cursor, or VS Code agent can ask for the next earnings date directly (setup at /mcp).

For strategies that trade or signal around the print, pair the calendar with point-in-time fundamentals so the numbers you act on respect the same filing-date discipline as the dates. The point-in-time backtesting guide covers that side.

FAQ

How accurate are earnings calendar dates?

It depends on how far out the date is. Inside roughly the next 28 days, StockFit confirms the date against official exchange data (Nasdaq-based), so near-term dates are highly reliable and carry an expected report time. Beyond that window, the date is a prediction from the issuer's historical SEC filing cadence, which for large- and mid-cap names typically lands within a few business days of the actual filing. The response tells you which is which: a confirmed date carries a reportTime field, a predicted one does not.

What is the difference between an estimated and a confirmed earnings date?

An estimated (predicted) date is projected from when the company filed the same-quarter report in prior years. A confirmed date has been cross-checked against official exchange data inside the near-term window and firmed up with an expected report time. In the StockFit response, the presence of the reportTime field (pre_market or after_hours) is the machine-readable marker that a date is confirmed rather than predicted.

Where do StockFit's earnings dates come from?

Two sources, layered. Far out, the date is predicted from each issuer's SEC filing cadence on EDGAR. Inside the next 28 days, it is confirmed against official exchange data (Nasdaq-based), which adds the expected report time. When earnings are actually released, the 8-K Item 2.02 filing on EDGAR becomes the auditable record, available via /api/filings/latest with event=earnings. There is no press-release scraping or black-box third-party calendar in the path.

How far in advance are earnings dates confirmed?

Up to about 28 days, which is the look-ahead ceiling on the market-wide /api/earnings/upcoming endpoint. Within that window a date is confirmed against exchange data and carries an expected report time. Further out, you get the cadence-based prediction only, and the report time is omitted until the date enters the confirmation window.

How do I get the next earnings date for a stock via API?

Call /api/earnings/date with a symbol for a single ticker, /api/earnings/calendar with up to 50 symbols for a watchlist, or /api/earnings/upcoming for the market-wide list of companies reporting in the next 1 to 28 days. Each returns the predicted earnings and filing date, plus the expected report time and consensus EPS estimate when the date is within the confirmation window.

What is the most authoritative source for an earnings date?

The company's own 8-K filed under Item 2.02, which is the SEC filing that announces results. It is the recorded, auditable date and it carries an accession number. Stream these across the market with /api/filings/latest filtered to event=earnings. Predicted and confirmed dates get you ahead of the print; the 8-K is the source of record once it lands.

Why does an earnings date sometimes have no report time or EPS estimate?

Because it is a predicted date outside the confirmation window, or a thinly covered small-cap with no analyst estimates. The reportTime, epsEstimate, and numEstimates fields are omitted rather than nulled when they are not available, so their absence is a signal, not missing data. A far-out name like NVIDIA at six weeks out returns just the predicted date until it enters the near-term window.

Which tier do I need for the earnings dates API?

The single-ticker /api/earnings/date and the /api/filings/latest earnings stream are on Starter ($15/mo). The market-wide /api/earnings/upcoming and batch /api/earnings/calendar are on Stock ($39/mo) and Professional ($69/mo). The free tier includes the surrounding earnings data (/api/earnings/eps-history and /api/earnings/dividend-history) for prototyping. No credit card to sign up.

Ready to build?

Free API key, no credit card. Every endpoint mentioned in this post is available on the free tier.

Get Your Free API Key