Skip to main content
Skip to main content

US Earnings Surprises — Actual Vs Estimate, 10y (2016–2025)

by dAgentBaseData quality A · 91/100
DatasetCSV.GZOpenFinanceEarningsEPSRevenueSurprisePeadFundamentalsFree

Ten years of US earnings surprises — actual EPS and revenue versus consensus estimate at the time — for every USD-reporting US-listed issuer FMP indexes. 313,626 reported earnings events as a single gzipped CSV. Computed surprise columns (eps_surprise, eps_surprise_pct, revenue_surprise, revenue_surprise_pct) are derived in the build for convenience. Read with pandas.read_csv(path, compression='gzip', parse_dates=['report_date', 'last_updated']) or duckdb.read_csv('earnings_2016_2025.csv.gz'). Foundational dataset for: post-earnings-announcement-drift (PEAD) studies, beat / miss base-rate research, earnings-quality scoring, surprise-magnitude factor construction, and tracking which sectors / size buckets systematically beat or disappoint.

Use Cases

  • Post-earnings announcement drift (PEAD) backtests
  • Beat / miss base-rate analysis by sector and market-cap bucket
  • Earnings-momentum factor construction
  • Sell-side estimate accuracy tracking over time
  • Quality control on consensus expectations vs realized fundamentals

Methodology

Universe: every USD-reporting US-listed issuer (no foreign exchange suffix) from FMP's financial-statement-symbol-list (~17,500). For each, fetched up to 80 reported earnings events from FMP's /earnings?symbol= endpoint. Filtered to events with non-null epsActual and report_date >= 2016-01-01. Surprise columns derived in the build: eps_surprise = eps_actual - eps_estimated, eps_surprise_pct = eps_surprise / |eps_estimated| * 100 (and same for revenue).

Update Schedule

Static snapshot. Reflects what FMP had indexed as of the build date.

Attribution

Source: SEC EDGAR earnings + sell-side consensus estimates via Financial Modeling Prep.

Schema

nametype
symbolstring
report_datedate
eps_actualnumber
eps_estimatednumber
eps_surprisenumber
eps_surprise_pctnumber
revenue_actualnumber
revenue_estimatednumber
revenue_surprisenumber
revenue_surprise_pctnumber
last_updateddate

Sample Data

symboleps_actualreport_dateeps_surpriselast_updatedeps_estimatedrevenue_actualeps_surprise_pctrevenue_surpriserevenue_estimatedrevenue_surprise_pct
RLJE-3.148122016-03-31-1.12072023-04-03-2.0274122806000-55.28-517975727985757-18.51
RLJE-0.037682016-06-30-0.00402023-04-03-0.0336515790000-11.9855703157342970.35
RLJE-0.853452016-09-30-0.35352023-04-03-0.4999118351000-70.72449439179015612.51

Get this via API

Choose your client and connect your agent
# Example for Cursor (.cursor/mcp.json).
# For Claude, ChatGPT and Codex, use the Connect your agent guide.
# Read-only keys can preview and query data you already have access to.
{
  "mcpServers": {
    "dagentbase": {
      "url": "https://dagentbase.com/api/mcp",
      "headers": { "Authorization": "Bearer dm_live_YOUR_KEY" }
    }
  }
}

# 2. Then ask your agent, in plain language:
#    "Preview listing cf5c1a5b-2dfb-436a-9768-ee8c54a2a6d6 and explain its coverage and license."
#    Tools: preview_listing -> describe_dataset -> query_dataset
#    Claim or purchase in the platform before querying with a read-only key.
Free

one time · open license

Details

Date Range2016-01-01 — 2026-09-05
Rows313,626
Size6 MB
Files1
FormatCSV.GZ

Available formats

CSV.GZ6 MB
Freeopen
US Earnings Surprises — Actual Vs Estimate, 10y (2016–2025) | dAgentBase