# Stock Corporate Events Calendar Scraper (`scrapers_lat/stock-corporate-events-calendar-scraper`) Actor

Scrape upcoming earnings, dividends, IPOs and stock splits in one unified calendar. Filter by date range, symbol and event type. Optional live price snapshot and AI event preview. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/stock-corporate-events-calendar-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $11.34 / 1,000 corporate events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

[![Stock Corporate Events Calendar Scraper](https://scrapers.lat/banners/stock-corporate-events-calendar-scraper.png)](https://console.apify.com/actors/df4wc8egP1Fr2uGBI/input)

## Stock Corporate Events Calendar Scraper

Here is one real result, with every field the actor returns (an upcoming earnings event with the optional price snapshot and AI preview switched on):

```json
{
  "eventType": "earnings",
  "symbol": "PDD",
  "companyName": "PDD Holdings Inc.",
  "eventDate": "2026-08-24",
  "reportTime": "Pre-Market",
  "epsForecast": 2.69,
  "numberOfEstimates": 1,
  "lastYearEps": 2.9,
  "lastYearReportDate": "2025-08-25",
  "fiscalQuarterEnding": "Jun/2026",
  "marketCap": 128390360872,
  "epsSurprisePct": null,
  "exDividendDate": null,
  "paymentDate": null,
  "recordDate": null,
  "dividendRate": null,
  "annualDividend": null,
  "dividendYieldPct": null,
  "announcementDate": null,
  "exchange": null,
  "priceRange": null,
  "price": null,
  "sharesOffered": null,
  "offerAmount": null,
  "expectedDate": null,
  "dealStatus": null,
  "ratio": null,
  "effectiveDate": null,
  "snapshotPrice": 90.1,
  "snapshotNetChange": 0.58,
  "snapshotPercentChange": 0.65,
  "snapshotVolume": 49574.915408,
  "snapshotWeek52High": 139.41,
  "snapshotWeek52Low": 71.94,
  "snapshotMarketStatus": "Pre-Market",
  "aiContext": "PDD Holdings Inc. is set to report its earnings on August 24, 2026.",
  "aiYoyEpsGrowthPct": -7.24,
  "aiSetupNote": "Investors should monitor the earnings report closely for any guidance on future performance.",
  "aiRiskFlags": [
    "Declining EPS compared to last year",
    "Market volatility",
    "High market cap may lead to slower growth",
    "Pre-market report timing"
  ],
  "aiSummary": "The upcoming earnings report may reveal challenges as EPS is forecasted to decline year-over-year.",
  "source": "nasdaq.com",
  "observedAt": "2026-08-21T12:29:00.768Z",
  "error": null
}
```

The most complete forward-looking corporate events calendar scraper available. It covers all four event types (upcoming earnings, dividends, IPOs and stock splits) in one unified schema, supports a multi-day date range and a symbol filter, and adds an optional live price snapshot and AI event preview, so you get a single calendar instead of four separate tools.

**📥 [Input](https://apify.com/scrapers_lat/stock-corporate-events-calendar-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/stock-corporate-events-calendar-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/stock-corporate-events-calendar-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/stock-corporate-events-calendar-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-US%20listed%20stocks-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [Use cases](#use-cases)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor pulls the upcoming corporate events calendar for US listed companies and returns one normalized record per event. Pick any combination of four event types:

- **Earnings** (per day): the reporting company, report time (pre-market, after-hours or TBD), consensus EPS forecast, number of estimates, last year's EPS and report date, fiscal quarter ending and market cap.
- **Dividends** (per day): ex-dividend date, payment date, record date, cash dividend per share, indicated annual dividend and announcement date.
- **IPOs** (per month): priced, upcoming and filed deals with proposed ticker, exchange, price or price range, shares offered, offer amount, expected or priced date and deal status.
- **Stock splits** (per day): the split ratio, effective date and announcement date.

You choose a date range (the actor loops each day for earnings, dividends and splits, and each month for IPOs), an optional list of ticker symbols to keep, and whether to add a live price snapshot or an AI preview per event. Dates are normalized to `YYYY-MM-DD`, money and counts are parsed to plain numbers, and missing values are returned as `null`. Every event type shares one flat schema so you can export a mixed calendar straight to CSV or Excel.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 upcoming earnings events over a three-day window.

```json
{
  "eventTypes": ["earnings"],
  "dateFrom": "2026-08-24",
  "dateTo": "2026-08-26",
  "maxResults": 10
}
```

Leave `dateFrom` and `dateTo` empty to use the day the run starts. Add more event types to build a combined calendar:

```json
{
  "eventTypes": ["earnings", "dividends", "ipos", "splits"],
  "dateFrom": "2026-08-24",
  "dateTo": "2026-08-28",
  "symbols": ["AAPL", "MSFT", "NVDA"],
  "maxResults": 50
}
```

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `eventTypes` | array | no | `["earnings"]` | Which event types to collect. Any subset of `earnings`, `dividends`, `ipos`, `splits`. |
| `dateFrom` | string | no | run day | Start date `YYYY-MM-DD`. Defaults to the day the run starts. |
| `dateTo` | string | no | `dateFrom` | End date `YYYY-MM-DD`, inclusive. The daily calendars are capped at 31 days per run; for IPOs the actor covers each month spanned. |
| `symbols` | array | no | (all) | Optional ticker symbols to keep, for example `AAPL`, `MSFT`. Case-insensitive, applied client-side. Empty returns every event. |
| `includePriceSnapshot` | boolean | no | `false` | Paid add-on. Attach a live quote (last price, net change, percent change, volume, 52-week range) per event and compute dividend yield for dividend rows. Charged only when a real quote is returned. Disabled on free plans. |
| `aiEventPreview` | boolean | no | `false` | Paid add-on. Add an AI context line, year-over-year EPS growth, setup note, risk flags and one-line summary per event. Charged only when a usable preview is returned. Disabled on free plans. |
| `maxResults` | integer | no | `10` | Maximum events to collect across the whole run. Free Apify plans are capped at 10. |

### Output reference

One dataset item per corporate event. Every record uses the same flat schema; fields that do not apply to an event type are `null`.

| Field | Type | Description |
|---|---|---|
| `eventType` | string | `earnings`, `dividend`, `ipo` or `split`. |
| `symbol` | string | Ticker symbol (proposed ticker for IPOs). |
| `companyName` | string | Company name. |
| `eventDate` | string | Key date of the event: report date (earnings), ex-dividend date (dividend), priced or expected date (ipo), effective date (split). |
| `reportTime` | string | Earnings report time: `Pre-Market`, `After-Hours` or `TBD`. |
| `epsForecast` | number | Consensus EPS forecast for the reporting quarter. |
| `numberOfEstimates` | number | Number of analyst estimates behind the forecast. |
| `lastYearEps` | number | Reported EPS for the same quarter last year. |
| `lastYearReportDate` | string | Report date for the same quarter last year. |
| `fiscalQuarterEnding` | string | Fiscal quarter being reported, for example `Jul/2026`. |
| `marketCap` | number | Market capitalization in USD (earnings). |
| `epsSurprisePct` | number | EPS surprise percent when available. |
| `exDividendDate` | string | Ex-dividend date (dividend). |
| `paymentDate` | string | Dividend payment date. |
| `recordDate` | string | Dividend record date. |
| `dividendRate` | number | Cash dividend per share for this event. |
| `annualDividend` | number | Indicated annual dividend per share. |
| `dividendYieldPct` | number | Annual dividend yield percent, computed when a price snapshot is available. |
| `announcementDate` | string | Announcement date (dividend and split). |
| `exchange` | string | Proposed listing exchange (ipo). |
| `priceRange` | string | Proposed share price or range as reported (ipo). |
| `price` | number | Proposed or priced share price in USD (ipo). |
| `sharesOffered` | number | Number of shares offered (ipo). |
| `offerAmount` | number | Dollar value of shares offered in USD (ipo). |
| `expectedDate` | string | Expected or actual pricing date (ipo). |
| `dealStatus` | string | IPO stage: `priced`, `upcoming` or `filed`. |
| `ratio` | string | Split ratio, for example `4 : 1` (split). |
| `effectiveDate` | string | Split effective or ex date (split). |
| `snapshotPrice` | number | Last traded price (price snapshot add-on). |
| `snapshotNetChange` | number | Net price change on the day (price snapshot add-on). |
| `snapshotPercentChange` | number | Percent price change on the day (price snapshot add-on). |
| `snapshotVolume` | number | Trading volume (price snapshot add-on). |
| `snapshotWeek52High` | number | 52-week high price (price snapshot add-on). |
| `snapshotWeek52Low` | number | 52-week low price (price snapshot add-on). |
| `snapshotMarketStatus` | string | Market status at snapshot time (price snapshot add-on). |
| `aiContext` | string | AI plain-English description of the event (AI add-on). |
| `aiYoyEpsGrowthPct` | number | AI year-over-year EPS growth percent for earnings (AI add-on). |
| `aiSetupNote` | string | AI note on what to watch (AI add-on). |
| `aiRiskFlags` | string\[] | AI risk flags for the event (AI add-on). |
| `aiSummary` | string | AI one-line summary (AI add-on). |
| `source` | string | Data source. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | `null` on success. On a failed run a single item with a populated `error` field is written instead. |

### Example output record

A real dividend record from a live run (input `{"eventTypes":["dividends"],"dateFrom":"2026-08-24","dateTo":"2026-08-28"}`):

```json
{
  "eventType": "dividend",
  "symbol": "ADEA",
  "companyName": "Adeia Inc. Common Stock",
  "eventDate": "2026-08-24",
  "exDividendDate": "2026-08-24",
  "paymentDate": "2026-09-14",
  "recordDate": "2026-08-24",
  "dividendRate": 0.05,
  "annualDividend": 0.2,
  "announcementDate": "2026-07-23",
  "source": "nasdaq.com",
  "observedAt": "2026-08-21T12:28:09.348Z"
}
```

A real priced IPO record (input `{"eventTypes":["ipos"],"dateFrom":"2026-08-01","dateTo":"2026-08-31"}`):

```json
{
  "eventType": "ipo",
  "symbol": "LYNX",
  "companyName": "Lyntris Inc.",
  "eventDate": "2026-08-19",
  "exchange": "NYSE",
  "priceRange": "17.50",
  "price": 17.5,
  "sharesOffered": 17000000,
  "offerAmount": 297500000,
  "expectedDate": "2026-08-19",
  "dealStatus": "priced",
  "source": "nasdaq.com",
  "observedAt": "2026-08-21T12:29:41.434Z"
}
```

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~stock-corporate-events-calendar-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"eventTypes":["earnings"],"dateFrom":"2026-08-24","dateTo":"2026-08-26","maxResults":25}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~stock-corporate-events-calendar-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"eventTypes":["dividends","splits"],"dateFrom":"2026-08-24","dateTo":"2026-08-31"}'
```

Apify CLI:

```bash
apify call scrapers_lat/stock-corporate-events-calendar-scraper \
  --input '{"eventTypes":["ipos"],"dateFrom":"2026-08-01","dateTo":"2026-08-31"}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets. `clean=true` drops empty and internal fields.

### Billing and limits

This actor is billed pay per result on Apify, with a tiered discount that grows with your Apify plan.

- **`result`** (primary): charged once per corporate event returned (one earnings, dividend, IPO or split record).
- **`price_snapshot`** (add-on, off by default, paying plans only): charged once per event when a live quote is fetched for the symbol and attached. Symbols with no live quote (for example an IPO that is not trading yet) are skipped and never charged.
- **`ai_event_preview`** (add-on, off by default, paying plans only): charged once per event only when the AI returns a usable preview. A missing key or an empty model response is never charged.
- **`apify-actor-start`**: a small one-time run initialization charge.

More on limits:

- **No charge on failure.** If a run errors, the actor writes a single item with a populated `error` field and does not charge for it. Empty calendar days cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further results.
- **Free Apify plans** are capped at 10 results per run, and the paid add-ons are disabled on free plans.

### Use cases

- **Earnings-season trading.** Build a watchlist of upcoming reports with consensus EPS forecasts, report timing and year-over-year context to plan entries and exits around earnings.
- **Earnings calendar monitoring.** Track which of your holdings or a whole sector report on a given day, pre-market or after-hours, and export the schedule to a spreadsheet.
- **Dividend capture and income investing.** Pull ex-dividend, record and payment dates with the cash dividend and annual dividend, and compute dividend yield from a live price snapshot.
- **IPO tracking.** Follow priced, upcoming and filed deals with proposed price, shares offered and offer amount to spot new listings early.
- **Stock-split alerts.** Watch effective dates and split ratios so downstream models and dashboards adjust for splits on time.
- **Fintech app data.** Feed a unified events feed into a brokerage app, newsletter or alerting product without stitching four different calendars together.
- **Quant event studies.** Assemble clean, dated corporate-event panels for backtesting earnings drift, dividend capture and split effects.

### FAQ and troubleshooting

**A run returned 0 records. Why?**
The calendar for that date range and event type was empty, or your `symbols` filter matched nothing. Widen the date range, add more event types, or remove the symbol filter. Zero-result runs are not charged.

**How far ahead can I look?**
As far as the source publishes the calendar. Earnings, dividends and splits are queried day by day (capped at 31 days per run); IPOs are queried by month. For a longer horizon, run several date ranges.

**Which date is `eventDate`?**
The most relevant date for that event: report date for earnings, ex-dividend date for dividends, priced or expected date for IPOs, and effective date for splits. Type-specific dates are also returned in their own fields.

**Why is `dividendYieldPct` null?**
Yield is computed only when the live price snapshot add-on is enabled and a real quote is available. Without a price the actor does not guess a yield.

**Can I get all four event types in one run?**
Yes. Pass `eventTypes: ["earnings","dividends","ipos","splits"]`. Every event shares one flat schema, so the mixed output exports cleanly to CSV or Excel.

**Is this an official exchange tool?**
No. This actor is independent and has no affiliation with Nasdaq or any exchange. It reads only publicly available calendar data. Use it in accordance with the source terms of service.

### Related scrapers

- [Finviz Stocks Scraper](https://apify.com/scrapers_lat/finviz-stocks-scraper): stock fundamentals, screener, insider trades and news.
- [Yahoo Finance Stock & Crypto Prices Scraper](https://apify.com/scrapers_lat/yahoo-finance-scraper): live quotes for stocks and crypto.
- [SEC EDGAR 10-K, 10-Q & 8-K Filings Scraper](https://apify.com/scrapers_lat/sec-edgar-filings-scraper): SEC filings by ticker or CIK.
- [SEC EDGAR Financials Revenue & Assets Scraper](https://apify.com/scrapers_lat/sec-edgar-financials-scraper): structured company financials.
- [Coingecko Crypto Prices & Market Cap Scraper](https://apify.com/scrapers_lat/coingecko-crypto-scraper): crypto prices and market data.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with Nasdaq or any stock exchange. Accesses only publicly available corporate calendar data. Use in accordance with the source terms of service.

# Actor input Schema

## `eventTypes` (type: `array`):

Which corporate events to collect. Any subset of earnings, dividends, ipos, splits. One unified record per event across all selected types.

## `dateFrom` (type: `string`):

Start date (YYYY-MM-DD). Defaults to the day the run starts. For earnings, dividends and splits the actor loops each day in the range (capped at 31 days); for IPOs it covers each month spanned.

## `dateTo` (type: `string`):

End date (YYYY-MM-DD), inclusive. Defaults to the same day as Date from. Keep the range under 31 days for the daily calendars.

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

Optional. Only keep events for these ticker symbols, e.g. AAPL, MSFT, NVDA. Case-insensitive, applied client-side. Leave empty to return every event on the calendar.

## `includePriceSnapshot` (type: `boolean`):

For each event, make an extra fetch for the symbol's live quote and attach last price, net change, percent change, volume and 52-week range (and compute dividend yield for dividend rows). Charged only when a real quote is returned. Disabled on free plans.

## `aiEventPreview` (type: `boolean`):

Use AI to add a plain-English context line, year-over-year EPS growth (earnings), a setup note, risk flags and a one-line summary per event. Charged only when a usable preview is returned. Disabled on free plans.

## `maxResults` (type: `integer`):

Maximum number of corporate-event records to collect across the whole run. Free Apify plans are capped at 10 per run.

## Actor input object example

```json
{
  "eventTypes": [
    "earnings"
  ],
  "includePriceSnapshot": false,
  "aiEventPreview": false,
  "maxResults": 10
}
```

# Actor output Schema

## `results` (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 = {
    "eventTypes": [
        "earnings"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/stock-corporate-events-calendar-scraper").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 = {
    "eventTypes": ["earnings"],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/stock-corporate-events-calendar-scraper").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 '{
  "eventTypes": [
    "earnings"
  ],
  "maxResults": 10
}' |
apify call scrapers_lat/stock-corporate-events-calendar-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/stock-corporate-events-calendar-scraper"
        }
    }
}

```

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/df4wc8egP1Fr2uGBI/builds/7wMqMbY3TjiFCmMFZ/openapi.json
