Financial Data Collector

daymade/claude-code-skills/daymade-financial/financial-data-collector

作者 daymade2c6d263d1fcc无许可证1.4K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库今天更新

Collects real financial data for any US publicly traded company from free public sources (yfinance) and outputs structured JSON for downstream skills (DCF modeling, comps analysis, earnings review): market data, historical financials, WACC inputs, analyst estimates — never fabricated fallback values. Use to collect or pull financial/market data, or gather DCF inputs, for a ticker.

AI 生成的概览

通过 yfinance 采集美国上市公司真实财务与市场数据,并输出经过校验的结构化 JSON。

功能
运行 Python 采集脚本,从 yfinance 获取指定美股代码的市场数据、历史财务报表、WACC 输入和分析师预测,并以 10 年期美国国债收益率作为无风险利率代理。随后由校验脚本检查字段完整性、跨字段一致性、数值范围合理性和符号约定。最终交付一个标准化 JSON 文件,缺失值置为 null 并标注来源,而非使用默认值。
适用场景
适用于需要采集或拉取美股代码的财务与市场数据,或为后续 DCF 建模、可比公司分析和财报审阅准备输入的场景。它用于数据采集与校验,而非产出分析结论本身。
运行要求
需要 Python 及 pandas、yfinance 库,并需要网络访问以获取数据。随附两个可执行脚本(collect_data.py、validate_data.py)和参考文档。未提及需要凭据。

Financial Data Collector

Collect and validate real financial data for US public companies using free data sources. Output is a standardized JSON file ready for consumption by other financial skills.

Critical Constraints

NO FALLBACK values. If a field cannot be retrieved, set it to null with _source: "missing". Never substitute defaults (e.g., beta or 1.0). The downstream skill decides how to handle missing data.

Data source attribution is mandatory. Every data section must have a _source field.

CapEx sign convention: yfinance returns CapEx as negative (cash outflow). Preserve the original sign. Document the convention in output metadata. Do NOT flip signs.

yfinance FCF ≠ Investment bank FCF. yfinance FCF = Operating CF + CapEx (no SBC deduction). Flag this in output metadata so downstream DCF skills don't overstate FCF.

Workflow

Step 1: Collect Data

Run the collection script:

bash
python scripts/collect_data.py TICKER [--years 5] [--output path/to/output.json]

The script collects in this priority:

  1. yfinance — market data, historical financials, beta, analyst estimates
  2. yfinance ^TNX — 10Y Treasury yield as risk-free rate proxy
  3. User supplement — for years where yfinance returns NaN (report to user, do not guess)

Step 2: Validate Data

bash
python scripts/validate_data.py path/to/output.json

Checks: field completeness, cross-field consistency (Market Cap = Price × Shares), range sanity (WACC 5-20%, beta 0.3-3.0), sign conventions.

Step 3: Deliver JSON

Single file: {TICKER}_financial_data.json. Schema in references/output-schema.md.

Do NOT create: README, CSV, summary reports, or any auxiliary files.

Output Schema (Summary)

json
{  "ticker": "META",  "company_name": "Meta Platforms, Inc.",  "data_date": "2026-03-02",  "currency": "USD",  "unit": "millions_usd",  "data_sources": { "market_data": "...", "2022_to_2024": "..." },  "market_data": { "current_price": 648.18, "shares_outstanding_millions": 2187, "market_cap_millions": 1639607, "beta_5y_monthly": 1.284 },  "income_statement": { "2024": { "revenue": 164501, "ebit": 69380, "tax_expense": ..., "net_income": ..., "_source": "yfinance" } },  "cash_flow": { "2024": { "operating_cash_flow": ..., "capex": -37256, "depreciation_amortization": 15498, "free_cash_flow": ..., "change_in_nwc": ..., "_source": "yfinance" } },  "balance_sheet": { "2024": { "total_debt": 30768, "cash_and_equivalents": 77815, "net_debt": -47047, "current_assets": ..., "current_liabilities": ..., "_source": "yfinance" } },  "wacc_inputs": { "risk_free_rate": 0.0396, "beta": 1.284, "credit_rating": null, "_source": "yfinance + ^TNX" },  "analyst_estimates": { "revenue_next_fy": 251113, "revenue_fy_after": 295558, "eps_next_fy": 29.59, "_source": "yfinance" },  "metadata": { "_capex_convention": "negative = cash outflow", "_fcf_note": "yfinance FCF = OperatingCF + CapEx. Does NOT deduct SBC." }}

Full schema with all field definitions: references/output-schema.md

<correct_patterns>

Handling Missing Years

python
if pd.isna(revenue):    result[year] = {"revenue": None, "_source": "yfinance returned NaN — supplement from 10-K"}# Report missing years to the user. Do NOT skip or fill with estimates.

CapEx Sign Preservation

python
capex = cash_flow.loc["Capital Expenditure", year_col]  # -37256.0result["capex"] = float(capex)  # Preserve negative

Datetime Column Indexing

python
year_col = [c for c in financials.columns if c.year == target_year][0]revenue = financials.loc["Total Revenue", year_col]

Field Name Guards

python
if "Total Revenue" in financials.index:    revenue = financials.loc["Total Revenue", year_col]elif "Revenue" in financials.index:    revenue = financials.loc["Revenue", year_col]else:    revenue = None

</correct_patterns>

<common_mistakes>

Mistake 1: Default Values for Missing Data

python
# ❌ WRONGbeta = info.get("beta", 1.0)growth = data.get("growth") or 0.02
# ✅ RIGHTbeta = info.get("beta")  # May be None — that's OK

Mistake 2: Assuming All Years Have Data

python
# ❌ WRONG — 2020-2021 may be NaNrevenue = float(financials.loc["Total Revenue", year_col])
# ✅ RIGHTvalue = financials.loc["Total Revenue", year_col]revenue = float(value) if pd.notna(value) else None

Mistake 3: Using yfinance FCF in DCF Models Directly

yfinance FCF does NOT deduct SBC. For mega-caps like META, SBC can be $20-30B/yr, making yfinance FCF ~30% higher than investment-bank FCF. Always flag this in output.

Mistake 4: Flipping CapEx Sign

python
# ❌ WRONG — double-negation risk downstreamcapex = abs(cash_flow.loc["Capital Expenditure", year_col])
# ✅ RIGHT — preserve original, document conventioncapex = float(cash_flow.loc["Capital Expenditure", year_col])  # -37256.0

</common_mistakes>

Known yfinance Pitfalls

See references/yfinance-pitfalls.md for detailed field mapping and workarounds.

来源与署名

来源:daymade/claude-code-skills位于daymade-financial/financial-data-collector提交2c6d263

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架