You can hover on a data point to learn more information about the position, and zoom using controls in the upper-right.

There has been a lot of talk about the high salaries paid to engineers in Silicon Valley and the San Francisco Bay Area. Why not take a quick look at the amount of money being offered to prospective employees?

AngelList is a social network for startups and startup employees to network professionally. There is also a section where startups can make job postings:

Unusually for job sites, AngelList requires posting compensation information for jobs, with a range of offered salary and equity for the position. (Note: due to their cash-strapped nature, early-stage startups may underpay candidates relative to market/experience).

Using the AngelList API, I scraped all publicly-available full-time jobs located in the San Francisco Bay Area. I retrieved 5,941 jobs total, with half of those for Engineer/Developer positions.

Let’s plot Salary vs. Equity to get a 2D range of the different types compensation (by inferring a coordinate by taking the midpoint of each offered range; e.g. for an $80k—$125k salary offer, we plot Y=$102.5k). We can also control on Engineers vs. Non-Engineers since those salaries will likely be different in distribution.

Putting it all together:

This is the same chart as the interactive one at the beginning of the article; if you haven’t, navigate around that chart, particularly looking at the changes in job titles as you move upward with increasing salary/equity for a given facet.

A few quick observations:

  • The black horizontal lines represent the median salary offered for each facet. For Engineers, the median salary offered is $115k, and for Non-Engineers, the median salary offered is $90k. (as mentioned before, early-stage startups pay lower and are more prominent on AngelList, so these results may be affected by selection bias).
  • Median equity, on the other hand, is negligible and not worth plotting (0.10% for Engineers, 0.02% for Non-Engineers).
  • Speaking of equity, startups do not give much, with the distribution topping out at about 1.0% in both cases. (Engineers appear to get a little more equity, though).
  • However, for serious roles, 7.5% equity (from offering 0%—15% or 5%—10%) is a figure that appears relatively often.

As always, the code used to create the visualizations is available in this Jupyter notebook, and the code used to scrape the AngelList data is open-sourced on GitHub. This post is my first test of using to automatically convert ggplot2 plots into fully-interactive D3.js charts. The results were better than I expected (aside from the font-size issues specific to faceting), so expect to see more interactive charts in my future posts!

If you do find any other interesting trends in the chart and write about it, it would be greatly appreciated if proper attribution is given back to this post and/or myself. Thanks!


Max Woolf (@minimaxir) is a former Apple Software QA Engineer living in San Francisco and a Carnegie Mellon University graduate.

In his spare time, Max uses Python to gather data from public APIs and ggplot2 to plot plenty of pretty charts from that data.

You can learn more about Max here, view his data analysis portfolio here, or view his coding portfolio here.