Stock Earnings Calendar - Estimates, Actuals & Surprises avatar

Stock Earnings Calendar - Estimates, Actuals & Surprises

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Stock Earnings Calendar - Estimates, Actuals & Surprises

Stock Earnings Calendar - Estimates, Actuals & Surprises

Get upcoming and recent US stock earnings by date range. Returns EPS estimates, actuals, surprise percentages, YoY growth, sector, and market cap. Filter by tickers, market cap, or sector. Export as JSON, CSV, or Excel. Flat schema for trading systems, dashboards, and AI agents via MCP.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

Michal Búci

Michal Búci

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Get upcoming and recent US stock earnings reports by date range. Returns EPS estimates, actuals, surprise percentages, YoY growth, sector, and market cap. Filter by tickers, market cap, or sector in a single query.

What is the Stock Earnings Calendar?

This actor pulls earnings calendar data from public financial sources for all US-listed stocks. It returns a flat, structured dataset covering both upcoming earnings (with consensus EPS estimates) and past earnings (with actuals and surprise percentages), all in the same schema.

Unlike per-ticker lookup tools, this actor lets you query by date range with filters. Get "all Technology stocks reporting this week with market cap above $2B" in one call instead of stitching together multiple APIs. Export results as JSON, CSV, or Excel, integrate via the Apify API, or connect to AI agents via MCP.

Why use this earnings calendar?

Most earnings data tools have one of these problems:

  • Per-ticker only - You need to already know which tickers to check. No way to scan the full market.
  • No filters - You get hundreds of micro-caps and SPACs you'll never trade. No market cap or sector filtering.
  • Forward OR backward, not both - Calendar tools show upcoming dates. History tools show past results. They don't share a schema.
  • Messy nested schemas - Deeply nested JSON with raw/fmt/longFmt for every field. Impossible for AI agents to parse reliably.
  • Previous quarter missing - You get the current estimate but not last year's actual. Trend detection requires a second API call.

This actor solves all five. One call, flat schema, bi-directional dates, with filters and historical context built in.

How to get stock earnings data by date range

  1. Go to the Stock Earnings Calendar actor page
  2. Optionally set a date range, tickers, market cap filter, or sector
  3. Click Start
  4. Download results as JSON, CSV, or Excel, or access via the Apify API

Default date range is 3 days back to 14 days forward, covering the most common use case: checking recent surprises and upcoming reports.

Input

ParameterTypeDefaultDescription
dateFromstring3 days agoStart date (YYYY-MM-DD). Up to 365 days back.
dateTostring14 days aheadEnd date (YYYY-MM-DD). Up to 365 days forward.
tickersstringallComma-separated tickers, e.g. AAPL, TSLA, MSFT
marketCapMininteger0Minimum market cap in millions USD. 500 = $500M+.
sectorstringallSector filter. Pick from dropdown: Technology, Finance, Health Care, Energy, etc.
{
"dateFrom": "2026-04-07",
"dateTo": "2026-04-18",
"marketCapMin": 1000,
"sector": "Technology"
}

Output

{
"ticker": "AAPL",
"companyName": "Apple Inc.",
"sector": "Technology",
"industry": "Computer Manufacturing",
"marketCap": 3200000000000,
"reportDate": "2026-05-01",
"reportTime": "AMC",
"fiscalQuarterEnding": "Jun/2026",
"reported": false,
"epsEstimate": 1.62,
"epsActual": null,
"epsSurprise": null,
"numberOfAnalysts": 38,
"previousEpsActual": 1.55,
"epsGrowthYoY": 4.5
}
FieldTypeDescription
tickerstringStock ticker symbol
companyNamestringFull company name
sectorstring/nullSector (Technology, Finance, Health Care, Industrials, etc.)
industrystring/nullIndustry within sector
marketCapnumber/nullMarket capitalization in USD
reportDatestringEarnings report date (YYYY-MM-DD)
reportTimestringBMO (before market open), AMC (after market close), TBD
fiscalQuarterEndingstring/nullMonth/year the fiscal quarter ends (e.g., "Mar/2026")
reportedbooleanWhether actuals have been released
epsEstimatenumber/nullConsensus EPS estimate
epsActualnumber/nullActual reported EPS
epsSurprisenumber/nullEPS surprise percentage (positive = beat)
numberOfAnalystsinteger/nullAnalysts contributing to consensus
previousEpsActualnumber/nullYear-ago quarter actual EPS (upcoming earnings only)
epsGrowthYoYnumber/nullYear-over-year EPS growth % (upcoming earnings only)

All data is fetched live on every run. There is no caching. Estimates, actuals, and report dates always reflect the latest available data at the time of execution.

Use cases for earnings calendar data

Use CaseExample QueryWho Uses It
Morning earnings scan"What reports this week?" (default settings)Traders, portfolio managers
Post-earnings surprise scanLast 3 days, market cap > $500M, sort by epsSurpriseMomentum traders, newsletter writers
Pre-trade earnings gateNext 14 days, filter by watchlist tickersSwing traders, risk managers
Sector sweepNext 30 days, sector = EnergySector analysts, event-driven traders
Portfolio risk checkNext 7 days, filter by held tickersPortfolio managers, robo-advisors
Earnings trend analysis90 days back, specific ticker, check YoY growthFundamental analysts
Automated alertingSchedule daily, filter surprise > 10%Trading systems, data pipelines
AI agent researchDate range + sector filter via MCPClaude, ChatGPT, custom agents

How to get earnings data with Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("michael_b/stock-earnings-calendar").call(run_input={
"dateFrom": "2026-04-07",
"dateTo": "2026-04-18",
"marketCapMin": 1000,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
status = "BEAT" if (item.get("epsSurprise") or 0) > 0 else "MISS" if item.get("reported") else "UPCOMING"
print(f"[{item['ticker']}] {item['reportDate']} {item['reportTime']} - {status} - EPS est: {item['epsEstimate']}")

How to get earnings data with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('michael_b/stock-earnings-calendar').call({
dateFrom: '2026-04-07',
dateTo: '2026-04-18',
marketCapMin: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
const status = item.epsSurprise > 0 ? 'BEAT' : item.reported ? 'MISS' : 'UPCOMING';
console.log(`[${item.ticker}] ${item.reportDate} ${item.reportTime} - ${status}`);
});

How to use with AI agents (MCP)

Connect this actor to any MCP-compatible AI agent:

$npx @apify/actors-mcp-server --actors michael_b/stock-earnings-calendar

Your AI agent can then query earnings data conversationally:

  • "What stocks report earnings this week with market cap over $1B?"
  • "Did any tech stocks beat earnings estimates by more than 10% yesterday?"
  • "When does NVDA report next quarter?"

Works with Claude Desktop, ChatGPT with MCP plugins, and custom AI agents.

How much does it cost?

This actor uses pay-per-result pricing at $0.50 per 1,000 results. No browser overhead, recommended memory: 256 MB.

ScenarioRecordsTimeEst. Cost
Default (3 days back + 14 days forward)~500~20s~$0.25
This week only (5 days)~30-100~5s~$0.02-0.05
Next 30 days~2,000-3,000~60-80s~$1.00-1.50
Specific tickers, 7 days~5-20~5s~$0.01
Next 90 days, $1B+ market cap~2,000-2,500~60s~$1.00-1.25

Automate with Apify platform

  • Schedule daily runs at 6 AM ET before market open for automated morning scans
  • Access results via API and integrate into trading systems or dashboards
  • Connect to Make, n8n, or Zapier for no-code workflows and alerts
  • Use with AI agents through Apify's MCP server (Claude, ChatGPT, custom agents)
  • Export as JSON, CSV, Excel, or stream directly to your database
  • Set up webhooks to trigger downstream actions when new data is available

FAQ

How far back and forward can I query? Up to 365 days in either direction. The default range (3 days back, 14 days forward) covers the most common workflows: checking recent surprises and planning for upcoming reports.

What does previousEpsActual represent? The year-ago quarter's actual EPS, available for upcoming earnings only (reported: false). For example, if a company is reporting Q2 2026, this shows Q2 2025's actual EPS. The epsGrowthYoY field uses this to compute year-over-year growth. Both fields are null for already-reported earnings.

What does reported: false mean? The company hasn't released earnings yet. epsEstimate shows what analysts expect, but epsActual, epsSurprise, and related fields will be null. Once the company reports, these fields populate automatically on the next run.

How fresh is the data? Live data fetched on every run, no caching. Estimates, actuals, and report dates always reflect the latest available data at the time of execution. For maximum freshness during earnings season, schedule hourly runs.

Are small and mid-cap stocks covered? Yes. Coverage includes all US exchanges (NYSE, NASDAQ, AMEX) regardless of market cap. Use the marketCapMin filter to exclude smaller companies if needed.

Can I filter for earnings surprises? Yes. Query a backward date range (e.g., last 7 days) and filter the results by epsSurprise value. Records with reported: true will have the surprise percentage populated. Use this for post-earnings momentum scans.

What do the reportTime values mean? BMO = Before Market Open (typically 6-8 AM ET). AMC = After Market Close (typically 4-5 PM ET). TBD = timing not yet confirmed by the company.

Can I use this for non-US stocks? Currently US exchanges only (NYSE, NASDAQ, AMEX). International coverage is planned for a future version.

Support

Questions, feature requests, or bugs? Open an issue in the Issues tab. Feedback is welcome.