本文目录
核心结论:最佳 API 取决于你需要哪一层财报数据
FMP 在这里最接近单一完整数据栈,覆盖日历、公司 Earnings、Surprise 与 Transcript;Finnhub 适合结合事件时段以及 EPS/Revenue 实际值与预期值;Alpha Vantage 适合原型和历史 EPS;EODHD 适合全球日历与预期趋势;SEC EDGAR 是第一方证据层,而不是 Consensus Estimate API。
当一个 Agent 同时需要日历、实际结果、预期、Surprise 筛选、报表和 Transcript 时使用。
当事件时段、国际市场、EPS、Revenue 和更广泛市场数据需要进入同一工作流时使用。
适合直接获取 Calendar 和季度/年度 EPS 历史,并能接受 Calendar 使用 CSV 的原型。
适合重视交易所限定代码、全球覆盖、预期区间、分析师数量与修订趋势的场景。
这份指南适合谁
本文适合构建财报监控、组合提醒 Agent、研究 Copilot、财报后摘要、预期修订筛选或事件驱动研究的工程师。你需要能够存储标准化 JSON、安排事件前后任务,并保留可审阅的来源记录。
准备稳定的 Symbol 映射、支持 UTC 的时间戳、财政期间模型、服务端密钥管理、修订策略,以及存放 Earnings Release、Transcript 与 Filing 的证据库。
“财报数据”到底包含哪些层
Earnings 这个词往往掩盖了六种不同产品。把它们当成一张表,会产生日期、期间和来源错误。
| 数据层 | 典型字段 | Agent 用途 |
|---|---|---|
| 日历 | reportDate, timeOfDay, confirmed status | 安排提醒、预取背景、开启事件窗口 |
| 一致预期 | EPS, revenue, low/high, analyst count, as-of time | 记录发布前的市场预期 |
| 实际结果 | actual EPS, actual revenue, period end, currency | 衡量正确财政期间的实际结果 |
| Surprise | difference, percentage, provider formula, estimate snapshot | 识别 Beat/Miss,同时保留分母语义 |
| 叙述 | release, prepared remarks, Q&A, guidance, speaker | 解释驱动因素、管理层表达与展望 |
| 第一方证据 | investor-relations URL, accession number, filing, exhibit | 验证重要结论并保留引用 |
Agent 可用的 Earnings API 选型指标
- 覆盖:交易所、国家、Symbol、历史深度与退市公司。
- 事件质量:预测/确认日期、盘前/盘后、时区与改期。
- 预期质量:来源方法、分析师数量、区间、修订与 As-of 时间。
- 结果语义:GAAP/Adjusted EPS、Diluted/Basic、Revenue 单位与财政期间。
- 新鲜度:日历刷新频率、发布后延迟、修正处理以及 Webhook/轮询。
- 证据:Release、Transcript 或 Filing URL,以及可复现答案的元数据。
最佳 Earnings API 对比
| 选项 | 最适场景 | 文档能力 | 上线前验证 |
|---|---|---|---|
| FMP Stable API | 单一金融数据栈 | Calendar;按 Symbol 查询;EPS/Revenue 实际与预期;Surprise Bulk;Transcript;报表 | 套餐权限、地区覆盖、Transcript 可用性与准确更新延迟 |
| Finnhub | 事件与市场数据工作流 | 日期区间、可选 Symbol、国际市场、盘前/盘后、EPS 与 Revenue 实际/预期 | 各套餐历史深度、预期方法、修正与 Transcript 权限 |
| Alpha Vantage | 简单原型与 EPS 历史 | EARNINGS JSON 提供年度/季度 EPS、预期与 Surprise;CSV Calendar 支持 3/6/12 个月 | CSV 采集、限额、Revenue 需求、全球标识与生产吞吐 |
| EODHD | 全球 Symbol 与预期趋势 | 历史/未来 Calendar、带交易所 Symbol、EPS 实际/预期、报告时段、趋势区间与修订 | 空字段行为、Symbol 省略、批处理、权限与各市场延迟 |
| SEC EDGAR | 第一方来源验证 | 公司 Submissions、8-K/10-Q/10-K 证据、附件、Accession 身份与 XBRL Facts | 不是 Consensus Calendar;需自行处理 Filing 获取、解析、缓存与公平访问 |
用代表性样本实测。至少包含已确认事件、改期事件、非自然年公司、负 EPS 预期、零预期、ADR、双重上市,以及供应商后来修正的结果。
供应商详解:各自真正擅长什么
FMP Stable 文档把 Earnings Calendar、按 Symbol 的结果、Transcript 和 Surprise Bulk 与报表及公司数据放在同一栈中,能减少连接,但来源 URL、地区深度和延迟仍需实测。
其 Calendar 响应记录 bmo、amc、dmh 时段,并提供 EPS/Revenue 字段,适合排程;但在确认语义明确前,日期仍应视为可能变化。
EARNINGS 返回年度与季度 EPS 历史、预期和 Surprise;EARNINGS_CALENDAR 以 CSV 返回 3/6/12 个月范围。适合原型,但不是完整证据栈。
Trends API 文档提供平均、低、高、分析师数量、增长、7/30/60/90 天 EPS 趋势点及修订数量,让 Agent 能解释预期如何变化,而不只是是否 Beat。
财报分析 Agent 参考架构
将用户输入映射为带交易所的 Symbol、法定实体、适用的 CIK、币种和主要上市地。
保存预测与确认的公告时间、时区、状态以及每次观测到的改期。
在结果发布前持久化 EPS/Revenue Consensus、区间、分析师数量、来源和 As-of 时间。
采集实际值、财政期间、GAAP/Adjusted 口径、币种、单位、供应商时间戳和修正版本。
关联 Earnings Release、Guidance、Prepared Remarks、Q&A、SEC Filing、附件和来源 URL,但不要混淆它们的权威等级。
仅比较兼容的期间和定义,再把摘要、精确预期快照与证据包一起返回。
分步实现:构建标准化 Earnings Event
FMP Stable API 适合作为实现示例,因为 Calendar 与按 Symbol 的 Earnings 使用相同认证方式。API Key 应只保存在服务端,并只查询调度器需要的日期窗口。
curl --get "https://financialmodelingprep.com/stable/earnings-calendar" \
--header "apikey: YOUR_API_KEY" \
--data-urlencode "from=2026-07-27" \
--data-urlencode "to=2026-07-31"import hashlib
import json
import os
from datetime import datetime, timezone
from decimal import Decimal, InvalidOperation
import requests
BASE = "https://financialmodelingprep.com/stable"
HEADERS = {"apikey": os.environ["FMP_API_KEY"]}
response = requests.get(
f"{BASE}/earnings-calendar",
headers=HEADERS,
params={"from": "2026-07-27", "to": "2026-07-31"},
timeout=30,
)
response.raise_for_status()
records = response.json()
def number(value):
if value is None or value == "":
return None
try:
return Decimal(str(value))
except InvalidOperation:
return None
def surprise(actual, estimate):
actual, estimate = number(actual), number(estimate)
if actual is None or estimate is None or estimate == 0:
return {"difference": None, "percent": None}
return {
"difference": str(actual - estimate),
"percent": str((actual - estimate) / abs(estimate) * 100),
}
normalized = []
for row in records:
actual = row.get("epsActual")
estimate = row.get("epsEstimated") or row.get("epsEstimate")
raw = json.dumps(row, sort_keys=True, separators=(",", ":"))
normalized.append({
"symbol": row.get("symbol"),
"reportDate": row.get("date"),
"fiscalDateEnding": row.get("fiscalDateEnding"),
"epsActual": actual,
"epsEstimate": estimate,
"revenueActual": row.get("revenueActual"),
"revenueEstimate": row.get("revenueEstimated"),
"surprise": surprise(actual, estimate),
"provider": "financial-modeling-prep",
"retrievedAt": datetime.now(timezone.utc).isoformat(),
"rawSha256": hashlib.sha256(raw.encode()).hexdigest(),
"raw": row,
})示例中的备用字段名用于适应常见命名差异,但生产代码仍应验证所订阅端点的准确 Schema。不要在未记录分母使用 Estimate、绝对值 Estimate 或其他规则的情况下,重新计算供应商发布的 Surprise 百分比。
定义 Earnings 证据契约
| 字段组 | 必需值 | 为什么重要 |
|---|---|---|
| 身份 | symbol, exchange, issuer ID, CIK | 避免 ADR、双重上市和 Ticker 复用错误 |
| 事件 | reportDate, time, timezone, status, observedAt | 区分预测、确认和改期 |
| 财政期间 | FY, FQ, period start/end, provider label | 避免按自然季度错误推断 |
| 预期快照 | EPS/revenue average, low, high, analyst count, asOf | 让 Consensus 的时间依赖性可复现 |
| 实际结果 | value, GAAP/adjusted, basic/diluted, currency, unit | 避免语义不一致的比较 |
| 来源 | provider, endpoint, retrievedAt, source URLs, raw hash, version | 支持修正、审计与精确引用 |
Earnings Surprise 逻辑比看起来更脆弱
只有当 Actual 与 Estimate 具有相同公司、财政期间、会计口径、币种、单位和预期快照时,Beat/Miss 才有意义。负数或零 EPS Estimate 尤其容易让 Surprise 百分比被误读。
保存供应商发布的 Difference、Percentage 和文档公式;只有跨供应商标准化时才重算。
后续预期修订不应改写公司发布结果时真正面对的市场预期。
GAAP/Adjusted、Basic/Diluted EPS 是不同指标,不能只当成可互换标签。
确认币种、数量级、期间以及是否由供应商标准化之后才能换算。
Agent 回答前的验证清单
- 带交易所的 Symbol 与发行人身份匹配目标公司。
- 预测、确认、改期和实际发布时间保留为不同版本。
- 财政年度、财政季度、Period End 和 Report Date 不互相推断。
- Actual 与 Estimate 使用相同 GAAP/Adjusted 和 Basic/Diluted 定义。
- Revenue 具有相同币种与数量级,空 Estimate 不被转换成零。
- Consensus 快照包含供应商、可用的分析师数量和 As-of 时间。
- 修正生成新版本,并触发对受影响结论的重新评估。
- 重要结论链接到 Release、Transcript 段落或 SEC Filing,而不仅是标准化 API 行。
安全、成本与延迟控制
供应商 Token 应放入 Secret Manager,不能出现在浏览器 JavaScript、日志、截图或 Prompt 中。
低频刷新未来 Calendar,只在已确认事件窗口附近轮询受控的 Symbol 集合。
按 Symbol、期间和观测时间缓存预期快照与供应商载荷,不要直接覆盖。
先用结构化验证缩小事件范围,再只检索相关 Transcript 章节和来源记录。
常见失败模式与修复方式
| 失败 | 原因 | 修复 |
|---|---|---|
| 提醒日期错误 | 把预测日期当成确认日期,或丢失时区 | 给事件状态建版本,并保存时区和交易时段标签 |
| 错误 Beat/Miss | 财政期间、EPS 口径或预期快照不同 | 只有证据契约的所有语义键一致后才比较 |
| Surprise 百分比无穷大 | Estimate 为零或缺失 | Percentage 返回 Null,并保留绝对 Difference |
| 历史答案静默变化 | 供应商修正覆盖旧记录 | 使用只追加快照、内容哈希和修正版本 |
| 把 Transcript 当成实际数值来源 | 叙述层与结构化结果层被合并 | 数值使用结构化 Actual,解释使用 Transcript 段落 |
| 发行人事件重复 | ADR、双重上市或供应商 Symbol 未映射 | 分离发行人、证券、上市地和供应商标识 |
Transcript 与 SEC Filing 是证据层,不是替代品
Earnings Transcript 解释管理层叙述与分析师问答;8-K 附件可能包含 Earnings Release;10-Q/10-K 提供已提交财务报表和披露。但它们都不提供带时间戳的 Consensus Estimate。可靠模式是先冻结预期,再采集实际结果,最后关联叙述与第一方证据。
QVeris 实现模式:Discover → Inspect → Call
QVeris 可以位于各供应商 Earnings 端点之上,承担面向 Agent 的发现与路由。Agent 搜索精确能力——Calendar、Estimates、Actuals、Surprise、Transcript 或 Filing——检查 Schema 与限额,再用受控输入调用。响应仍须保留底层供应商与证据 URL。
按数据层和市场覆盖寻找能力,而不是只搜索笼统的“Earnings”。
检查 Symbol 格式、财政期间语义、时间戳、预期方法、Schema、权限和来源字段。
调用最小日期或 Symbol 范围,验证载荷,并写入不可变证据记录。
常见问题
哪种 Earnings API 最适合 AI Agent?
FMP 适合一体化数据栈;Finnhub 适合事件时段与预期字段;Alpha Vantage 适合简单原型;EODHD 适合全球日历与预期趋势。最终应按自己的覆盖和新鲜度需求实测。
Earnings Calendar 与历史结果有什么区别?
Calendar 预测或记录公告事件;Earnings History 保存各财政期间的实际结果。事件日期与财政期间是不同字段。
Agent 应如何计算 Earnings Surprise?
优先使用供应商文档值。自行计算时保留 Actual、Estimate、公式、分母规则、币种和 As-of 时间;零或空 Estimate 必须显式处理。
Transcript 与 Earnings Result 是同一种数据吗?
不是。Transcript 包含管理层表达与问答;EPS 和 Revenue 实际值应来自结构化结果源,重要时还应与 Release 或 Filing 核验。
为什么财报日期会变化?
公司可能确认或改期,供应商也可能修订预测日期。应保存确认状态与每次观测更新。
如何标准化财政季度?
分别保存财政年度、财政季度、Period End、Report Date 与供应商标签,不要只按自然月份推导财政季度。
Agent 应把 Consensus Estimate 当作事实吗?
不应。Consensus 是随时间变化的聚合值,应保存数值、可用的分析师数量、供应商、方法说明和 As-of 时间。
QVeris 位于哪一层?
QVeris 帮助 Agent 发现、检查和调用供应商工具;数据供应商、Earnings Release、Transcript 或 SEC Filing 仍是记录源。
官方资料与下一步
API Schema、限额、套餐权限和更新周期可能变化。生产使用前,请核对当前官方文档并测试代表性 Symbol。
先冻结预期,再解释结果
用 QVeris 发现并检查适合 Agent 的财报工具,并在整个工作流中持续保留供应商身份、预期快照、财政语义与第一方证据。
阅读 REST API 指南
