Corporate Earnings & IPO Calendar API

Returns upcoming and historical corporate events associated with specific ticker symbols, including earnings announcements and Initial Public Offerings (IPOs).

Available via: REST API · MCP

This endpoint provides past and upcoming corporate earnings and IPO events. Each record contains the event type, ticker symbol, company name, and event date and time, along with type-specific details such as EPS estimates and actual results for earnings, or deal status and listing exchange for IPOs. 

Coverage

Event TypesEarnings, IPO
Assets and MarketsEvents are available for supported ticker symbols across FinImpulse market coverage.
Future AvailabilityScheduled event coverage varies by event type and source. Earnings events are typically available up to approximately 14 months ahead, while IPO events are typically available up to approximately 2-3 weeks ahead.

Data Freshness

Data is updated weekly. Newly reported values, such as eps_actual, may appear with a delay of up to one week after the event. 

Data Availability & Limitations

  • The endpoint supports two event types: earnings and ipo.
  • Available response fields depend on the event type.
  • Earnings events may contain null values for eps_estimate, eps_actual, or eps_surprise_percent when the corresponding data is not available.
  • event_name is available for earnings events only.
  • IPO events do not return event_name.
  • IPO filing_date and amended_date are not returned because these values are not currently available from the underlying data.

When to Use This Endpoint 

  • Build dedicated Earnings or IPO calendars and dashboards.
  • Track expected EPS (Earnings Per Share) estimates against actual reported numbers.
  • Alert users to upcoming earnings calls or IPO pricing dates.
  • Filter events by type, date, or ticker symbol.

Request Parameters

POST
v1/events/tickers
event_types arrayoptional

Types of corporate events to include.

Supported values:

  • earnings
  • ipo

Each value is a string. You can pass one or both of the supported values. If event_types is not specified, events of all types are returned.

filters arrayoptional

Optional filter expressions.

Each filter condition is defined as: [field, operator, value]. Conditions can be combined using logical operators and/or.

Supported operators:

Numeric fields:

  • > - greater than
  • >= - greater than or equal
  • < - less than
  • <= - less than or equal
  • = - equals
  • <> - not equal

String fields:

  • like – pattern match (requires % as a wildcard)
  • not_like - pattern does not match (requires % as a wildcard)
  • contains - value exists in string
  • not_contains - value does not exist in string
  • startswith - string starts with value
  • endswith - string ends with value

% usage examples:

  • %abc% - matches any string containing "abc"
  • abc% - matches any string starting with "abc"
  • %abc - matches any string ending with "abc"
sort_by arrayoptional

Optional sorting configuration for result items. Each sorting setup is defined as an object {selector, desc}:

  • selector - Field used for sorting (e.g., start_date_time).
  • desc - Sorting direction (true for descending, false for ascending).

Multiple sorting setups can be combined in the array.

By default, results are sorted by start_date_time in descending order, then by symbol in alphabetical order.

limit integeroptional

Maximum number of matched items returned (user-defined).

  • Default: 100
  • Maximum: 1000
offset integeroptional

Pagination offset (0-based)

tag stringoptional

User-defined identifier for the task (max 255 characters).

It is returned in the response data object, allowing you to match results with the corresponding request. It does not affect API processing or filtering logic.

Example Request
curl --location "https://api.finimpulse.com/v1/events/tickers" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer <API_TOKEN>" \
  -d '{
      "event_types": [
          "earnings",
          "ipo"
      ],
      "filters": [
          [
              "symbol",
              "=",
              "AAPL"
          ]
      ],
      "sort_by": [
          {
              "selector": "start_date_time",
              "desc": true
          }
      ],
      "limit": 5,
      "offset": 0
  }'
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var client = new HttpClient();
var url = "https://api.finimpulse.com/v1/events/tickers";

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<API_TOKEN>");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var json = @"{
    ""event_types"": [
        ""earnings"",
        ""ipo""
    ],
    ""filters"": [
        [
            ""symbol"",
            ""="",
            ""AAPL""
        ]
    ],
    ""sort_by"": [
        {
            ""selector"": ""start_date_time"",
            ""desc"": true
        }
    ],
    ""limit"": 5,
    ""offset"": 0
}";
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
<?php
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.finimpulse.com/v1/events/tickers",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "Authorization: Bearer <API_TOKEN>"
  ],
  CURLOPT_POSTFIELDS => json_encode(
[
      "event_types" => [
        "earnings",
        "ipo"
      ],
      "filters" => [
        [
          "symbol",
          "=",
          "AAPL"
        ]
      ],
      "sort_by" => [
        [
          "selector" => "start_date_time",
          "desc" => true
        ]
      ],
      "limit" => 5,
      "offset" => 0
    ]
  )
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import urllib.request
import json

url = "https://api.finimpulse.com/v1/events/tickers"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <API_TOKEN>"
}
data = {
    "event_types": [
        "earnings",
        "ipo"
    ],
    "filters": [
        [
            "symbol",
            "=",
            "AAPL"
        ]
    ],
    "sort_by": [
        {
            "selector": "start_date_time",
            "desc": True
        }
    ],
    "limit": 5,
    "offset": 0
}

req = urllib.request.Request(url,
    data=json.dumps(data).encode("utf-8"),
    headers=headers,
    method="POST")

with urllib.request.urlopen(req) as response:
    result = json.loads(response.read().decode("utf-8"))
    print(result)
const https = require('https');

const data = JSON.stringify({
    "event_types": [
        "earnings",
        "ipo"
    ],
    "filters": [
        [
            "symbol",
            "=",
            "AAPL"
        ]
    ],
    "sort_by": [
        {
            "selector": "start_date_time",
            "desc": true
        }
    ],
    "limit": 5,
    "offset": 0
});

const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <API_TOKEN>',
    'Content-Length': Buffer.byteLength(data)
  }
};

const req = https.request('https://api.finimpulse.com/v1/events/tickers', options, (res) => {
  let body = '';
  res.on('data', chunk => body += chunk);
  res.on('end', () => console.log(JSON.stringify(JSON.parse(body), null, 2)));
});

req.on('error', (e) => console.error(e));
req.write(data);
req.end();

Response

Pagination Fields

total_count integer

Total number of matching events in the database.

items_count integer

Number of events returned in the current response page.

items array

Array of polymorphic event objects.

Note: The available fields in each object depend on its type.

Common Fields (All Event Types)

type string

The type of the event (e.g., "earnings", "ipo"). Used to determine which specific fields to expect.

symbol string

The ticker symbol of the asset.

company_short_name string

A concise display name for the company.

start_date_time string

The scheduled UTC date and time of the event in ISO 8601 format (e.g., "2026-08-13T08:10:00Z").

Earnings Event Details

event_name string

Name of the earnings event or reporting period, e.g. "H1 2026 Earnings Announcement" or "Q2 2027 Earnings Announcement".

start_date_time_type string

Code describing the scheduled timing of the earnings release:

  • BMO - Before Market Open
  • AMC - After Market Close
  • TNS - Time Not Supplied
  • TAS - Source-specific timing code for which the source does not provide a descriptive label.
eps_estimate number

Estimated EPS before the earnings release.

eps_actual number

Actual reported EPS. May be null before results are published.

eps_surprise_percent number

Percentage difference between actual and estimated EPS. Values are returned as percentage points (e.g., 5.2 represents 5.2%).

time_zone_short_name string

Local time zone abbreviation associated with the event (e.g., "HKT" or "EST").

gmt_offset_milliseconds integer

Offset from GMT in milliseconds.

intraday_market_cap number

Market capitalization at the time represented by the event data, denominated in the ticker’s currency.

IPO Event Details

deal_type string

Status or type of the IPO event, as provided by the source. Common values include Expected, Priced, and Withdrawn.

exchange_short_name string

Exchange where the asset is expected to list or has been listed (e.g., "Nasdaq" or "NYSE").

currency_name string

Currency associated with the IPO (e.g., "USD").

start_date_time string

IPO-related date provided by the source. Depending on the event, this may represent an expected listing date, pricing date, or another IPO milestone. The response does not explicitly identify which date type applies.

Example Response
{
  "result": {
      "total_count": 74192,
      "items_count": 2,
      "items": [
          {
              "type": "earnings",
              "symbol": "0001.HK",
              "company_short_name": "CK Hutchison Holdings Limited",
              "start_date_time": "2026-08-13T08:10:00Z",
              "event_name": "H1 2026 Earnings Announcement",
              "start_date_time_type": "TNS",
              "eps_estimate": null,
              "eps_actual": null,
              "eps_surprise_percent": null,
              "time_zone_short_name": "HKT",
              "gmt_offset_milliseconds": 28800000,
              "intraday_market_cap": 278061224855.816
          },
          {
              "type": "ipo",
              "symbol": "AAUB",
              "company_short_name": "Alpha Architect US Equity 4 ETF",
              "start_date_time": "2026-07-23T04:00:00Z",
              "exchange_short_name": "Nasdaq",
              "currency_name": "USD",
              "deal_type": "Expected"
          }
      ]
  }
}

Pagination & Limits

You can control how many records a response returns and page through large result sets using the limit and offset parameters.

  • Use limit to set the number of records per request, from 1 to 1000. If limit is not specified, up to 100 records are returned. 
  • Use offset to skip records (0-based). For example, limit: 100 and offset: 100 return records 101–200.
  • To retrieve all matching records, increase offset by the limit value until offset + items_count reaches total_count.
  • To keep the order consistent across pages, pass sort_by, for example, by start_date_time and symbol. 

Each returned record is billed as a Row, so the cost of a request depends on the number of records returned. 

API Pricing

  • Call: $0.00030
  • Row: $0.00005