同一份 10-K 财报为什么数字对不上?FMP 标准化三大报表与 SEC 原始披露(As Reported API)对账指南

在用 Python 搭建美股基本面多因子模型或自动化财报分析管线时,许多研究员都遇到过一个令人困惑的对账偏差:拿着 API 拉下来的标准化利润表或资产负债表,去和上市公司向 SEC 提交的 10-K 年报 PDF 原件逐行核对,却发现亚马逊的 10-K 原件里根本没有“毛利(Gross Profit)”这一行、微软的标准化总债务(totalDebt)比 10-K 资产负债表上的有息债券高出 885 亿美元、而现金流量表里的资本开支与回购金额在两套接口中甚至正负号完全相反。

这种差异并非数据源解析错误,而是源于金融数据工程中的“横截面标准化重分类(Standardization)”与“SEC XBRL 原始申报(As Reported)”两套底层口径的职责分工。我们对亚马逊、微软、谷歌、Meta、苹果与英伟达 6 家科技巨头最新一期 10-K 年报的实盘逐项对账表明:掌握合成毛利、特殊营业费用归集、ASC 842 经营租赁使用权资产并表以及受限现金(Restricted Cash)映射规则后,固定资产与期末现金差额均可精确收敛至 0.00 亿美元;而在总债务(totalDebt)中,标准化租赁负债(capitalLeaseObligations)受各公司 10-K 主表列报方式影响存在跨公司覆盖范围差异(如亚马逊与谷歌仅捕获非流动租赁负债、苹果主表未单列而归零、微软与附注合计存在 0.047 亿美元差额),穿透 full-as-reported 附注标签即可完整还原。


为什么看 SEC 10-K 原件算出的毛利、总债务与现金流,和标准化报表接口对不上?

在 Statements(财务报表接口)大类下,FMP 官方同时提供两套平行的财报数据流:第一套是面向全市场数千家公司横截面对比的标准化三大报表——Income Statement(利润表接口,/stable/income-statement)、Balance Sheet Statement(资产负债表接口,/stable/balance-sheet-statement)与 Cash Flow Statement(现金流量表接口,/stable/cash-flow-statement);第二套是原样提取 SEC EDGAR 申报文件中 US-GAAP XBRL 分类标准标签的原始申报报表——As Reported Income Statements(原始申报利润表接口,/stable/income-statement-as-reported)、As Reported Balance Statements(原始申报资产负债表接口,/stable/balance-sheet-statement-as-reported)与 As Reported Cashflow Statements(原始申报现金流量表接口,/stable/cash-flow-statement-as-reported)。

为看清两套接口在真实 10-K 年报上的数值映射关系,我们拉取 6 家美股科技巨头截至 2026 年 11 月最新披露的 10-K 年报(金额单位统一折算为亿美元,即 100 Million USD,与第四节 Python 脚本输出结果逐项对应),将最常引发对账疑问的四大科目汇总对比如下:

标的与 10-K 期末日10-K 原件是否单列毛利 · 标准化 grossProfit / otherExpenses10-K 净固定资产 + 经营租赁 ROU 资产 = 标准化 propertyPlantEquipmentNet纯有息借款 (shortTermDebt + longTermDebt) + 租赁负债 = 标准化 totalDebt标准化 capitalExpenditure vs 原始 XBRL 资本开支 · 现金表与资产表期末现金差
亚马逊 (AMZN) · 2025-12-31原件不单列毛利 · 合成毛利 3,605.10 亿 / otherExpenses 1,137.13 亿3,570.25 亿 + 860.54 亿 = 4,430.79 亿 (差额 0.00)656.48 亿 + 873.39 亿 = 1,529.87 亿 (租赁占 57.1%)-1,318.19 亿 vs +1,318.19 亿 · 现金差 +32.96 亿 (受限现金)
微软 (MSFT) · 2026-06-30原件单列毛利 · 2,254.65 亿 / otherExpenses 0.003,130.76 亿 + 241.77 亿 = 3,372.53 亿 (差额 0.00)402.94 亿 + 885.14 亿 = 1,288.08 亿 (租赁占 68.7%)-1,159.48 亿 vs +1,159.48 亿 · 现金差 0.00
谷歌 (GOOGL) · 2025-12-31原件不单列毛利 · 合成毛利 2,403.01 亿 / otherExpenses 0.002,465.97 亿 + 152.21 亿 = 2,618.18 亿 (差额 0.00)465.47 亿 + 127.44 亿 = 592.91 亿 (租赁占 21.5%)-914.47 亿 vs +914.47 亿 · 现金差 0.00
Meta (META) · 2025-12-31原件不单列毛利 · 合成毛利 1,647.91 亿 / otherExpenses 0.001,764.00 亿 + 204.04 亿 = 1,968.04 亿 (差额 0.00)587.44 亿 + 251.53 亿 = 838.97 亿 (租赁占 30.0%)-696.91 亿 vs +696.91 亿 · 现金差 +32.27 亿 (受限现金)
苹果 (AAPL) · 2026-09-26原件单列毛利 · 2,336.02 亿 / otherExpenses 0.00520.84 亿 + 0.00 (未在主表分列) = 520.84 亿 (差额 0.00)801.11 亿 + 0.00 (未在主表分列) = 801.11 亿-90.41 亿 vs +90.41 亿 · 现金差 0.00
英伟达 (NVDA) · 2026-01-25原件单列毛利 · 1,534.63 亿 / otherExpenses 0.00103.83 亿 + 28.67 亿 = 132.50 亿 (差额 0.00)84.68 亿 + 29.44 亿 = 114.12 亿 (租赁占 25.8%)-60.42 亿 vs +60.42 亿 · 现金差 0.00

从上表可以清晰看到:两套接口在总营收(revenue)、营业利润(operatingIncome)、净利润(netIncome)、总资产(totalAssets)以及经营活动现金流净额(operatingCashFlow)等顶层锚点上分毫不差;所有看似“对不上”的数字,全部发生在中间层科目的归并、租赁准则并表与正负号约定上。


利润表对账:不单列毛利(Gross Profit)的公司,履约与研发费用被重分类到了哪里?

美国 GAAP 允许不同行业的上市公司根据业务实质选择利润表列报格式。以亚马逊(AMZN,FY2025 截至 2025-12-31)为例,对比 /stable/income-statement 与 /stable/income-statement-as-reported 的真实返回报文:

// 1. /stable/income-statement-as-reported?symbol=AMZN&period=annual(SEC 10-K 原始 XBRL 标签,无 grossprofit 行,单列履约费用)
{
  "symbol": "AMZN", "fiscalYear": 2025, "period": "FY", "date": "2025-12-31",
  "data": {
    "revenuefromcontractwithcustomerexcludingassessedtax": 716924000000,
    "costofgoodsandservicessold": 356414000000,
    "fulfillmentexpense": 109074000000,
    "technologyandinfrastructureexpense": 108521000000,
    "marketingexpense": 47129000000,
    "generalandadministrativeexpense": 11172000000,
    "otheroperatingincomeexpensenet": -4639000000,
    "costsandexpenses": 636949000000,
    "operatingincomeloss": 79975000000
  }
}

// 2. /stable/income-statement?symbol=AMZN&period=annual(FMP 标准化利润表,自动合成 grossProfit 并将履约费用归入 otherExpenses)
{
  "date": "2025-12-31", "symbol": "AMZN", "fiscalYear": "2025", "period": "FY",
  "revenue": 716924000000, "costOfRevenue": 356414000000, "grossProfit": 360510000000,
  "researchAndDevelopmentExpenses": 108521000000,
  "sellingAndMarketingExpenses": 47129000000, "generalAndAdministrativeExpenses": 11172000000,
  "sellingGeneralAndAdministrativeExpenses": 58301000000,
  "otherExpenses": 113713000000, "operatingExpenses": 280535000000,
  "costAndExpenses": 636949000000, "operatingIncome": 79975000000
}

在编写跨公司利润表清洗代码时,必须重点处理以下三项标准化重分类规则:

  1. 合成毛利(Synthetic Gross Profit)的适用边界:亚马逊、谷歌(GOOGL)与 Meta(META)在向 SEC 提交的 10-K 原始利润表中均不披露 grossprofit 标签。FMP 标准化接口为保证全市场因子计算不中断,统一按 revenue − costOfRevenue 计算出 grossProfit(如亚马逊 7169.24 − 3564.14 = 3605.10 亿美元,名义毛利率 50.29%)。但在做电商同业对比时需注意,亚马逊占总营收 15.21% 的仓储分拣与物流配送履约费(fulfillmentexpense)并未包含在 costOfRevenue 中。
  2. 亚马逊 1,090.74 亿美元履约费与技术基础设施费的映射去向:在标准化利润表中,亚马逊的 technologyandinfrastructureexpense(1,085.21 亿美元,含 AWS 数据中心服务器折旧与研发人员薪酬)被全额映射至 researchAndDevelopmentExpenses;而高达 1,090.74 亿美元的 fulfillmentexpense 既未进入 costOfRevenue,也未进入 sellingGeneralAndAdministrativeExpenses(471.29 + 111.72 = 583.01),而是与 46.39 亿美元其他营业支出合并归入了 otherExpenses(1090.74 + 46.39 = 1137.13)。因此,校验标准化营业费用恒等式时,必须完整纳入 otherExpenses:operatingExpenses = researchAndDevelopmentExpenses + sellingGeneralAndAdministrativeExpenses + otherExpenses(1085.21 + 583.01 + 1137.13 = 2805.35)。
  3. 销售与管理费用(SG&A)的“分列 vs 合并”读取法则:微软、谷歌、Meta 与亚马逊在 10-K 原件中将营销费用与行政费用拆分为两行披露,标准化接口同时填充 sellingAndMarketingExpenses、generalAndAdministrativeExpenses 及其加总项 sellingGeneralAndAdministrativeExpenses;而苹果(AAPL)与英伟达(NVDA)在 10-K 原件中仅披露合并后的 sellinggeneralandadministrativeexpense(FY2026 分别为 297.74 亿美元与 45.79 亿美元),导致其标准化报表中 sellingAndMarketingExpenses 与 generalAndAdministrativeExpenses 均为零。因此,跨公司批量提取销售及管理费用率时,一律读取汇总字段 sellingGeneralAndAdministrativeExpenses,切勿直接用两个子字段相加。

资产负债表与现金流量表对账:ASC 842 租赁并表、正负号反转与受限现金怎么对齐?

相较于利润表,资产负债表与现金流量表的对账差异主要集中在 ASC 842 租赁会计准则并表、现金流出项正负号方向以及受限现金(Restricted Cash)三处:

// 1. 微软(MSFT,2026-06-30)标准化资产负债表 vs 原始申报资产负债表(核心固定资产与债务/租赁字段节选)
// /stable/balance-sheet-statement?symbol=MSFT&period=annual
{"date": "2026-06-30", "propertyPlantEquipmentNet": 337253000000, "shortTermDebt": 9227000000, "capitalLeaseObligationsCurrent": 9678300000, "longTermDebt": 31067000000, "capitalLeaseObligationsNonCurrent": 78836000000, "capitalLeaseObligations": 88514300000, "totalDebt": 128808300000}
// /stable/balance-sheet-statement-as-reported?symbol=MSFT&period=annual
{"date": "2026-06-30", "data": {"propertyplantandequipmentnet": 313076000000, "operatingleaserightofuseasset": 24177000000, "longtermdebtcurrent": 9227000000, "longtermdebtnoncurrent": 31067000000, "operatingleaseliabilitynoncurrent": 16532000000, "otherliabilitiesnoncurrent": 65117000000}}

// 2. Meta(META,2025-12-31)原始申报现金流量表(揭示受限现金与正数资本开支/回购标签)
// /stable/cash-flow-statement-as-reported?symbol=META&period=annual
{"date": "2025-12-31", "data": {"netcashprovidedbyusedinoperatingactivities": 115800000000, "paymentstoacquirepropertyplantandequipment": 69691000000, "paymentsforrepurchaseofcommonstock": 26248000000, "cashandcashequivalentsatcarryingvalue": 35873000000, "restrictedcashandcashequivalentsatcarryingvalue": 837000000, "restrictedcashandcashequivalentsnoncurrent": 2390000000, "cashcashequivalentsrestrictedcashandrestrictedcashequivalents": 39100000000}}

对照上述实盘报文,我们可以建立三条严丝合缝的跨表勾稽公式:

1. 标准化净固定资产 = 10-K 原始 PP&E + 经营租赁使用权资产(ROU Asset)

自 ASC 842 租赁准则实施后,美股公司在 10-K 资产负债表上将经营租赁使用权资产(operatingleaserightofuseasset)单列于物业、厂房及设备(PP&E)下方。FMP 标准化资产负债表为统一重资产投入口径,将两者合并计入 propertyPlantEquipmentNet。对账时需注意原始 PP&E 标签的两种命名:微软、苹果与英伟达使用 propertyplantandequipmentnet,而亚马逊、谷歌与 Meta 的原始固定资产行已内含融资租赁使用权资产,标签名为 propertyplantandequipmentandfinanceleaserightofuseassetafteraccumulateddepreciationandamortization。如第一节表一所示,无论是亚马逊(3570.25 + 860.54 = 4430.79)、微软(3130.76 + 241.77 = 3372.53)还是英伟达(103.83 + 28.67 = 132.50),凡在主表分列 operatingleaserightofuseasset 的公司均实现零误差对齐(关于资产负债表总资产与合并股东权益的勾稽关系,另见 Piotroski F-Score 财务健康选股实战)。

2. 标准化总债务(totalDebt)与跨公司租赁负债(capitalLeaseObligations)口径差异

在 FMP 标准化资产负债表内部,总债务恒等式为 totalDebt = shortTermDebt + longTermDebt + capitalLeaseObligations。但跨公司横向对比企业价值(EV)或杠杆率时必须警惕:受各家公司 10-K 主表列报颗粒度影响,capitalLeaseObligations 在不同公司覆盖的租赁范围存在显著差异:

3. 现金流量表流出项正负号反转与期末受限现金(Restricted Cash)调节

在对比 /stable/cash-flow-statement 与 /stable/cash-flow-statement-as-reported 时,务必注意两项底层规则:


FMP 三层财报接口架构(标准化 / As-Reported / 10-K 全量 JSON)该如何选型与联合调用?

在实际投研工程中,FMP 在 Statements(财务报表接口)与 SecFilings(SEC 文件接口)下提供了三层颗粒度递进的端点,各自承担不同的工程角色:

接口层级官方端点与返回结构特征时间戳与财年类型核心适用场景与典型独有字段
第一层:标准化报表/stable/income-statement · /stable/balance-sheet-statement · /stable/cash-flow-statement(顶层数组,固定 39 / 61 / 47 个驼峰字段)含 date、filingDate、acceptedDate · fiscalYear 为字符串型全市场多因子横截面打分、PE/EV/EBITDA 估值建模(跨财年日历对齐见 美股财报错位与 TTM 市盈率对账实战)
第二层:XBRL 原始表/stable/income-statement-as-reported · /stable/balance-sheet-statement-as-reported · /stable/cash-flow-statement-as-reported(单表 data 含 18~39 个主表标签) · /stable/financial-statement-full-as-reported(含 337~426 个主表加附注全量标签)仅含期末 date(无 filingDate / acceptedDate)· fiscalYear 为整数型提取行业专属原始科目与附注标签:如亚马逊 fulfillmentexpense、苹果附注隐藏租赁负债 operatingandfinanceleaseliability、Meta 未付现资本开支 capitalexpendituresincurredbutnotyetpaid
第三层:10-K 附注树Financial Reports Dates(财报披露日期接口,/stable/financial-reports-dates)· /stable/financial-reports-json(顶层 115 键,含按 10-K 原件章节名组织的 112 张附注明细表字典)按 year 与 period(FY / Q1~Q4)精确检索穿透 10-K 财报附注文本与明细表:如提取微软 Leases - Additional Information 中尚未起租的 3,291 亿美元数据中心租约承诺、债务逐年到期表

下面这段 49 行的 Python 自动对账脚本同时拉取标准化三大报表与 *-as-reported 原始申报接口,自动核验 6 大科技巨头的期末日期一致性、毛利列报状态、固定资产租赁并表差额、总债务构成、资本开支符号反转以及受限现金差额(金额单位统一折算为亿美元)。运行前请先设置环境变量 FMP_KEY:

# Linux / macOS 终端设置环境变量
export FMP_KEY="你的密钥"

# Windows PowerShell 设置环境变量
$env:FMP_KEY="你的密钥"

完整可运行的跨表对账代码如下:

import os
import requests

BASE_URL = "https://quote-fmp.com/stable"
API_KEY = os.environ["FMP_KEY"]
UNIT = 1e8  # 金额统一折算为:亿美元(100 Million USD)

def fetch_api(endpoint: str, params: dict) -> list:
    resp = requests.get(f"{BASE_URL}/{endpoint}", params={**params, "apikey": API_KEY}, timeout=25)
    resp.raise_for_status()
    return resp.json()

def reconcile_10k_statements(symbol: str) -> dict:
    inc_std = fetch_api("income-statement", {"symbol": symbol, "period": "annual", "limit": 1})[0]
    inc_ar_obj = fetch_api("income-statement-as-reported", {"symbol": symbol, "period": "annual", "limit": 1})[0]
    bs_std = fetch_api("balance-sheet-statement", {"symbol": symbol, "period": "annual", "limit": 1})[0]
    bs_ar_obj = fetch_api("balance-sheet-statement-as-reported", {"symbol": symbol, "period": "annual", "limit": 1})[0]
    cf_std = fetch_api("cash-flow-statement", {"symbol": symbol, "period": "annual", "limit": 1})[0]
    cf_ar_obj = fetch_api("cash-flow-statement-as-reported", {"symbol": symbol, "period": "annual", "limit": 1})[0]

    assert len({inc_std["date"], bs_std["date"], cf_std["date"], inc_ar_obj["date"], bs_ar_obj["date"], cf_ar_obj["date"]}) == 1, f"期末日不一致: {symbol}"
    inc_ar, bs_ar, cf_ar = inc_ar_obj["data"], bs_ar_obj["data"], cf_ar_obj["data"]
    ar_ppe = (
        bs_ar.get("propertyplantandequipmentnet")
        or bs_ar.get("propertyplantandequipmentandfinanceleaserightofuseassetafteraccumulateddepreciationandamortization")
        or 0
    )
    ar_rou = bs_ar.get("operatingleaserightofuseasset", 0)
    ar_capex = cf_ar.get("paymentstoacquirepropertyplantandequipment") or cf_ar.get("paymentstoacquireproductiveassets") or 0
    return {
        "symbol": symbol,
        "date": inc_std["date"],
        "ar_has_gp": "grossprofit" in inc_ar,
        "std_gp": round(inc_std["grossProfit"] / UNIT, 2),
        "std_other_exp": round(inc_std["otherExpenses"] / UNIT, 2),
        "ar_ppe": round(ar_ppe / UNIT, 2),
        "ar_rou": round(ar_rou / UNIT, 2),
        "std_ppe": round(bs_std["propertyPlantEquipmentNet"] / UNIT, 2),
        "ppe_diff": round((bs_std["propertyPlantEquipmentNet"] - (ar_ppe + ar_rou)) / UNIT, 2),
        "pure_debt": round((bs_std["shortTermDebt"] + bs_std["longTermDebt"]) / UNIT, 2),
        "lease_debt": round(bs_std["capitalLeaseObligations"] / UNIT, 2),
        "std_total_debt": round(bs_std["totalDebt"] / UNIT, 2),
        "std_capex": round(cf_std["capitalExpenditure"] / UNIT, 2),
        "ar_capex": round(ar_capex / UNIT, 2),
        "restr_cash": round((cf_std["cashAtEndOfPeriod"] - bs_std["cashAndCashEquivalents"]) / UNIT, 2),
    }

for sym in ["AMZN", "MSFT", "GOOGL", "META", "AAPL", "NVDA"]:
    print(reconcile_10k_statements(sym))

实盘运行上述脚本,终端输出结果如下(单位均为亿美元,与第一节表一完全一致):

{'symbol': 'AMZN', 'date': '2025-12-31', 'ar_has_gp': False, 'std_gp': 3605.1, 'std_other_exp': 1137.13, 'ar_ppe': 3570.25, 'ar_rou': 860.54, 'std_ppe': 4430.79, 'ppe_diff': 0.0, 'pure_debt': 656.48, 'lease_debt': 873.39, 'std_total_debt': 1529.87, 'std_capex': -1318.19, 'ar_capex': 1318.19, 'restr_cash': 32.96}
{'symbol': 'MSFT', 'date': '2026-06-30', 'ar_has_gp': True, 'std_gp': 2254.65, 'std_other_exp': 0.0, 'ar_ppe': 3130.76, 'ar_rou': 241.77, 'std_ppe': 3372.53, 'ppe_diff': 0.0, 'pure_debt': 402.94, 'lease_debt': 885.14, 'std_total_debt': 1288.08, 'std_capex': -1159.48, 'ar_capex': 1159.48, 'restr_cash': 0.0}
{'symbol': 'GOOGL', 'date': '2025-12-31', 'ar_has_gp': False, 'std_gp': 2403.01, 'std_other_exp': 0.0, 'ar_ppe': 2465.97, 'ar_rou': 152.21, 'std_ppe': 2618.18, 'ppe_diff': 0.0, 'pure_debt': 465.47, 'lease_debt': 127.44, 'std_total_debt': 592.91, 'std_capex': -914.47, 'ar_capex': 914.47, 'restr_cash': 0.0}
{'symbol': 'META', 'date': '2025-12-31', 'ar_has_gp': False, 'std_gp': 1647.91, 'std_other_exp': 0.0, 'ar_ppe': 1764.0, 'ar_rou': 204.04, 'std_ppe': 1968.04, 'ppe_diff': 0.0, 'pure_debt': 587.44, 'lease_debt': 251.53, 'std_total_debt': 838.97, 'std_capex': -696.91, 'ar_capex': 696.91, 'restr_cash': 32.27}
{'symbol': 'AAPL', 'date': '2026-09-26', 'ar_has_gp': True, 'std_gp': 2336.02, 'std_other_exp': 0.0, 'ar_ppe': 520.84, 'ar_rou': 0.0, 'std_ppe': 520.84, 'ppe_diff': 0.0, 'pure_debt': 801.11, 'lease_debt': 0.0, 'std_total_debt': 801.11, 'std_capex': -90.41, 'ar_capex': 90.41, 'restr_cash': 0.0}
{'symbol': 'NVDA', 'date': '2026-01-25', 'ar_has_gp': True, 'std_gp': 1534.63, 'std_other_exp': 0.0, 'ar_ppe': 103.83, 'ar_rou': 28.67, 'std_ppe': 132.5, 'ppe_diff': 0.0, 'pure_debt': 84.68, 'lease_debt': 29.44, 'std_total_debt': 114.12, 'std_capex': -60.42, 'ar_capex': 60.42, 'restr_cash': 0.0}

常见问题(FAQ):SEC 原始财报接口调用与字段排雷

1. 为什么 as-reported 接口返回的字段名全是没有下划线的长串小写字母?如何快速定位目标科目?

*-as-reported 接口直接剥离了 SEC US-GAAP XBRL 分类标准标签的命名空间前缀(如 us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax)并统一转为全小写字符串(revenuefromcontractwithcustomerexcludingassessedtax)。由于不同公司使用的 XBRL 标签存在差异(如资本开支在苹果为 paymentstoacquirepropertyplantandequipment,在亚马逊与英伟达则为 paymentstoacquireproductiveassets),建议先调一次 /stable/financial-reports-json 对照 10-K 原件可读行名,或在代码中按候选标签列表做回退匹配。

2. as-reported 接口没有返回 filingDate 和 acceptedDate,做历史回测时怎么防未来函数?

*-as-reported 顶层仅返回财报期末日 date 与整数型 fiscalYear,不含 SEC 接收时间戳。在构建时点(Point-in-Time)回测管线时,应先以 (symbol, date, period) 为联合主键同标准化接口 /stable/income-statement 做左连接获取 filingDate 与精确到秒的 acceptedDate;若遇到后续提交 10-K/A 修正报告的场景,还可结合 SEC Filings By Symbol(按代码查 SEC 申报接口,/stable/sec-filings-search/symbol)核对各次申报的 formType 与 acceptedDate,确保修订数据仅在修订文件披露时点之后参与回测。如需在本地实测上述全套财报对账接口,可前往 快速接入指南 免费申领 Ultimate 全接口试用密钥。

登录后可领取FMP Ultimate档15天试用 Key,覆盖全量接口。免费试用 15 天 →