Strasmore Research
Learn Matt ConnorBy Matt Connor

How to Find a Stock's Earnings Date

A company sets its own earnings date and confirms it in a press release and an 8-K filing. Here is where to look, and how far an estimated date can move.

A stock's earnings date is set by the company itself, and only two documents confirm it: the press release announcing the date, and the 8-K filed with the SEC when the results go out. Every calendar you find elsewhere is either copying that announcement or guessing from last year's pattern. This page shows how to tell those two apart and what the filing deadlines actually require.

Who sets a company's earnings date?

No exchange assigns it. A company picks its own reporting day, books the conference call, and announces both, commonly two to four weeks ahead. What the SEC regulates is the filing, not the announcement. A large accelerated filer, meaning a company with at least $700 million of public float, has 40 calendar days after a fiscal quarter closes to file its 10-Q, and 60 days after the fiscal year closes to file its 10-K. Accelerated filers get 40 and 75 days. Everyone else gets 45 and 90.

The press release usually lands first, or the same day, and it carries the headline numbers. The 10-Q or 10-K that follows carries the full statements. The common SEC filings guide walks through the form numbers.

When do companies report after a quarter ends?

The clock starts at the company's own fiscal quarter end, which is not always the calendar quarter end. Count every income-statement period on file for the three years to June 2026 and the shape of the reporting calendar shows up at once.

QueryWhere fiscal quarters actually end: statement periods by calendar month, July 2023 to June 2026
The exact SQL behind every number
SELECT formatDateTime(period_end, '%b') AS quarter_end_label,
       count() AS statement_periods,
       round(100 * count() / (SELECT count()
                              FROM global_markets.stocks_income_statements
                              WHERE period_end >= toDate('2023-07-01')
                                AND period_end <= toDate('2026-06-30')), 1) AS share_pct
FROM global_markets.stocks_income_statements
WHERE period_end >= toDate('2023-07-01')
  AND period_end <= toDate('2026-06-30')
GROUP BY quarter_end_label, toMonth(period_end)
ORDER BY toMonth(period_end)
Run this yourself

Periods ending in Dec make up 33.1% of the file, with 16.6% in Mar, 16.5% in Jun and 25.1% in Sep. Those four months carry most of the file. The remainder is the part that catches people out: 1.2% of periods end in Jan and 1.7% in Jul. Apple closes its fiscal year in late September. Walmart closes its fiscal year on January 31. Their fourth-quarter reports land in the weeks after those dates, nowhere near the end of December.

Inside the window that follows a quarter close, most large companies report in the third to sixth week, comfortably ahead of the 40-day filing deadline. Treat that as a pattern rather than a rule. A company can report on day 12 or on day 39 and break nothing.

Confirmed date versus estimated date

A confirmed date comes with a document behind it. The company issues a short release: results for the quarter ending on a stated date will be published on a stated day, before the open or after the close, with a conference call at a stated time.

An estimated date has no document behind it. It is inferred from history: the same fiscal week as last year, the same weekday, nudged for holidays. Vendors publish these, apps display them, and very little on the screen marks them as estimates. Two tells are reliable. An estimated date rarely carries a call time, and it rarely changes as the quarter progresses.

Estimates move for ordinary reasons. A board meeting shifts by a week, an auditor needs more time, a holiday lands badly. When the confirmation arrives, the estimate is replaced. If a calendar entry has sat unchanged since the quarter began, nobody has sourced it yet.

Where the confirmation actually appears

Two places, in this order.

  • The investor-relations site, under a heading like Events, Events and Presentations, or News Releases. The date announcement is a two-paragraph press release.
  • EDGAR, the SEC's public filing system. Pull up the company and read its 8-K filings. Results are furnished under Item 2.02, Results of Operations and Financial Condition, with the release attached as Exhibit 99.1.

An 8-K is the current report a company files between quarterly reports when something material happens, generally within four business days of the event. Earnings are its most routine use. A third-party calendar is a copy of that filing at best and a guess at worst, which makes it a fine first stop and a poor final answer.

What a delayed filing looks like

When a company cannot file on time it submits Form 12b-25, which appears on EDGAR as NT 10-Q or NT 10-K. The NT stands for notification. It is due no later than one business day after the missed deadline, and it states the reason in plain language. Filing it buys five extra calendar days for a 10-Q and fifteen for a 10-K, and a report arriving inside that window still counts as timely.

The earnings call and the filing are separate events. A late filing does not automatically move the call. The two travel together often enough that an NT notice is worth reading before you rely on any date, and what it tells you is factual rather than predictive: the company has told the SEC it will miss a deadline, and it has said why. Stated reasons range from an accounting system migration to a restatement.

What the tape shows around a print

Price history will not hand you a date in advance. It does show the rhythm you are looking for. Nvidia closes its fiscal quarters in late January, April, July and October, and reports roughly three weeks after each close. Below are its ten largest overnight moves across the two years to June 2026, each measured from the last price of one session to the first price of the next.

QueryNVDA: the ten largest overnight moves, July 2024 to June 2026
The exact SQL behind every number
WITH daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMin(close, window_start) AS first_price,
           argMax(close, window_start) AS last_price
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'NVDA'
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-07-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY session
),
overnight AS (
    SELECT session,
           first_price,
           lagInFrame(last_price) OVER (ORDER BY session
                                        ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close
    FROM daily
)
SELECT formatDateTime(session, '%a %b %e, %Y') AS gap_label,
       round((toFloat64(first_price) / toFloat64(prior_close) - 1) * 100, 2) AS gap_pct,
       round(abs(toFloat64(first_price) / toFloat64(prior_close) - 1) * 100, 2) AS abs_gap_pct
FROM overnight
WHERE toFloat64(prior_close) > 0
  AND abs(toFloat64(first_price) / toFloat64(prior_close) - 1) < 0.3
ORDER BY abs(toFloat64(first_price) / toFloat64(prior_close) - 1) DESC
LIMIT 10
Run this yourself

The largest of the ten moved -14.49% on Mon Aug 5, 2024, a size of 14.49%, against 5.46% for the tenth-placed session on Fri Aug 2, 2024. Watch the weekday at the front of each label. A company that keeps a stable reporting weekday puts its outsized sessions on the same weekday too, which is the single most useful clue in an estimated date. Overnight moves have plenty of other sources; why stocks gap overnight covers them.

One company is an anecdote. Widen it to seven household names and measure the calendar distance between their biggest overnight moves.

QuerySpacing between each name's eight biggest overnight moves, July 2024 to June 2026
The exact SQL behind every number
WITH daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMin(close, window_start) AS first_price,
           argMax(close, window_start) AS last_price
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'WMT', 'COST', 'KO', 'JNJ')
      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2024-07-01')
      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, session
),
overnight AS (
    SELECT ticker,
           session,
           first_price,
           lagInFrame(last_price) OVER (PARTITION BY ticker ORDER BY session
                                        ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close
    FROM daily
),
moves AS (
    SELECT ticker,
           session,
           abs(toFloat64(first_price) / toFloat64(prior_close) - 1) * 100 AS abs_gap_pct
    FROM overnight
    WHERE toFloat64(prior_close) > 0
      AND abs(toFloat64(first_price) / toFloat64(prior_close) - 1) < 0.3
),
biggest AS (
    SELECT ticker,
           session,
           abs_gap_pct,
           row_number() OVER (PARTITION BY ticker ORDER BY abs_gap_pct DESC) AS rk
    FROM moves
),
spacing AS (
    SELECT ticker,
           session,
           abs_gap_pct,
           dateDiff('day',
                    lagInFrame(session) OVER (PARTITION BY ticker ORDER BY session
                                              ROWS BETWEEN 1 PRECEDING AND CURRENT ROW),
                    session) AS days_between
    FROM biggest
    WHERE rk <= 8
)
SELECT ticker,
       round(quantileDeterministic(0.5)(toFloat64(days_between), cityHash64(session)), 0) AS median_days_between,
       min(days_between) AS closest_pair_days,
       max(days_between) AS widest_pair_days,
       round(quantileDeterministic(0.5)(abs_gap_pct, cityHash64(session)), 2) AS median_move_pct
FROM spacing
WHERE days_between BETWEEN 1 AND 400
GROUP BY ticker
ORDER BY median_days_between DESC
Run this yourself

For each name the eight largest overnight moves of the two years are kept, then the number of calendar days between each one and the previous one is measured. Two years hold eight scheduled reports, roughly one every three months. The median interval runs 93 days for WMT at the top of the panel and 8 days for NVDA at the bottom, and the typical move in that set measured 3.91% for WMT. Where a name's interval sits near three months, its largest sessions line up with a quarterly cadence. Where it sits far below, the biggest moves of the window include sessions outside any reporting week. That is the honest limit of the method: prices show a rhythm, never a date.

How these panels are built

The price panels read one-minute bars from the regular session, 9:30 to 15:59 New York time. An overnight move is the first minute's price of one session measured against the last minute's price of the session before, so it holds everything that happened while the market was closed, an after-close release included. Moves above 30% in absolute size are dropped: the bars are unadjusted, and a share-count change such as a split prints as a huge overnight move that nobody traded.

The fiscal-calendar panel counts income-statement periods on file for the three years to June 2026, at whatever length each filing covered, so it counts periods rather than companies. Vendor filing dates on those statements are unreliable, and none appears anywhere on this page.

No panel names a future reporting date. A date the company has not announced yet exists in no dataset, and one it has announced lives in a press release.

Why the exact date matters if you hold options

Implied volatility is the size of the move an option's price implies, quoted as an annualized percentage. Contracts expiring after a scheduled report carry more of it than contracts expiring before, and once the numbers are public that premium leaves the price quickly, often in the first minutes of trading. IV crush walks through the mechanics, and how earnings move the option greeks tracks what happens to vega and theta across the event.

This is where an estimated date gets expensive. Being one week wrong puts a position on the wrong side of the print: an expiry landing before the release never sees the event, and one landing after it pays for a premium that disappears the following morning. The expected move is the arithmetic used to size a print before it happens.

FAQ

How far in advance do companies announce their earnings date?

Large companies typically confirm two to four weeks ahead in a short press release, and many keep a standing pattern from quarter to quarter. Smaller companies often give a week or less. Until that release exists, any date on screen is an estimate.

Is the earnings date in my brokerage app confirmed or estimated?

Assume estimated unless the entry shows a source. A confirmed date is attached to a press release and almost always a call time. An entry with no time of day that has not changed all quarter was inferred from last year's calendar.

Where in SEC filings is the earnings release?

On an 8-K, under Item 2.02, Results of Operations and Financial Condition, with the release attached as Exhibit 99.1. The full statements arrive separately in the 10-Q, or in the 10-K after the fourth quarter.

What does an NT 10-Q filing mean?

It is Form 12b-25, filed when a company will miss a filing deadline. It states the reason and buys five extra calendar days for a 10-Q or fifteen for a 10-K. It concerns the filing rather than the earnings call, though the two often move together.

Do companies report before the open or after the close?

Both are common, and the announcement says which. The choice decides when the price can respond: after an after-close release, the next regular-hours price is the following morning's open, with after-hours and pre-market trading in between.


Every panel here is a stored query with its SQL attached. Open one, swap the ticker, and run it on the Strasmore terminal.