# Stock Earnings Calendar Tracker (Nasdaq, EPS consensus) (`gochujang/stock-earnings-tracker`) Actor

Upcoming earnings calendar from Nasdaq for next N days: ticker, company, BMO/AMC timing, consensus EPS estimate, number of analyst estimates, prior-year EPS, fiscal quarter end, market cap. Telegram alerts on upcoming. No API key required.

- **URL**: https://apify.com/gochujang/stock-earnings-tracker.md
- **Developed by:** [Hojun Lee](https://apify.com/gochujang) (community)
- **Categories:** Business, News, Marketing
- **Stats:** 20 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 earnings trackeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Stock Earnings Calendar Tracker do?

**Stock Earnings Calendar Tracker** pulls **earnings dates, EPS estimates, and quarterly results** directly from Nasdaq's public earnings feed. For each reporting company it returns the consensus **earnings per share** (EPS) forecast, prior-year EPS, analyst count, market cap, and BMO/AMC timing — plus optional Yahoo Finance enrichment for sector, current price, and PE ratios. No API key is needed and results are ready in under 30 seconds.

This **stock earnings calendar** scraper covers all US-listed tickers on Nasdaq. Filter by date range (1 day to 90+ days ahead), individual ticker symbols, minimum market cap, or timing (Before Market Open / After Market Close). An optional Telegram digest sends the day's lineup straight to your bot.

### Why use Stock Earnings Calendar Tracker?

**Earnings season** drives 30%+ of single-stock price moves. Every trader, quant, and analyst needs a reliable **EPS tracker** — but the free calendars on Yahoo Finance and Investing.com break regularly, and paid feeds (Zacks, Estimize) charge $100–$500 per month.

Key business use cases:

- **Options strategies** — Filter high-IV names reporting this week to screen for IV crush setups and **earnings per share** beat/miss plays
- **EPS surprise screening** — Compare consensus EPS estimates to prior-year **quarterly results** to spot likely beaters before they move
- **Earnings momentum** — Build a watchlist of large caps reporting, sorted by market cap or EPS estimate, and act before the crowd
- **Sector rotation** — See when an entire sector (banks, retail, energy) is about to report and position accordingly
- **Macro proxy** — Weight aggregate consensus EPS growth by market cap as a top-down GDP growth signal
- **Automated digest** — Schedule a daily or weekly **stock earnings calendar** push to Telegram, Slack, or a webhook

### How to use Stock Earnings Calendar Tracker

1. **Open the actor** on Apify Store and click **Try for free**
2. Set `daysAhead` (default: 7) to control how far ahead the **earnings calendar** looks
3. Optionally add `symbols` (e.g. `["NVDA","AAPL"]`) to track specific tickers
4. Set `minMarketCapUsd` to filter out micro-caps (e.g. `10000000000` for mega-caps only)
5. Enable `alertOnUpcoming` and supply a Telegram bot token + chat ID for automatic alerts
6. Click **Start** — results appear in the dataset within seconds

Default run returns the next 7 days of **earnings reports** sorted by date, covering ~150 reporters at ~$0.125 total cost.

### Input

| Parameter | Type | Default | Description |
|---|---|---|---|
| `daysAhead` | integer | `7` | Days from today to include in the **earnings calendar** (1 = today only) |
| `symbols` | array | `[]` | Ticker filter (case-insensitive). Empty = all reporters |
| `minMarketCapUsd` | integer | `0` | Skip companies below this market cap. 0 = no filter |
| `sortBy` | string | `date_asc` | Row order: `date_asc`, `mcap_desc`, `eps_estimate_desc` |
| `limit` | integer | `500` | Max **earnings rows** to return |
| `alertOnUpcoming` | boolean | `false` | Send upcoming **earnings calendar** to Telegram after run |
| `telegramBotToken` | string | — | Telegram bot token for alerts |
| `telegramChatId` | string | — | Telegram chat ID (get it from @userinfobot) |

### Output

Each row in the dataset represents one company's upcoming or past **earnings report**:

```json
{
  "report_date": "2026-06-10",
  "symbol": "ORCL",
  "name": "Oracle Corporation",
  "timing": "AMC",
  "eps_forecast": 1.58,
  "eps_actual": 1.72,
  "eps_surprise_pct": 8.86,
  "revenue_surprise_pct": 2.1,
  "num_estimates": 11,
  "last_year_eps": 1.35,
  "last_year_report_date": "6/11/2025",
  "fiscal_quarter_ending": "May/2026",
  "market_cap_usd": 609204063720,
  "sector": "Technology",
  "current_price_usd": 174.52,
  "pe_ratio": 38.2
}
```

### Data fields

| Field | Example | Notes |
|---|---|---|
| `report_date` | `2026-06-10` | ISO date of **earnings report** |
| `symbol` | `ORCL` | Ticker symbol |
| `name` | `Oracle Corporation` | Company name |
| `timing` | `AMC` | BMO (Before Market Open) / AMC (After Market Close) / TNS (Time Not Supplied) |
| `eps_forecast` | `1.58` | Consensus **earnings per share** estimate |
| `eps_actual` | `1.72` | Actual EPS (past reports only) |
| `eps_surprise_pct` | `8.86` | **EPS tracker** surprise vs consensus (%) |
| `revenue_surprise_pct` | `2.1` | Revenue beat/miss vs consensus (%) |
| `num_estimates` | `11` | Analyst count behind consensus |
| `last_year_eps` | `1.35` | Prior-year same-quarter EPS |
| `fiscal_quarter_ending` | `May/2026` | Fiscal quarter of the **quarterly results** |
| `market_cap_usd` | `609,204,063,720` | Market capitalization in USD |
| `sector` | `Technology` | Yahoo Finance sector (optional enrichment) |
| `current_price_usd` | `174.52` | Current stock price (optional enrichment) |
| `pe_ratio` | `38.2` | Trailing PE ratio (optional enrichment) |

### Cost estimation

**Pay-Per-Event pricing**: `$0.001 per earnings row returned`. The **first 25 rows per run are free**.

| Scenario | Rows returned | Charged rows | Estimated cost |
|---|---|---|---|
| Default (next 7 days, all tickers) | ~150 | ~125 | **$0.13** |
| Today's mega-caps only (>$10B) | 5–10 | 0 | **free** |
| 30-day forward **earnings calendar** | ~700 | ~675 | **$0.68** |
| Full quarter (90 days) | ~2,000 | ~1,975 | **$1.98** |

Compare: Zacks Earnings Calendar API starts at **$99/month**. This actor charges only for what you use.

### FAQ

**Can I track specific tickers for their next earnings date?**
Yes — add the ticker symbols to the `symbols` array (e.g. `["NVDA","MSFT","TSLA"]`) and set `daysAhead` to 90 to catch all upcoming **quarterly results** for those names.

**Does it include EPS surprise data for past earnings?**
Yes. For dates already passed, `eps_actual` and `eps_surprise_pct` are populated — allowing you to run a historical **EPS tracker** screen and backtest **earnings per share** surprise strategies.

**What is the data source?**
The **stock earnings calendar** is sourced from [Nasdaq's public earnings JSON endpoint](https://www.nasdaq.com/market-activity/earnings), supplemented by optional Yahoo Finance enrichment for fundamental data. This is the same data that powers Nasdaq.com's earnings calendar page — free, reliable, and updated daily.

> **Disclaimer**: This actor provides publicly available financial data for informational purposes only. It is not financial advice. Always verify data independently before making investment decisions. Past **earnings per share** surprises do not guarantee future results.

***

### Related actors

- [Economic Calendar Tracker](https://apify.com/gochujang/economic-calendar-tracker) — FOMC, CPI, NFP macro events
- [Insider Trading Tracker](https://apify.com/gochujang/insider-trading-tracker) — CEO/CFO Form 4 filings around **earnings**
- [SEC EDGAR Filing Tracker](https://apify.com/gochujang/sec-edgar-tracker) — Catch 8-Ks when **quarterly results** drop
- [Treasury Yield Curve Tracker](https://apify.com/gochujang/treasury-yield-tracker) — Macro context for earnings season

***

A short review helps analysts find this **stock earnings calendar** tool: [Leave a review on Apify Store](https://apify.com/gochujang/stock-earnings-tracker#reviews)

# Actor input Schema

## `mode` (type: `string`):

'upcoming' = next 14 days of earnings. 'recent' = last 30 days (with EPS actuals). 'search' = search by ticker symbols across a 90-day window.

## `earningsWeek` (type: `string`):

Quick date-range shortcut. 'This week' = Mon-Fri of current week. 'Next week' = Mon-Fri of next week. 'Custom' = use daysBack/daysAhead.

## `daysAhead` (type: `integer`):

How many days from today to include (used when earningsWeek=custom).

## `daysBack` (type: `integer`):

How many past days to include for EPS surprise data (used when earningsWeek=custom).

## `enrichWithMarketData` (type: `boolean`):

Fetch sector, industry, current price, trailing PE, and forward PE from Yahoo Finance. Slower but richer data.

## `includeEpsSurprise` (type: `boolean`):

Compute eps\_surprise\_pct (actual vs. estimate %) and revenue\_surprise\_pct for past-date rows. Default true. Disable to reduce payload size.

## `includeSectorBreakdown` (type: `boolean`):

Attach a sector\_summary array to each row: \[{sector, count, avg\_eps\_surprise\_pct}]. Useful for sector-level aggregation. Requires enrichWithMarketData=true for sector data.

## `includeGuide` (type: `boolean`):

Fetch company next-quarter EPS & revenue guidance from Yahoo Finance earningsTrend. Adds guidance\_next\_quarter object to each row. Auto-enables enrichWithMarketData.

## `sectors` (type: `array`):

Only include tickers in these sectors (e.g. \["Technology", "Healthcare"]). Requires enrichWithMarketData=true to take effect.

## `symbols` (type: `array`):

Only include these tickers (case-insensitive). Empty = all reporters.

## `minMarketCapUsd` (type: `integer`):

Skip companies whose market cap is below this. 0 = no filter.

## `sortBy` (type: `string`):

Row order.

## `limit` (type: `integer`):

Max earnings rows to return.

## `alertOnUpcoming` (type: `boolean`):

Send list of upcoming earnings to Telegram after run.

## `telegramBotToken` (type: `string`):

Telegram bot token.

## `telegramChatId` (type: `string`):

Telegram chat ID to send alerts to (get it from @userinfobot)

## Actor input object example

```json
{
  "mode": "upcoming",
  "earningsWeek": "custom",
  "daysAhead": 7,
  "daysBack": 0,
  "enrichWithMarketData": false,
  "includeEpsSurprise": true,
  "includeSectorBreakdown": false,
  "includeGuide": false,
  "sectors": [],
  "symbols": [],
  "minMarketCapUsd": 0,
  "sortBy": "date_asc",
  "limit": 500,
  "alertOnUpcoming": false,
  "telegramChatId": ""
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("gochujang/stock-earnings-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("gochujang/stock-earnings-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call gochujang/stock-earnings-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gochujang/stock-earnings-tracker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/amiQtbW0R294PG8ot/builds/eIV9uWZJXvA4V03hK/openapi.json
