Stakeholders Module¶
??? example "single_round_dilution"
from startup_valuation.stakeholders import single_round_dilution
result = single_round_dilution(
ownership_before=1.0, investment=5_000_000, post_money=50_000_000,
)
print(f"Ownership after: {result.value:.0%}") # 90%
??? example "multi_round_dilution"
from startup_valuation.stakeholders import multi_round_dilution
rounds = [
{"investment": 2_000_000, "post_money": 20_000_000},
{"investment": 5_000_000, "post_money": 50_000_000},
{"investment": 10_000_000, "post_money": 100_000_000},
]
result = multi_round_dilution(ownership_before=1.0, rounds=rounds)
print(f"Final ownership: {result.value:.0%}") # 76.5%
??? example "acquisition_value"
from startup_valuation.stakeholders import acquisition_value
result = acquisition_value(
standalone_value=100_000_000, synergies=30_000_000,
integration_costs=5_000_000,
)
print(f"Acquisition value: ${result.value:,.0f}") # $125,000,000
??? example "opm_common_stock"
from startup_valuation.stakeholders import opm_common_stock
result = opm_common_stock(
enterprise_value=100_000_000, liquidation_preference=50_000_000,
time_to_exit=5.0, volatility=0.40, risk_free_rate=0.04,
)
print(f"Common stock value: ${result.value:,.0f}")
??? example "pwerm"
from startup_valuation.stakeholders import pwerm
scenarios = [
{"probability": 0.20, "common_value": 80_000_000},
{"probability": 0.60, "common_value": 40_000_000},
{"probability": 0.20, "common_value": 0},
]
result = pwerm(scenarios)
print(f"PWERM value: ${result.value:,.0f}") # $40,000,000
??? example "liquidation_value"
from startup_valuation.stakeholders import liquidation_value
assets = {"cash": 5_000_000, "ar": 10_000_000, "inventory": 8_000_000}
recovery_rates = {"cash": 1.0, "ar": 0.80, "inventory": 0.40}
result = liquidation_value(assets, recovery_rates)
print(f"Liquidation: ${result.value:,.0f}") # $16,200,000
??? example "risk_adjusted_synergy"
from startup_valuation.stakeholders import risk_adjusted_synergy
result = risk_adjusted_synergy(
revenue_synergies=20_000_000, cost_synergies=10_000_000,
prob_revenue=0.40, prob_cost=0.80, discount_rate=0.10, years=3,
)
print(f"Risk-adjusted synergy: ${result.value:,.0f}")
??? example "intrinsic_option_value"
from startup_valuation.stakeholders import intrinsic_option_value
result = intrinsic_option_value(
strike_price=10, fair_market_value=25, shares=100_000,
)
print(f"Intrinsic value: ${result.value:,.0f}") # $1,500,000
??? example "probability_weighted_employee_value"
from startup_valuation.stakeholders import probability_weighted_employee_value
scenarios = [
{"probability": 0.10, "value_per_share": 50},
{"probability": 0.60, "value_per_share": 20},
{"probability": 0.30, "value_per_share": 0},
]
result = probability_weighted_employee_value(scenarios, shares=10_000)
print(f"Expected value: ${result.value:,.0f}") # $170,000
??? example "vesting_adjusted_value"
from startup_valuation.stakeholders import vesting_adjusted_value
result = vesting_adjusted_value(
total_value=1_000_000, vested_fraction=0.25,
annual_vest_rate=0.25, retention_prob=0.80, years_remaining=3,
)
print(f"Vesting-adjusted: ${result.value:,.0f}")
??? example "cash_equity_breakeven"
from startup_valuation.stakeholders import cash_equity_breakeven
result = cash_equity_breakeven(
salary_reduction=50_000, equity_value=500_000,
tax_rate=0.30, discount_rate=0.20, years=4,
)
print(f"Breakeven equity: {result.value:.0%}")
??? example "max_asset_based_loan"
from startup_valuation.stakeholders import max_asset_based_loan
result = max_asset_based_loan(
cash=5_000_000, accounts_receivable=10_000_000,
inventory=8_000_000, equipment=20_000_000, real_estate=50_000_000,
)
print(f"Max loan: ${result.value:,.0f}")
??? example "venture_debt_dilution"
from startup_valuation.stakeholders import venture_debt_dilution
result = venture_debt_dilution(
loan_amount=5_000_000, warrant_coverage=0.20, post_money=50_000_000,
)
print(f"Dilution: {result.value:.2%}") # 2.00%
??? example "common_stock_discount"
from startup_valuation.stakeholders import common_stock_discount
result = common_stock_discount(
enterprise_value=100_000_000, liquidation_preference=50_000_000,
time_to_exit=5.0, volatility=0.40, risk_free_rate=0.04,
)
print(f"Common discount: {result.value:.0%}")
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]
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) 246.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