Post-earnings-announcement drift (PEAD) conditioned on EPS surprise
Post-earnings-announcement drift (PEAD) around the company's quarterly earnings announcements, conditioned on the EPS surprise. Announcement dates come from SEC 8-K item 2.02 filings; the surprise (BEAT/MISS/MEET) is joined by DATE from the fiscal earnings history (best-effort). Per event: OLS market-model fit on the estimation window [-250, -11] vs market_proxy (default SPY), daily abnormal returns over [0, +60], an immediate reaction CAR over [0, +1], and post-reaction drift CARs over [+2,+5], [+2,+20], [+2,+60] (filtered to those ending at or before drift_window_end). Events are bucketed by surprise (BEAT/MISS/MEET/UNKNOWN) and a BEAT-minus-MISS drift spread is reported. A drift window that runs past the next announcement's day-0 is flagged (overlaps_next_event) and excluded from the bucket aggregate, but still reported per event. Single-ticker PEAD over a handful of events is DESCRIPTIVE, not a significance test of a market-wide anomaly: per-bucket statistics are flagged exploratory and a small_sample_warning is set below 10 valid events. When the surprise source is unavailable the endpoint degrades to unconditional drift (conditioning_status=unavailable) rather than failing. Daily only (interval=1d).
Path parameters
Query parameters
Number of most-recent earnings events to analyse (1-20, default 8). Bounds the OHLC history fetched and the per-request workload.
Number of most-recent earnings events to analyse (1-20, default 8). Bounds the OHLC history fetched and the per-request workload.
Market-proxy ticker used as the OLS regressor.
Market-proxy ticker used as the OLS regressor.
Largest drift-window end day (5..60). The drift windows [+2,+5],[+2,+20],[+2,+60] are filtered to those whose end <= this.
Largest drift-window end day (5..60). The drift windows [+2,+5],[+2,+20],[+2,+60] are filtered to those whose end <= this.
Return per-event daily abnormal-return arrays over [0, +60]. Off by default to avoid response bloat.
Return per-event daily abnormal-return arrays over [0, +60]. Off by default to avoid response bloat.
Response
Successful Response
Example response
{
"data": {
"symbol": "AAPL",
"market_proxy": "SPY",
"interval": "1d",
"estimation_window": [
-250,
-11
],
"min_estimation_days": 200,
"reaction_window": [
0,
1
],
"drift_windows": [
[
2,
5
],
[
2,
20
],
[
2,
60
]
],
"event_window": [
0,
60
],
"conditioning_status": "available",
"coverage": {
"matched": 6,
"n_beat": 4,
"n_meet": 0,
"n_miss": 2,
"n_unknown": 0,
"sec_events": 8,
"unknown": 2,
"unknown_by_reason": {
"no_surprise_in_window": 2
},
"valid_events": 6
},
"events": [
{
"announcement_date": "2024-05-02",
"event_day0_date": "2024-05-03T00:00:00Z",
"period": "2024-05-02",
"year": 2024,
"quarter": 2,
"filing_window": "AFTER_HOURS",
"surprise_label": "BEAT",
"surprise_pct": 0.067,
"surprise_period": "2024-03-31",
"surprise_lag_days": 32,
"surprise_match_status": "matched",
"bucket": "BEAT",
"market_model": {
"alpha": 0.0003,
"beta": 1.12,
"r_squared": 0.61,
"n_obs": 240
},
"reaction_car": {
"0_1": 0.021
},
"drift_car": {
"2_20": 0.014,
"2_5": 0.008
},
"overlaps_next_event": {
"2_20": false,
"2_5": false,
"2_60": true
},
"daily_ar": [
0.012,
0.009
]
}
],
"pead_spread": [
{
"drift_window": "2_60",
"beat_mean_car": 0.024,
"miss_mean_car": -0.011,
"spread": 0.035,
"n_beat": 3,
"n_miss": 2,
"n_unknown": 1
}
],
"small_sample_warning": true,
"source": "sugra_finance"
},
"meta": {
"endpoint": "/api/v1/fred/us/cpi",
"data_time": "2026-04-16T14:30:00Z",
"response_time": "2026-04-16T14:30:12Z",
"provider": "Sugra API v1.0.1",
"source": "sugra_crypto",
"attribution": "Short interest and Reg SHO daily short volume data is owned by and sourced from FINRA (Financial Industry Regulatory Authority).",
"fallback_chain": [
"sugra_crypto",
"sugra_finance"
]
}
}