QVeris

金融与市场数据

FMP 财报日历 API Python 示例与生产工作流

使用 Python 获取财报事件,保留修订历史,统一发布时段与财务期间,并在生产使用前验证每条提醒。

发布日期:2026年4月12日 · QVeris团队制作

结合财务报告、计算记录和市场证据开展分析
结合财务报告、计算记录和市场证据开展分析
结合财务报告、计算记录和市场证据开展分析
Quick answer

核心结论

接口

使用 FMP Stable API 的 /stable/earnings-calendar,携带 API Key 和明确的 from/to 日期。FMP 特别说明,查询未来事件时应提供日期窗口。

不要把日历视为不可变数据

日期、盘前/盘后时段、EPS 预估、营收预估和事件可用性都可能变化。应保存快照并比较修订,而不是覆盖唯一记录。

提醒前先标准化

把服务商股票代码映射到稳定证券身份,分离事件日期和财务期间,保留服务商时段标签,并附加获取时间与验证状态。

生产边界

日历说明计划或已披露事件,但不能自动证明交易所本地精确时间、文件发布时间或公司最终确认状态,这些需要单独验证。

推荐模式:获取有限日期窗口,保存原始响应,把记录转换为自己的事件 Schema,与上一版快照比较,只根据通过验证的变化发送提醒。

适用对象

准备工作与架构边界

本实施方案适用于研究看板、投资组合日历、财报监控 Agent,以及财报前后工作流。需要准备 FMP API Key、允许访问该接口的套餐、日期窗口策略、安全密钥存储,以及数据库或队列等输出位置。

凭证

把 FMP_API_KEY 存入密钥管理器或环境变量,不能放进浏览器 JavaScript、代码仓库、截图、日志或 Agent Prompt。

日期窗口策略

使用有限的 UTC 日期范围,例如今天到未来七天。较小且可重复的窗口更便于重试和识别修订。

身份库

维护证券主数据,映射股票代码、交易所、发行人、证券及标识符历史。股票代码本身不是持久主键。

调度与状态

通过调度器重复获取,并保存上一版快照或哈希。没有状态,就无法区分新增事件与修订事件。

分步请求

FMP 财报日历 API Python 示例

官方 Stable API 路径是 https://financialmodelingprep.com/stable/earnings-calendar。下面的示例携带 API Key 和明确日期窗口,对 HTTP 错误直接失败,验证 JSON 结构,并且不记录密钥。

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")
生产提示:可以对临时 5xx 错误进行有限次数重试,但不能重试所有 4xx。401/403 通常表示凭证或套餐问题;429 表示容量压力,应遵循服务商的重试指引。
响应契约

编写业务逻辑前先理解返回字段

FMP 官方文档把公告日期、预估 EPS 和实际 EPS 作为财报日历核心数据;相关财报文档还说明了盘前(BMO)和盘后(AMC)等发布时段,Changelog 则记录了 fiscalDateEnding 与 updatedFromDate 等字段。依赖任何字段前,都要检查当前套餐实际返回的数据。

字段概念用途不能默认
symbol服务商侧证券查询永久的全球身份
date计划或已报告日历日期交易所本地精确时间戳
time / sessionBMO、AMC 或其他服务商时段标签精确时钟时间
epsEstimated / eps可用时的预估与实际 EPS实际 EPS 缺失等于零
revenueEstimated / revenue返回时的预估与实际营收无需验证即可确定币种与尺度一致
fiscalDateEnding事件对应的财务期末与公告日期相同
updatedFromDate存在时表示服务商更新上下文它本身就是完整修订审计记录
统一 Schema

统一事件日期、财务期间、发布时段与预估值

原始 FMP 记录应保持不变,再单独生成统一事件。标准化记录应该显式表达不确定性,而不是把日期或 BMO/AMC 标签伪装成精确时间戳。

{
  "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:..."
}
身份:关联投资组合持仓前,先解析发行人、证券、交易所和代码历史。
时间:分别保存事件日期、服务商时段、交易所时区、财务期末和获取时间。
数值:区分预估、实际、null、零、币种和单位尺度。
证据:保存服务商、请求窗口、原始哈希、获取状态和转换版本。
生产工作流

分步构建财报监控工作流

1. 获取滚动窗口

在目标期间前后保留少量重叠,例如昨天到未来七天,避免调度延迟造成静默缺口。

2. 留存原始证据

转换前保存请求参数、HTTP 状态、获取时间、响应哈希,以及原始记录或不可变对象引用。

3. 统一身份和时间

解析股票代码,把 BMO/AMC 映射为受控时段值,附加交易所时区,并把财务期间与事件日期分开。

4. 按事件身份去重

使用证券身份、事件日期与财务期间组合去重,不能只看股票代码或日期。

5. 与上一版快照比较

分类新增、移除、改期、时段变化、预估修订和实际值发布事件,并保留变化前后的值。

6. 幂等触发下游动作

为每个通过验证的变化生成唯一事件 Key,避免重试造成重复提醒或重复运行下游任务。

验证清单

事件进入提醒或 Agent 前必须逐项验证

窗口:from/to 日期有效、有限、有序,并覆盖预期 UTC 日期。
响应:返回值是 JSON 列表;每条接受记录都包含可用股票代码和事件日期。
身份:代码映射到预期上市证券;存在歧义或过期映射的记录进入隔离区。
时段:保留 BMO、AMC 或 unknown,不能把 unknown 静默转换成开盘时间。
财务期间:不能用公告日期替代财务期末,不兼容季度必须标记。
预估语义:null 保持未知,零保持零,实际值与预估值不能互换。
修订:日期、时段、EPS、营收和移除变化生成带原因码的版本记录。
新鲜度:获取时间和最近成功运行必须满足工作负载的新鲜度预算。
安全、成本与延迟

控制 API Key、限流、缓存与提醒负载

控制项推荐实现避免的问题
密钥管理服务端密钥库、轮换、最小权限和日志脱敏凭证泄露与失控调用
有限窗口带少量重叠的滚动日期范围请求浪费与遗漏事件
缓存策略缓存原始窗口响应;按调度与修订需求失效重复调用与读取不一致
退避临时错误采用带抖动的有限重试;遵循 429 指引重试风暴与配额耗尽
提醒扩散把已接受变化放入队列,并按事件版本去重重复消息与下游流量峰值

不要在应用逻辑或本指南中写死套餐配额。部署前应在 FMP 官方套餐文档中核对当前接口访问权、调用限制、商业使用权和价格。

故障排查

FMP 财报日历常见失败模式

没有返回未来事件

同时提供 from 和 to,验证 ISO 日期和 API Key 权限,并测试一个已知包含财报的更宽窗口。FMP 帮助内容明确指出查询未来事件需要日期范围。

同一公司出现两次

检查多地上市、服务商重复记录、事件改期和财务期间差异,去重前先解析证券身份。

事件从一天移动到另一天

把它视为修订,而不是无意义的删除加新增。关联新旧版本,记录发现时间,并撤销旧提醒。

BMO/AMC 生成了错误时间戳

时段标签不是精确时间。保留 session-only 精度,只在安排本地操作窗口时应用上市交易所的时区与日历。

实际值一直为 null

null 表示本次获取时不可用,不是零。安排财报发布后的再次获取,并记录实际值首次出现时间。

接口突然返回 401、403 或 429

分别处理认证、套餐权限和限流,不能把这些错误伪装成空日历。

QVeris implementation pattern

QVeris 在财报工作流中的位置

FMP 是该日历接口的数据服务商。QVeris 可以帮助 Agent 在调用前发现并检查相关金融、电话会、申报文件、新闻和通知能力;凭证、统一事件库、许可检查、修订逻辑、验证和提醒策略仍由应用负责。

Discover:发现

根据工作流目标查找日历、电话会、申报文件、新闻稿、行情和通知能力。

Inspect:检查

执行前检查 Schema、服务商、成本、延迟、日期覆盖与必填参数。

Call:调用并留证

执行所选能力,保留请求参数、服务商追踪、获取时间、状态和原始证据。

Validate:验证并编排

转换到统一事件契约,比较修订,再触发观察列表、财报后获取、差异检查或人工复核。

FAQ

FMP 财报日历 API 常见问题

FMP 财报日历 API 的接口是什么?

FMP 官方 Stable API 路径是 https://financialmodelingprep.com/stable/earnings-calendar。应携带 API Key 和明确的 from/to 日期窗口,特别是查询未来事件时。

为什么没有返回未来财报?

FMP 说明查询未来事件需要同时提供 from 和 to。还要检查日期格式、API Key 权限、套餐覆盖,以及窗口内是否确有计划财报。

财报日期和预估值是最终值吗?

不是。日期、发布时段、EPS 预估和营收预估都可能变化。应保存获取时间与版本或哈希,并比较快照,而不是覆盖唯一记录。

应该如何处理 BMO 和 AMC?

把它们视为时段,而不是精确时间戳。保留服务商原始值,映射到受控枚举,并在安排提醒时结合交易所日历与时区。

AI Agent 能直接使用财报日历吗?

可以,但应读取经过验证和标准化的记录,而不是未经检查的原始数据。需要保留来源、获取时间、事件状态、预估值、财务期间与修订历史。

官方资料

核对接口、变更、更新时间与访问权限

当前参数、字段、更新周期、访问套餐与商业条款应以 FMP 官方文档为准。Stable API 或返回 Schema 发生变化时,应重新运行契约测试。

档案链接有效不代表已获访问权限、字段可用、价格确定或当前调用成功;执行前须检查当前契约。

FMP 财报日历 API Python 示例与生产工作流 | QVeris Guides