CRM post-earnings drift over ~3 years: forward 20-day returns after EPS beats vs misses
We looked at every Salesforce (CRM) quarterly release over the past ~3 years (12 events) and measured the 20-trading-day forward return from the first market close on-or-after each reported date, classifying reports as beats, misses, or inline. The question: do EPS beats produce the classic post-earnings drift (PEAD) — small positive follow-through — or does the report-day move fully incorporate the surprise?
The answer here is no reliable PEAD. Beats averaged -0.56% over the next 20 days versus an unconditional -0.34% baseline (beat edge ≈ -0.22%, p ≈ 0.92), and the single miss was a -9.57% outlier — large but anecdotal (N=1). With 11 beats and one miss, the evidence is thin; the full analysis below shows the distributions, tests, and why this looks like noise rather than a repeatable edge.
For CRM over the past ~3 years, is post-earnings drift real — after a quarterly EPS beat do forward 20-day returns run above the everyday baseline (and misses drift lower), or does the report-day move fully price the news with no follow-through? Thesis: forward 20-day returns track the sign of the surprise, so beats keep grinding higher and misses keep bleeding, meaning classic PEAD still pays in Salesforce.
How this was measured
Resampled CRM minute bars to daily closes and computed forward 20-trading-day returns. Pulled quarterly earnings from CRM_earnings; kept reports with non-null surprise_percentage and reported_date within the last ~3 years. For each release, anchored to the first trading day on-or-after reported_date (t0) and measured close[t0+20]/close[t0]-1. Classified events as 'beat' (surprise_percentage>0), 'miss' (<0), or 'inline' (=0). Compared mean forward returns for beats and misses against the unconditional baseline 20-day forward return over the same price window using Welch's two-sample t-test (unequal variance).
The key numbers
Reading the numbers
Across 12 events (11 beats, 1 miss) the mean 20-day return after beats was -0.005618707584079402 versus an unconditional baseline of -0.003394456597047969; the single miss was much worse at -0.0957170313256892. Statistical tests show no clear difference (beats p=0.9223, misses p=1.0).
The charts
The bar chart lines up mean forward-20d returns: Beats = -0.0056, Misses = -0.0957, Baseline = -0.0034. The eye is drawn to the miss bar, which is far below the others, while the beat bar actually sits slightly below the baseline. For the PEAD question this means beats do not show a clear positive follow-through versus the everyday baseline and the single miss shows a large negative move, but the means are close enough that statistical tests do not support a reliable beat-driven drift.
This histogram of the 11 beat outcomes shows a wide spread (min -0.1363, max 0.1179) with mean -0.0056. Look at the mix of positive and negative returns rather than a single cluster to the right — several beats produce near-zero or negative 20-day moves. That dispersion explains why the average after beats is essentially indistinguishable from the baseline: beats do not uniformly 'keep grinding higher.'
The misses histogram contains just one point: the single miss returned -0.0957 (N=1). The chart is therefore just that one deep negative outcome, which looks like strong post-earnings bleeding in isolation. For inference this is weak evidence: a large negative follow-through is visible, but it rests on one event only.
The unconditional baseline across 725 windows has mean -0.0034 and a very wide range (min -0.2935, max 0.256). The baseline distribution overlaps the beats distribution substantially, so small differences in means (beat edge = -0.002224) are swamped by volatility. In plain terms, the background noise in 20-day returns is large, making it hard to detect a consistent PEAD effect for Salesforce in this sample.
CRM earnings events — forward 20-day returns
| reported_date | surprise_pct | direction | anchor_date | fwd_date | fwd_20d_return |
|---|---|---|---|---|---|
| 2023-08-30 | 11.58 | beat | 2023-08-30 | 2023-09-28 | -0.1053 |
| 2023-11-29 | 2.43 | beat | 2023-11-29 | 2023-12-28 | 0.0605 |
| 2024-02-28 | 0.88 | beat | 2024-02-28 | 2024-03-27 | 0.0241 |
| 2024-05-29 | 2.95 | beat | 2024-05-29 | 2024-06-27 | 0.1179 |
| 2024-08-28 | 8.47 | beat | 2024-08-28 | 2024-09-26 | 0.0261 |
| 2024-12-03 | -1.63 | miss | 2024-12-03 | 2025-01-02 | -0.0957 |
| 2025-02-26 | 6.51 | beat | 2025-02-26 | 2025-03-26 | -0.0361 |
| 2025-05-28 | 1.18 | beat | 2025-05-28 | 2025-06-26 | -0.0273 |
| 2025-09-03 | 4.68 | beat | 2025-09-03 | 2025-10-01 | -0.0247 |
| 2025-12-03 | 35.19 | beat | 2025-12-03 | 2026-01-02 | 0.0479 |
| 2026-02-25 | 24.92 | beat | 2026-02-25 | 2026-03-25 | -0.0086 |
| 2026-05-27 | 23.96 | beat | 2026-05-27 | 2026-06-25 | -0.1363 |
The takeaway
No — this sample does not show a reliable post-earnings drift for CRM. Beats averaged -0.56% over the next 20 trading days versus the unconditional -0.34% baseline (beat edge -0.22%), and that difference is statistically null (p = 0.9223 — about a 92-in-100 chance the beat vs. baseline gap is just noise). The lone miss was a -9.57% 20-day move (beat-minus-miss gap ~9.01%), but that's a single event (N=1) and the miss comparisons have p = 1.00, so the big miss is anecdote, not a pattern. Bottom line: with only 12 earnings events (11 beats, 1 miss) the evidence is thin — this looks like a coin flip or a lean at best, not a tradable, repeatable PEAD effect for Salesforce over the examined window.
The fine print
- Only 12 quarterly events (11 beats, 1 miss) — tiny sample limits confidence.
- One large miss (N=1) drives the beat-minus-miss gap; that single outlier skews impressions.
- Anchor uses the first trading day on/after reported_date; pre/post-market timing can shift day-0.
- Baseline is the unconditional 20-day return distribution, not a matched non-event control.