Computing Share price
Share Price¶
Using the cap table, prior to counting the investment, we could back out what the share price must be given the pre-money valuation and shares outstanding.
$ V_{PRE} = S * P $
where
$ V_{PRE} = \text{Pre-money Valuation}$
$ S = \text{Number of shares prior to new investors}$
$ P = \text{Price of shares}$
#Find the total number of shares
total_shares = cap_table['Shares'].sum()
#Calculate the implied share price
share_price = pre_money_valuation / total_shares
print(share_price)
#Now we could calculate the value of shares pre-money
cap_table['Price'] = share_price
cap_table['Value'] = share_price * cap_table['Shares']
print(cap_table)
New Shares¶
To calculate the number of new shares that will be created and given to investors is simple. It is the investment divided by the implied share price.
$ S_{NEW} = \frac{I}{P} $
where
$ S_{NEW} = \text{The number of newly created shares} $
$ I = \text{The amount of investment}$
$ P = \text{Price of shares}$
#Calculate new shares
new_shares = investment / share_price
print(new_shares)
#Add in the newly created shares to the cap table
cap_table.loc[3] = ['XYZ Capital', new_shares, np.NaN, share_price, np.NaN]
print(cap_table)
#Recalculate the % ownership and values
cap_table['% Ownership'] = cap_table['Shares'] / cap_table['Shares'].sum()
cap_table['Price'] = share_price
cap_table['Value'] = share_price * cap_table['Shares']
print(cap_table)
You will notice already that the owernships of all other parties have been diluted. This naturally happens as more investment in the company is added.
Second Round of Investment¶
What if a new investor comes along and wants a 20% stake as well, but is willing to pay double and invest $200,000 in? Calculating the post-money valuation, we see that the valuation of the company has doubled!
investment = 200000
stake = .2
post_money_valuation = investment / stake
print(post_money_valuation)
The pre-money valuation has also grown! Prior to this investment, the value was \$500,000 distributed between the founders, employees and XYZ capital. Now, the pre-money valuation is \\$800,000 meaning the company created $300,000 worth of value between the two rounds of financing!
#Calculate the pre-money valuation
pre_money_valuation = post_money_valuation - investment
print(pre_money_valuation)
Equivalently, the investor might have come in and said they believed the company was worth 800K and wanted to get a 20%, we can calculate it by re-arranging some of the terms.
$ S = \frac{I}{V_{PRE} + I}$
$ S*(V_{PRE} + I) = I$
$ S*V_{PRE} = (1-S)*I$
$ I = \frac{S*V_{PRE}}{1-S}$
where
$ V_{PRE} = \text{Pre-money Valuation}$
$ I = \text{The amount of investment}$
$ S = \text{The ownership stake for investors}$
#Confirm the investment amount comes out to the same thing
pre_money_valuation = 800000
s = .2
I = (s * pre_money_valuation)/(1-s)
print(I)
#Find the share price
total_shares = cap_table['Shares'].sum()
share_price = pre_money_valuation / total_shares
print(share_price)
Notice in both the case of the valuation and the share price, the implied growth between the rounds of financing for all parties was 60%.
print(share_price/100-1)
print(pre_money_valuation/500000-1)
#Once again figure out how many new shares are created
new_shares = investment / share_price
print(new_shares)
#Update the cap table
cap_table.loc[4] = ['ABC Capital', new_shares, np.NaN, share_price, np.NaN]
cap_table['Price'] = share_price
cap_table['% Ownership'] = cap_table['Shares'] / cap_table['Shares'].sum()
cap_table['Value'] = cap_table['Shares'] * cap_table['Price']
print(cap_table)
While all other parties have been diluted, the value of their investments has actually grown. The amount of dilution can be found by considering that if a x% stake is sold to investors, then (1-x)% of each investors stake must be diluted to support it. For investors who are not getting new owernship, we can calculated their diluted ownership like so:
$ O_{POST} = O_{PRE} * (1- S) $
where
$O_{POST} = \text{Ownerhsip Percent after Latest Round}$
$O_{PRE} = \text{Ownerhsip Percent prior to Latest Round}$
$S = \text{The stake being sold to new investors}$
For example, XYZ Capital had a 20% stake before, but after has a 16% stake.
print(.2 * (1-.2))
We can finally confirm that the post-money valuation matches the total value in the cap table after including the new investor.
print(cap_table['Value'].sum())