QVeris

Finance & Market Data

FMP Earnings Calendar API Python Example & Workflow

Use the FMP Earnings Calendar API with Python, normalize dates and estimates, validate changes, handle rate limits, and build reliable earnings workflows.

Published: April 12, 2026 · By the QVeris Team

Financial reports, calculations and market evidence reviewed together
Financial reports, calculations and market evidence reviewed together
Financial reports, calculations and market evidence reviewed together
Quick answer

TL;DR

Endpoint

Use FMP's stable /stable/earnings-calendar endpoint with an API key and explicit from/to dates. FMP specifically recommends a date window when requesting future events.

Do not treat the calendar as immutable

Dates, BMO/AMC timing, EPS estimates, revenue estimates, and event availability may change. Keep snapshots and compare revisions instead of overwriting the only record.

Normalize before alerting

Map provider symbols to stable security identity, separate event date from fiscal period, preserve the provider session label, and attach retrieval time and validation status.

Production boundary

The calendar tells you what is scheduled or reported; it does not prove an exchange-local timestamp, filing publication time, or final company confirmation unless those are validated separately.

Recommended pattern: fetch a bounded window, store the raw payload, normalize each record into your own event schema, diff it against the prior snapshot, and emit alerts only from accepted changes.

Who this is for

Prerequisites and architecture boundary

This implementation is for research dashboards, portfolio calendars, earnings-monitoring agents, and pre/post-event workflows. You need an FMP API key, an allowed plan, a date-window policy, secure secret storage, and a destination such as a database or queue.

Credentials

Store FMP_API_KEY in a secret manager or environment variable. Never embed it in browser JavaScript, source control, screenshots, logs, or agent prompts.

Window policy

Choose a bounded UTC date range, for example today through the next seven days. Smaller repeatable windows simplify retries and revision detection.

Identity store

Maintain a security master that maps symbol, exchange, issuer, security, and identifier history. A ticker alone is not a durable key.

Scheduler and state

Use a scheduler for repeat retrieval and persist the previous snapshot or hash. Without state, the system cannot distinguish a new event from a revised event.

Step-by-step request

FMP Earnings Calendar API Python example

The official stable endpoint is https://financialmodelingprep.com/stable/earnings-calendar. The example below supplies an API key and explicit date window, raises on HTTP errors, validates the JSON shape, and never logs the credential.

import os
from datetime import date, timedelta

import requests

API_URL = "https://financialmodelingprep.com/stable/earnings-calendar"
API_KEY = os.environ["FMP_API_KEY"]

start = date.today()
end = start + timedelta(days=7)

response = requests.get(
    API_URL,
    params={
        "from": start.isoformat(),
        "to": end.isoformat(),
        "apikey": API_KEY,
    },
    timeout=(3.05, 20),
)
response.raise_for_status()

events = response.json()
if not isinstance(events, list):
    raise ValueError("Expected the FMP earnings calendar to return a list")

print(f"received {len(events)} earnings events")
Production note: add bounded retries for transient 5xx responses, but do not retry every 4xx response. Treat 401/403 as credential or plan issues and 429 as capacity pressure that should respect provider retry guidance.
Response contract

Understand the response before writing business logic

FMP documents announcement date, estimated EPS, and actual EPS as core earnings-calendar data. Its related earnings documentation also describes release-session labels such as before market open (BMO) and after market close (AMC), while the changelog records fields including fiscalDateEnding and updatedFromDate. Inspect the live payload available to your plan before relying on any field.

Field conceptUseDo not assume
symbolProvider-facing security lookupA permanent global identity
dateScheduled or reported calendar dateAn exchange-local exact timestamp
time / sessionBMO, AMC, or other provider timing labelA precise clock time
epsEstimated / epsExpected and actual EPS when availableThat missing actual EPS means zero
revenueEstimated / revenueExpected and actual revenue when returnedConsistent currency and scale without validation
fiscalDateEndingThe fiscal period associated with the eventThe same thing as announcement date
updatedFromDateProvider update context when presentA complete revision audit trail by itself
Canonical schema

Normalize event date, fiscal period, session, and estimates

Keep the raw FMP record unchanged, then create a separate canonical event. A normalized record should make uncertainty visible instead of turning a date or BMO/AMC label into a false exact timestamp.

{
  "event_id": "earnings:security-123:2026-08-06",
  "issuer_id": "issuer-123",
  "security_id": "security-123",
  "symbol_as_reported": "EXAMPLE",
  "event_date": "2026-08-06",
  "release_session": "after_market_close",
  "release_time_precision": "session_only",
  "exchange_timezone": "America/New_York",
  "fiscal_period_end": "2026-06-30",
  "eps_estimate": 1.23,
  "eps_actual": null,
  "revenue_estimate": null,
  "revenue_actual": null,
  "provider": "financial_modeling_prep",
  "retrieved_at": "2026-08-03T08:00:00Z",
  "validation_status": "accepted_with_unknowns",
  "raw_record_hash": "sha256:..."
}
Identity: resolve issuer, security, exchange, and symbol history before joining portfolio positions.
Time: preserve event date, provider session, exchange timezone, fiscal period end, and retrieval time separately.
Numbers: distinguish estimate, actual, null, zero, currency, and unit scale.
Evidence: store provider, request window, raw hash, retrieval status, and transformation version.
Production workflow

Step-by-step earnings monitoring implementation

1. Fetch a rolling window

Retrieve a small overlap around the target period—for example yesterday through the next seven days—so delayed jobs do not create silent gaps.

2. Capture raw evidence

Before transformation, store request parameters, HTTP status, retrieval time, response hash, and the raw record or an immutable object reference.

3. Normalize identity and time

Resolve the symbol, map BMO/AMC to controlled session values, attach exchange timezone, and keep fiscal period distinct from event date.

4. Deduplicate by event identity

Use security identity plus event date and fiscal period. Do not deduplicate only on symbol or only on date.

5. Diff against the previous snapshot

Classify new, removed, rescheduled, session-changed, estimate-revised, and actual-reported events. Preserve both old and new values.

6. Emit idempotent actions

Generate one event key per accepted change so retries do not send duplicate notifications or trigger the same downstream job twice.

Validation checklist

Validate each event before it reaches an alert or agent

Window: requested from/to dates are valid, bounded, ordered, and cover the intended UTC days.
Payload: response is a JSON list; each accepted item has a usable symbol and event date.
Identity: symbol maps to the intended listing and security; ambiguous or stale mappings are quarantined.
Session: BMO, AMC, or unknown is preserved; unknown is not silently converted into market open.
Fiscal period: fiscal period end is not replaced by announcement date and incompatible quarters are flagged.
Estimate semantics: null remains unknown; zero remains zero; actual and estimate are never swapped.
Revision: date, session, EPS, revenue, and removal changes create versioned records with reason codes.
Freshness: retrieval time and previous successful run are within the workload's freshness budget.
Security, cost, and latency

Control API keys, rate limits, caching, and alert load

ControlRecommended implementationFailure prevented
Secret handlingServer-side secret store, rotation, least privilege, redacted logsCredential leakage and uncontrolled use
Bounded windowsSmall rolling range with intentional overlapWasteful requests and missed events
Cache policyCache raw window responses; invalidate by schedule and revision needsDuplicate calls and inconsistent readers
BackoffJittered bounded retry for transient errors; respect 429 guidanceRetry storms and quota exhaustion
Alert fan-outQueue accepted changes and deduplicate by event versionDuplicate messages and downstream spikes

Do not hardcode plan quotas in application logic or this guide. Verify current endpoint access, call limits, commercial rights, and pricing in FMP's official plan documentation before deployment.

Troubleshooting

Common FMP earnings calendar failure modes

No future events are returned

Supply both from and to, verify ISO dates and API-key access, and test a wider known earnings window. FMP's help content specifically calls out the need for a date range.

The same company appears twice

Check multiple listings, duplicate provider records, rescheduled events, and fiscal-period differences. Resolve security identity before deduplication.

An event moves from one day to another

Treat this as a revision, not delete-plus-new noise. Link old and new versions, record detection time, and withdraw obsolete scheduled alerts.

BMO/AMC creates a wrong timestamp

A session label is not an exact time. Keep session-only precision and apply the listing exchange's timezone and calendar only when scheduling a local operational window.

Actual values remain null

Null means unavailable at that retrieval time, not zero. Schedule post-release refreshes and record when the actual first appears.

The API suddenly returns 401, 403, or 429

Separate authentication, subscription access, and rate-limit handling. Do not hide these conditions behind an empty calendar result.

QVeris implementation pattern

Where QVeris fits in an earnings workflow

FMP is the data provider for this calendar endpoint. QVeris can help an agent discover and inspect related financial, transcript, filing, news, and notification capabilities before calling them. Your application still owns credentials, the normalized event store, licensing checks, revision logic, validation, and alert policy.

Discover

Find calendar, transcript, filing, press-release, quote, and notification capabilities based on the workflow goal.

Inspect

Review schema, provider, cost, latency, date coverage, and required parameters before execution.

Call and preserve evidence

Execute the selected capability and retain request parameters, provider trace, retrieval time, status, and raw evidence.

Validate and orchestrate

Normalize into the event contract, compare revisions, then trigger watchlists, post-release retrieval, variance checks, or human review.

FAQ

FMP Earnings Calendar API FAQ

What is the FMP Earnings Calendar API endpoint?

FMP documents the stable endpoint as https://financialmodelingprep.com/stable/earnings-calendar. Supply an API key and an explicit from/to date window, especially for future events.

Why are no future earnings returned?

FMP states that future events require both from and to parameters. Also verify date formatting, API-key access, subscription coverage, and whether the window contains scheduled reports.

Are earnings dates and estimates final?

No. Dates, sessions, EPS estimates, and revenue estimates can change. Store retrieval time and a version or hash, then compare snapshots rather than overwriting the only copy.

How should BMO and AMC be handled?

Treat them as sessions, not precise timestamps. Preserve the provider value, map it to a controlled enum, and use the exchange calendar and timezone when scheduling alerts.

Can an AI agent use the calendar directly?

Yes, but it should consume validated normalized records rather than unchecked raw data. Preserve source, retrieval time, event status, estimates, fiscal period, and revision history.

Official sources

Verify the endpoint, changes, timing, and access

FMP documentation is the source of truth for current parameters, fields, cycle times, access tiers, and commercial terms. Re-run contract tests when FMP changes the stable endpoint or response schema.

A verified profile link does not guarantee entitlement, field availability, price or current execution success; inspect the current contract before calling.