Stakeholders
startup_valuation.stakeholders
¶
Stakeholder-specific valuation methods.
Chapter 13: Valuation for Different Stakeholders
Classes¶
Functions¶
single_round_dilution(ownership_before, investment, post_money)
¶
Calculate founder ownership after a single funding round.
Formula: Ownership After = Ownership Before × (1 - Investment / Post-Money)
Example
result = single_round_dilution(1.0, 5_000_000, 20_000_000) result.value 0.75
Source code in src/startup_valuation/stakeholders.py
multi_round_dilution(initial_ownership, investments, post_money_vals)
¶
Calculate founder ownership after multiple funding rounds.
Formula: Ownership After n Rounds = Π(1 - Investmentᵢ / Post-Moneyᵢ)
Example
result = multi_round_dilution(1.0, [2M, 5M, 10M, 20M], [10M, 25M, 60M, 150M])
After 4 rounds: ~36%¶
Source code in src/startup_valuation/stakeholders.py
acquisition_value(standalone_value, revenue_synergies, cost_synergies, integration_costs, prob_revenue=0.4, prob_cost=0.8)
¶
Calculate acquisition value with risk-adjusted synergies.
Formula: Acquisition V = Standalone V + PV(Revenue Syn × P_rev + Cost Syn × P_cost) - Integration Costs
Example
result = acquisition_value(100_000_000, 20_000_000, 15_000_000, 10_000_000, 0.4, 0.8) result.value 120000000.0
Source code in src/startup_valuation/stakeholders.py
opm_common_stock(enterprise_value, liquidation_preference, time_to_exit, volatility, risk_free_rate=0.04)
¶
Value common stock using Option Pricing Method (OPM).
Formula: C = V × N(d₁) - K × e^(-rT) × N(d₂)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
enterprise_value
|
float
|
Total enterprise value (V). |
required |
liquidation_preference
|
float
|
Liquidation preference (K). |
required |
time_to_exit
|
float
|
Expected time to exit in years (T). |
required |
volatility
|
float
|
Volatility of enterprise value (σ). |
required |
risk_free_rate
|
float
|
Risk-free rate (r). |
0.04
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with common stock value. |
Example
result = opm_common_stock(100_000_000, 40_000_000, 3, 0.60) round(result.value / 1_000_000, 0) 65000000.0
Source code in src/startup_valuation/stakeholders.py
pwerm(scenarios)
¶
Calculate common stock value using PWERM.
Formula: Expected Common V = Σ pᵢ × CommonValueᵢ
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scenarios
|
list[dict[str, float]]
|
List of dicts with 'probability' and 'common_value'. |
required |
Example
scenarios = [ ... {"probability": 0.20, "common_value": 92_000_000}, ... {"probability": 0.50, "common_value": 55_000_000}, ... {"probability": 0.20, "common_value": 4_000_000}, ... {"probability": 0.10, "common_value": 0}, ... ] result = pwerm(scenarios) round(result.value / 1_000_000, 1) 46.7
Source code in src/startup_valuation/stakeholders.py
common_stock_discount(preferred_value, common_value)
¶
Calculate common stock discount.
Formula: Discount = (Preferred V - Common V) / Preferred V
Example
result = common_stock_discount(100_000_000, 65_000_000) result.value 0.35
Source code in src/startup_valuation/stakeholders.py
liquidation_value(assets, recovery_rates)
¶
Calculate liquidation value.
Formula: Liquidation V = Σ(Asset Value × Recovery Rate)
Example
assets = {"cash": 5_000_000, "ar": 3_000_000, "equipment": 2_000_000} rates = {"cash": 1.0, "ar": 0.80, "equipment": 0.30} result = liquidation_value(assets, rates) result.value 8000000.0
Source code in src/startup_valuation/stakeholders.py
venture_debt_dilution(warrant_coverage, loan_amount, post_money)
¶
Calculate venture debt warrant dilution.
Formula: Warrant Dilution = Warrant Coverage × Loan Amount / Post-Money
Example
result = venture_debt_dilution(0.10, 3_000_000, 40_000_000) result.value 0.0075
Source code in src/startup_valuation/stakeholders.py
risk_adjusted_synergy(revenue_synergies, cost_synergies, prob_revenue=0.4, prob_cost=0.8, discount_rate=0.1, years=3)
¶
Calculate risk-adjusted synergy value.
Formula: PV = Σ[Rev_Syn × P_rev + Cost_Syn × P_cost] / (1+r)^t
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
revenue_synergies
|
float
|
Annual revenue synergies. |
required |
cost_synergies
|
float
|
Annual cost synergies. |
required |
prob_revenue
|
float
|
Probability of achieving revenue synergies. |
0.4
|
prob_cost
|
float
|
Probability of achieving cost synergies. |
0.8
|
discount_rate
|
float
|
Discount rate. |
0.1
|
years
|
int
|
Years to realize synergies. |
3
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with risk-adjusted synergy value. |
Example
result = risk_adjusted_synergy(20_000_000, 15_000_000, 0.4, 0.8, 0.10, 3) round(result.value / 1_000_000, 1) 49.7
Source code in src/startup_valuation/stakeholders.py
intrinsic_option_value(strike_price, fair_market_value, shares)
¶
Calculate intrinsic value of equity options.
Formula: Intrinsic Value = max(FMV - Strike, 0) × Shares
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
strike_price
|
float
|
Option strike price per share. |
required |
fair_market_value
|
float
|
Current fair market value per share. |
required |
shares
|
int
|
Number of option shares. |
required |
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with intrinsic option value. |
Example
result = intrinsic_option_value(1.0, 5.0, 100_000) result.value 400000.0
Source code in src/startup_valuation/stakeholders.py
probability_weighted_employee_value(scenarios)
¶
Calculate employee option value using probability-weighted scenarios.
Formula: E[V] = Σ pᵢ × OptionValueᵢ
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
scenarios
|
list[dict[str, float]]
|
List of dicts with 'probability', 'fmv', 'strike', 'shares'. |
required |
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with expected employee option value. |
Example
scenarios = [ ... {"probability": 0.20, "fmv": 10.0, "strike": 1.0, "shares": 50000}, ... {"probability": 0.50, "fmv": 5.0, "strike": 1.0, "shares": 50000}, ... {"probability": 0.30, "fmv": 1.0, "strike": 1.0, "shares": 50000}, ... ] result = probability_weighted_employee_value(scenarios) result.value 225000.0
Source code in src/startup_valuation/stakeholders.py
vesting_adjusted_value(total_value, vested_fraction, annual_vest_rate=0.25, retention_prob=0.8, years_remaining=3)
¶
Calculate option value adjusted for vesting schedule.
Formula: Adjusted V = V_vested + Σ[V_unvested × VestRate × Retention^t] / (1+r)^t
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
total_value
|
float
|
Total option value (intrinsic). |
required |
vested_fraction
|
float
|
Fraction already vested (0-1). |
required |
annual_vest_rate
|
float
|
Annual vesting rate (typically 0.25 for 4-year). |
0.25
|
retention_prob
|
float
|
Annual probability of staying employed. |
0.8
|
years_remaining
|
int
|
Years of unvested options remaining. |
3
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with vesting-adjusted value. |
Example
result = vesting_adjusted_value(400_000, 0.25, 0.25, 0.8, 3) round(result.value / 1000, 0) 238.0
Source code in src/startup_valuation/stakeholders.py
cash_equity_breakeven(salary_reduction, equity_value, tax_rate=0.3, discount_rate=0.2, years=4)
¶
Calculate breakeven for cash vs equity tradeoff.
Formula: After-Tax Salary Loss = Salary_Reduction × (1 - TaxRate) Breakeven if: Equity_Value / (1+r)^n > After-Tax Loss × n
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
salary_reduction
|
float
|
Annual salary reduction for equity. |
required |
equity_value
|
float
|
Estimated equity value at exit. |
required |
tax_rate
|
float
|
Marginal tax rate. |
0.3
|
discount_rate
|
float
|
Discount rate for equity risk. |
0.2
|
years
|
int
|
Years to exit. |
4
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with net benefit (positive = equity is better). |
Example
result = cash_equity_breakeven(50_000, 500_000, 0.30, 0.20, 4) round(result.value / 1000, 0) 100.0
Source code in src/startup_valuation/stakeholders.py
max_asset_based_loan(cash=0, accounts_receivable=0, inventory=0, equipment=0, real_estate=0)
¶
Calculate maximum asset-based loan amount.
Formula: Max Loan = Cash×100% + AR×85% + Inventory×50% + Equipment×60% + RE×75%
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cash
|
float
|
Cash and equivalents. |
0
|
accounts_receivable
|
float
|
Accounts receivable. |
0
|
inventory
|
float
|
Inventory value. |
0
|
equipment
|
float
|
Equipment value. |
0
|
real_estate
|
float
|
Real estate value. |
0
|
Returns:
| Type | Description |
|---|---|
ValuationResult
|
ValuationResult with maximum loan amount. |
Example
result = max_asset_based_loan(1_000_000, 2_000_000, 500_000, 3_000_000) result.value 5500000.0