Earnings Beat Streaks: Does Consecutive Beating Drive Stock Returns?
We analyzed 73,386 beat streak events across US exchanges from 2000-2025. A second consecutive earnings beat produces +0.77% T+21 abnormal return vs SPY. The sweet spot is streak 2 and 3. Very long streaks show diminishing returns.
When a company beats analyst EPS estimates for two or more consecutive quarters, something measurable happens after each additional beat. We tracked this across NYSE, NASDAQ, and AMEX from 2000 to 2025 and found statistically significant cumulative abnormal returns at every window out to 63 days. The drift is real, but it's compressing.
Contents
Method
Universe: NYSE, NASDAQ, and AMEX-listed stocks with market cap above $1B USD. We required at least two consecutive quarters of EPS beats to enter the sample. Data sourced from FMP's earnings surprises endpoint, 2000–2025.
Beat definition: epsActual > epsEstimated where ABS(epsEstimated) > 0.01. The floor on estimated EPS filters near-zero estimates where percentage beats carry no information.
Windows: Cumulative abnormal return (CAR) measured at T+1, T+5, T+21, and T+63 trading days after each streak-extending announcement. T+0 is excluded to avoid confounding intraday moves.
Benchmark: SPY (SPDR S&P 500 ETF). CAR = stock return minus SPY return over each window.
Streak counting: A streak resets to zero on any miss. Streak length is the count at the time of announcement. A company on its 4th consecutive beat contributes one event to the "streak 4" bucket.
Total events: 71,150
Data: FMP financial data warehouse, 2000–2025. Updated April 2026.
What We Found
The T+1 drift is immediate and robust. +0.51% with a t-stat of 33.90 across 71,150 events is not noise. The market reacts when a company extends a streak, but the reaction doesn't stop there.
The more interesting finding is the sustained drift. The 21-day window shows +1.08% (t=26.99), more than double the T+1 reaction. This is consistent with slow incorporation of earnings beat information. Even at T+63, the cumulative abnormal return remains at +0.93% (t=14.72), with a 51% hit rate.
This sustained drift contradicts the efficient market hypothesis. If beat streaks were immediately priced in, T+21 and T+63 returns would compress back to zero. They don't. The signal persists for months, suggesting institutional investors systematically underprice consecutive earnings beats.
| Window | Mean CAR | t-stat | N | Hit Rate |
|---|---|---|---|---|
| T+1 | +0.51% | 33.90 | 71,150 | 54.3% |
| T+5 | +1.01% | 35.02 | 71,134 | 55.1% |
| T+21 | +1.08% | 26.99 | 71,102 | 53.5% |
| T+63 | +0.93% | 14.72 | 70,956 | 51.0% |
Streak Length Breakdown
Streak 2 is the strongest category. The second consecutive beat produces a +1.42% CAR at T+21 and +1.21% at T+63, both statistically significant (t=17.22 and t=9.24 respectively). By streak 5+, the drift compresses to +0.86% at T+21 and +0.62% at T+63, but remains significant given the large sample.
| Streak | N | T+1 | T+21 | T+63 | t(21) |
|---|---|---|---|---|---|
| Streak 2 | 18,770 | +0.60% | +1.42% | +1.21% | 17.22 |
| Streak 3 | 12,142 | +0.50% | +1.12% | +1.03% | 11.28 |
| Streak 4 | 8,370 | +0.55% | +1.18% | +1.30% | 10.09 |
| Streak 5+ | 31,868 | +0.45% | +0.86% | +0.62% | 14.94 |
Two things stand out. First, the T+21 and T+63 returns for streaks 2-4 are remarkably consistent, all above +1%. The decay only becomes pronounced at streak 5+, suggesting the market discounts very long streaks. Second, streak 4 actually outperforms streak 3 at T+63 (+1.30% vs +1.03%), indicating non-monotonic decay.
The practical implication: streak 2 is the best entry for T+21 drift. Streak 4 shows a secondary peak at T+63, possibly due to underpricing of sustained consistency.
The SQL Screen
This query finds stocks currently on a beat streak of 3 or more consecutive quarters, ranked by streak length:
WITH ordered_earnings AS (
SELECT symbol,
CAST(date AS DATE) AS event_date,
epsActual AS actual,
epsEstimated AS estimated,
CASE WHEN epsActual > epsEstimated THEN 1 ELSE 0 END AS is_beat,
ROUND((epsActual - epsEstimated) / ABS(NULLIF(epsEstimated, 0)) * 100, 1) AS surprise_pct,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS recency_rank
FROM earnings_surprises
WHERE epsEstimated IS NOT NULL
AND ABS(epsEstimated) > 0.01
AND epsActual IS NOT NULL
),
streak_calc AS (
SELECT *, SUM(CASE WHEN is_beat = 0 THEN 1 ELSE 0 END)
OVER (PARTITION BY symbol ORDER BY recency_rank
ROWS UNBOUNDED PRECEDING) AS streak_breaker
FROM ordered_earnings
),
streaks AS (
SELECT symbol,
COUNT(*) AS current_streak,
ROUND(AVG(surprise_pct), 1) AS avg_surprise_pct,
MIN(event_date) AS streak_start,
MAX(event_date) AS latest_beat
FROM streak_calc
WHERE streak_breaker = 0 AND is_beat = 1
GROUP BY symbol
HAVING COUNT(*) >= 3
)
SELECT s.symbol, s.current_streak, s.avg_surprise_pct,
s.streak_start, s.latest_beat,
ROUND(k.mktCapUSD / 1e9, 1) AS mktcap_bn
FROM streaks s
JOIN key_metrics k ON s.symbol = k.symbol AND k.period = 'TTM'
WHERE k.mktCapUSD > 1000000000
QUALIFY ROW_NUMBER() OVER (PARTITION BY s.symbol ORDER BY k.date DESC) = 1
ORDER BY s.current_streak DESC, s.avg_surprise_pct DESC
LIMIT 30
The streak_breaker column is the key logic. Earnings are ordered from most recent to oldest (recency_rank). Each time a miss appears, the running sum increments. Filtering to streak_breaker = 0 keeps only quarters from the current unbroken run. The QUALIFY clause deduplicates the key_metrics join to the most recent TTM row per symbol.
Run this screen live on Ceta Research → (pre-loaded query, no account required)
Why It Works
Post-earnings announcement drift (PEAD) has been documented since Ball and Brown (1968). The beat streaks variation adds a layer: the market appears to underweight the information content of a continuing streak.
Myers, Myers, and Skinner (2007) showed that companies with long EPS streaks are valued as if analysts expect the streak to continue, but stock price reactions to individual beats within a streak are subdued. The market discounts each beat as "expected" rather than informative.
Loh and Warachka (2012) found that stocks with high idiosyncratic volatility show stronger PEAD after earnings beats. Streak stocks tend to be lower-volatility compounders, which partly explains why the T+1 reaction is moderate rather than explosive. The slow drift out to T+21 is consistent with their findings on investor under-reaction to streak information specifically.
The mechanistic explanation: most investors anchor to the streak and don't recalibrate their forward expectations aggressively enough after each beat. The signal is that the market keeps being surprised by something that is, in retrospect, predictable.
Limitations
Survivorship bias: This study uses stocks with available earnings data. Companies that delisted due to failure are underrepresented, which biases CAR estimates upward.
Market cap filter: The $1B floor excludes small caps, where the effect is likely larger but liquidity is worse. The results here apply to institutional-grade names.
Benchmark simplification: SPY is a US-only market-cap-weighted index. Sector tilts in beat streak stocks (typically technology, healthcare, consumer discretionary) mean SPY may not be the tightest benchmark. Sector-adjusted CARs would likely be smaller.
Transaction costs: The T+1 numbers look tradeable in aggregate, but earnings announcements happen after hours. Getting filled at the open after a surprise can be expensive for larger positions. The T+21 drift is more practically accessible.
Look-ahead bias in the screen: The SQL query above is designed as a screening tool, not a backtest entry signal. The historical results in this study use point-in-time data. Applying the screen as-is to historical dates would require careful data snapshotting.
Takeaway
US beat streaks produce statistically reliable drift across all measured windows. The T+21 window (+1.08%, t=26.99) is particularly robust, and the T+63 drift remains significant at +0.93% (t=14.72). Early streaks (streak 2) are the strongest entry point, but even streak 5+ shows meaningful drift.
The more interesting finding is that this signal exists at all, given how well-studied earnings drift is. Beat streaks are a specific, filterable subset of PEAD. The consistency of the T+21 result across 25 years and 71,000 events suggests it won't disappear, even if it's been partially arbitraged.
Part of a series: Beat streaks analyzed across 16 exchanges. See Canada, Japan, Taiwan, India, Brazil, and the global comparison.
Data: FMP earnings surprises + key metrics, 2000–2025. NYSE, NASDAQ, AMEX. Market cap > $1B USD. 71,150 streak events.