Introduction to the Cap Table
Capitalization Table¶
The capitalization table, often called the cap table, tracks ownership in a startup. During rounds of financing, it will get updated to reflect what new ownership has been allocated. We will work through a few examples and create ways to track historical owernship, measure dilution of shares, and see how the valuation evolves over time.
The Cap Table at Inception¶
When a company is first created, the shares can be allocated however the founders want to. For example, if the founders have fronted the cost of the startup, they may allocate shares to themselves as well as an allocation to be given to employees to incentivize them. Let’s say that the two founders, Michael and Sean, decide to each take 1500 shares and then reserve 1000 shares to be given to employees.
import pandas as pd
cap_table = pd.DataFrame([['Michael', 1500],
['Sean', 1500],
['Employees', 1000]], columns = ['Investor', 'Shares'])
print(cap_table)
The owernship in the company for each party equals the number of shares divided by the total number of shares outstanding. We can add that column easily.
cap_table['% Ownership'] = cap_table['Shares'] / cap_table['Shares'].sum()
print(cap_table)
Before we receive any funding, we can't know what the value of the company is. So until we are able to give a price per share, we can use a null value for the share price and value.
import numpy as np
cap_table['Price'] = np.NaN
cap_table['Value'] = np.NaN
print(cap_table)
The First Valuation¶
The first time we will know a price to give to the shares is once money is raised. If investors put forward I amount of money, for a stake of S in the company, than the valuation of the company should be I/S.
$ V_{POST} = \frac{I}{S}$
where
$ V_{POST} = \text{Post-money Valuation}$
$ I = \text{The amount of investment}$
$ S = \text{The ownership stake for investors}$
For example, if $100,000 is given for a 20% stake in a company, we can calculate what the valuation of the company is implied to be.
investment = 100000
stake = .2
post_money_valuation = investment / stake
print(post_money_valuation)
Pre-Money Valuation¶
If we have the valuation after the money has been invested, we can find what the implied valuation without the investment would be based on simply subtracting it out.
$ V_{PRE} = V_{POST} - I $
where
$ V_{PRE} = \text{Pre-money Valuation}$
$ V_{POST} = \text{Post-money Valuation}$
$ I = \text{The amount of investment}$
Using our example from before, the valuation for the company prior to receiving the new capital would be $400,000.
pre_money_valuation = post_money_valuation - investment
print(pre_money_valuation)
The other way that we could work through fund raising is when investors come to the pre-money valuation first and then decide on the shares they want to purchase. In this case, if we have the pre-money valuation and the investment that the investor wants to put in we can find the share they will own as:
$ S = \frac{I}{V_{PRE} + I}$
where
$ V_{PRE} = \text{Pre-money Valuation}$
$ I = \text{The amount of investment}$
$ S = \text{The ownership stake for investors}$
#Find the share
pre_money_valuation = 400000
I = 100000
S = I / (pre_money_valuation + I)
print(S)