Skip to content
Data
Skill

/company-valuation

Estimate the intrinsic value of a public company using DCF, relative (peer multiple) and sum-of-parts (SOTP) methods, then triangulate to an implied share price with upside/downside versus the current market price. Use this skill whenever the user asks: "what is AAPL worth",

From plugin
finance-skills
3.1k26 skills
Install
$ npx -y skills add himself65/finance-skills --skill company-valuation --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/company-valuation

Context preview

The summary Claude sees to decide when to auto-load this skill.

Estimate the intrinsic value of a public company using DCF, relative (peer multiple) and sum-of-parts (SOTP) methods, then triangulate to an implied share price with upside/downside versus the current market price. Use this skill whenever the user asks: "what is AAPL worth",

SKILL.md

company-valuation.SKILL.md
name: company-valuation
description: >
  Estimate the intrinsic value of a public company using DCF, relative (peer multiple)
  and sum-of-parts (SOTP) methods, then triangulate to an implied share price with
  upside/downside versus the current market price. Use this skill whenever the user asks:
  "what is AAPL worth", "valuation of NVDA", "fair value of TSLA", "intrinsic value",
  "DCF for MSFT", "build a DCF", "discounted cash flow", "WACC", "terminal value",
  "implied share price", "upside to fair value", "is X overvalued/undervalued",
  "relative valuation", "peer comparison valuation", "EV/EBITDA target", "SOTP",
  "sum of the parts", "how much is [company] worth", "price target from fundamentals",
  "value this company", or any ticker in the context of computing intrinsic or
  relative valuation. Default to running ALL three methods
  (DCF + relative + SOTP-if-applicable) and presenting a blended implied price with a
  sensitivity table. Do not answer valuation questions from memory — always run the workflow.

Company Valuation

Triangulates intrinsic value via three methods, then blends them to an implied share price:

1. **DCF** — 5-year FCFF projection, discount at WACC, terminal value. 2. **Relative** — apply peer median P/E, EV/Revenue, EV/EBITDA. 3. **SOTP** — when 2+ distinct reporting segments exist, value each at pure-play peer multiples.

Always present a WACC × terminal-growth sensitivity table and Bull/Base/Bear scenarios.

**Disclaimer**: Research/educational output. Not financial advice.

---

Step 1: Detection Flow

Detect data source and runtime deps. The skill supports 3 method paths — pick the richest one available.

**Environment status:**

!`python3 -c "import yfinance, numpy, pandas; print('YFIN_OK')" 2>/dev/null || echo "YFIN_MISSING"`
!`(command -v funda && funda --version) 2>/dev/null || echo "FUNDA_CLI_MISSING"`
!`python3 -c "import yfinance as yf; t=yf.Ticker('^TNX'); p=t.fast_info.last_price; print(f'RF_10Y={p/100:.4f}')" 2>/dev/null || echo "RF_FETCH_FAIL"`

**Decision tree:**

| Condition | Method path | |---|---| | `YFIN_OK` | **Path A** (primary): yfinance for financials + peer multiples | | `YFIN_MISSING` but `FUNDA_CLI_MISSING` is not set | **Path B**: delegate to `finance-data-providers:funda-data` skill for fundamentals | | Both missing | **Path C**: pip-install yfinance, then Path A. `python3 -m pip install -q yfinance numpy pandas` | | `RF_FETCH_FAIL` | Use default `rf = 0.045` and note stale risk-free rate in output |

If `RF_10Y=` printed, use that value as `rf` in Step 4d instead of the hardcoded 4.5%.

---

Step 2: Choose Methods & Set Defaults

Method applicability

| Company type | DCF | Relative | SOTP | Fallback | |---|---|---|---|---| | Mature cash-flow (CPG, telecom, utilities) | ✅ primary | ✅ | ❌ | — | | High-growth SaaS / software | ✅ with care | ✅ primary | ❌ | Use EV/Revenue + Rule of 40 | | Multi-segment conglomerate | ✅ | ✅ | ✅ primary | See `references/sotp.md` | | Banks / insurance | ❌ | ✅ (P/B, P/TBV) | ❌ | DDM or excess return; note in output | | Pre-revenue | ❌ | EV/Revenue only | ❌ | Flag low confidence | | REITs | ❌ | ✅ (P/FFO, P/AFFO) | ❌ | NAV-based | | Cyclicals (energy, semis, industrials) | ✅ on mid-cycle | ✅ | sometimes | Normalize through-cycle |

Defaults table

Every parameter below MUST have a value before moving to Step 3. Use these unless the user overrides.

| Parameter | Default | Rationale | |---|---|---| | Projection horizon | 5 years | Standard explicit forecast window | | Terminal growth `g` | 2.5% | ~ long-run US GDP | | Risk-free rate `rf` | Live 10Y UST from Step 1, else 4.5% | Current cost of capital anchor | | Equity risk premium `erp` | 5.5% | Damodaran mid-range | | Beta | `info['beta']` from yfinance | Market-observed levered beta | | Cost of debt `kd` | `interest_expense / total_debt`, else 5.5% | Effective rate; fallback to IG spread | | Tax rate | 3-yr median effective rate, floored 15%, capped 30% | Strips out one-offs | | Margin assumptions | 3-yr median of each ratio | Smooths cyclical noise | | SBC treatment | Cash for software/SaaS; non-cash for industrials/CPG | Industry convention | | Peer count | 4-6 | Balances signal vs noise | | Peer multiple | Median (not mean) | Robust to outliers | | Method weights (no SOTP) | DCF 50% / Relative 50% | Equal triangulation | | Method weights (with SOTP) | DCF 40% / Relative 30% / SOTP 30% | SOTP gets weight when applicable | | Sensitivity grid | WACC ±1% in 0.5% steps × g from 1.5-3.5% in 0.5% | 5×5 matrix |

See `references/wacc_erp_rates.md` for current risk-free rates, ERP tables, and sector WACC benchmarks.

---

Step 3: Pull Data

import yfinance as yf
import numpy as np
import pandas as pd

TICKER = "AAPL"  # replace
t = yf.Ticker(TICKER)

info       = t.info
income_a   = t.income_stmt
cashflow_a = t.cashflow
balance_a  = t.balance_sheet
income_q   = t.quarterly_income_stmt
cashflow_q = t.quarterly_cashflow

earnings_est = t.earnings_estimate
revenue_est  = t.revenue_estimate

price       = info.get("currentPrice") or info.get("regularMarketPrice")
market_cap  = info.get("marketCap")
shares_out  = info.get("sharesOutstanding")
total_debt  = info.get("totalDebt") or 0
cash        = info.get("totalCash") or 0
beta        = info.get("beta") or 1.0
sector      = info.get("sector")
industry    = info.get("industry")

Key financial statement rows (yfinance labels):

| Need | Row | |---|---| | Revenue | `Total Revenue` | | EBIT | `Operating Income` | | Net income | `Net Income` | | D&A | `Depreciation And Amortization` (in cashflow) | | CapEx | `Capital Expenditure` (negative) | | ΔNWC | `Change In Working Capital` (cashflow) | | SBC | `Stock Based Compensation` (cashflow) |

---

Step 4: DCF Build

Full methodology + industry-specific tweaks in `references/dcf.md`. Quick skeleton:

# 4a. Revenue growth path — fade from Y1 (consensus or hist CAGR) to terminal g
hist_cag
Read more
Ships withfinance-skills

This project is for educational and informational purposes only. Nothing here constitutes financial advice. Always do your own research and consult a qualified financial advisor before making investment decisions.

Get the whole plugin
Stats
3,137
Stars
366
Forks
Active
Maintenance
JavaScript
Language
MIT
License
4d ago
Last commit
4mo ago
Created

Repo: himself65/finance-skills

Other skills on finance-skills.