Stock Earnings Calendar - Estimates, Actuals & Surprises
Pricing
from $0.50 / 1,000 results
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
Actor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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/longFmtfor 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
- Go to the Stock Earnings Calendar actor page
- Optionally set a date range, tickers, market cap filter, or sector
- Click Start
- 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
| Parameter | Type | Default | Description |
|---|---|---|---|
dateFrom | string | 3 days ago | Start date (YYYY-MM-DD). Up to 365 days back. |
dateTo | string | 14 days ahead | End date (YYYY-MM-DD). Up to 365 days forward. |
tickers | string | all | Comma-separated tickers, e.g. AAPL, TSLA, MSFT |
marketCapMin | integer | 0 | Minimum market cap in millions USD. 500 = $500M+. |
sector | string | all | Sector 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}
| Field | Type | Description |
|---|---|---|
ticker | string | Stock ticker symbol |
companyName | string | Full company name |
sector | string/null | Sector (Technology, Finance, Health Care, Industrials, etc.) |
industry | string/null | Industry within sector |
marketCap | number/null | Market capitalization in USD |
reportDate | string | Earnings report date (YYYY-MM-DD) |
reportTime | string | BMO (before market open), AMC (after market close), TBD |
fiscalQuarterEnding | string/null | Month/year the fiscal quarter ends (e.g., "Mar/2026") |
reported | boolean | Whether actuals have been released |
epsEstimate | number/null | Consensus EPS estimate |
epsActual | number/null | Actual reported EPS |
epsSurprise | number/null | EPS surprise percentage (positive = beat) |
numberOfAnalysts | integer/null | Analysts contributing to consensus |
previousEpsActual | number/null | Year-ago quarter actual EPS (upcoming earnings only) |
epsGrowthYoY | number/null | Year-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 Case | Example Query | Who Uses It |
|---|---|---|
| Morning earnings scan | "What reports this week?" (default settings) | Traders, portfolio managers |
| Post-earnings surprise scan | Last 3 days, market cap > $500M, sort by epsSurprise | Momentum traders, newsletter writers |
| Pre-trade earnings gate | Next 14 days, filter by watchlist tickers | Swing traders, risk managers |
| Sector sweep | Next 30 days, sector = Energy | Sector analysts, event-driven traders |
| Portfolio risk check | Next 7 days, filter by held tickers | Portfolio managers, robo-advisors |
| Earnings trend analysis | 90 days back, specific ticker, check YoY growth | Fundamental analysts |
| Automated alerting | Schedule daily, filter surprise > 10% | Trading systems, data pipelines |
| AI agent research | Date range + sector filter via MCP | Claude, ChatGPT, custom agents |
How to get earnings data with Python
from apify_client import ApifyClientclient = 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.
| Scenario | Records | Time | Est. 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.