Cities with Highest (rent-adjusted) Salaries

Mehdi Mujtaba
4 min readJul 17, 2020

--

In the previous article we saw the ridiculousness of the Bay Area rental market:

An implication here could be that renting in the Bay Area just does not make financial sense, and one should move to Seattle. Or Portland. Or Austin.

But it is considered that salaries in Bay Area are also higher to offset higher rental costs, and it may still make sense to live here. So I will analyze each city’s Salary after Rent (Median Yearly Salary-Median Yearly Rent) to see if it makes financial sense to rent there, restricting myself to major cities.

We already have the median 1 BR rents for each city (as of Dec., ’19) from the previous article. All that is needed is finding the corresponding median salaries.

For fair comparison I will focus only on Software Engineer salaries (just plain Software Engineer, not senior, principal etc.). As for the data source, I decided to use an H1B salary database. I know it is accurate. And it shows individual salaries which gives more insight than a lump sum number, as can be obtained from Glassdoor. Also, I am looking at 2019 salaries. Here’s a snapshot of the data source:

I ran a Python script to collect this data for all the cities under consideration (see Appendix) and the results are in.

The 30 cities with highest Salary after Rent are:

Seattle has the highest Salary after Rent so food for thought for Bay Area folks.

San Francisco, despite ~30% of salary going to rent, and reputation as the most expensive rental market in the country, is second. Yearly there is ~$95k left to spend on whatever, or save. There are 5 other California cities (including 2 Bay Area ones) in the list.

Conclusion is that Bay Area (and California at large) is not a bad place at all while renting. Not as good as Seattle but still pretty good. Buying is a whole different story, however, and a story for another day…

Moving to other states, Texas is well represented with 8 cities and lives up to its reputation. North Carolina with 3 is the surprise package. Someone’s doing something right in that state.

We are doing this analysis to suggest best places to rent but there are obviously some caveats here:

  • We are comparing salary and rent for a given city but people don’t need to live in same city they work. You can work in San Francisco and live in Sacramento and enjoy a high salary with low rent (but the commute will kill you)
  • A person may be making higher salary than median or paying lower rent or both
  • The salary here is pre-tax. Ideally we should look at post-tax salary. SF’s salary may not be as attractive as it looks after tax
  • There are costs of living other than rent which we are not considering
  • Ideally we should look at software engineer salary for same company in different cities, like Google for SF, Seattle, Austin etc. but we are doing a more general analysis. Interestingly if we restrict ourselves to Google, all cities are pretty close and SF comes out looking pretty good:
  • Cost is not the only factor which determines choice of city. Personally for me, I stay because moving is not easy, Bay Area has best year-round weather, best road trips, abundant tennis courts and volleyball groups and host of other professional/personal/social reasons

Appendix:

from selenium import webdriver
import bs4
options = webdriver.ChromeOptions()
options.add_argument(‘headless’)
top_metros=[‘San Francisco’,’New York’,’Oakland’,’San Jose’,’Boston’,’Los Angeles’,’Washington’,’Miami’,’Seattle’,’San Diego’,’Anaheim’,’Fort Lauderdale’,’Santa Ana’,’Denver’,’Scottsdale’,’Honolulu’,’Long Beach’,’Portland’,’Atlanta’,’Chicago’,’Minneapolis’,’Providence’,’Philadelphia’,’New Orleans’,’Tampa’,’Nashville’,’Sacramento’,’Baltimore’,’Charlotte’,’Orlando’,’Austin’,’Dallas’,’Salt Lake City’,’Plano’,’Chandler’,’Fort Worth’,’Pittsburgh’,’Houston’,’Durham’,’Gilbert’,’Colorado Springs’,’Henderson’,’Jacksonville’,’Irving’,’Reno’,’Aurora’,’Norfolk’,’Raleigh’,’Richmond’,’Phoenix’,’Chesapeake’,’Boise’,’Virginia Beach’,’Las Vegas’,’Glendale’,’Cleveland’,’Madison’,’Milwaukee’,’Newark’,’Mesa’,’Baton Rouge’,’Anchorage’,’San Antonio’,’Kansas City’,’Louisville’,’Columbus’,’Arlington’,’Rochester’,’Des Moines’,’Corpus Christi’,’Lincoln’,’Buffalo’,’Cincinnati’,’Fresno’,’Laredo’,’Omaha’,’Indianapolis’,’Memphis’,’Tulsa’,’Syracuse’,’Albuquerque’,’Oklahoma City’,’Spokane’,’Lexington’,’Greensboro’,’Tucson’,’Wichita’,’El Paso’,’Lubbock’,’Shreveport’,’Akron’]##separating compound city name by + to use in URL e.g. San Francisco to San+Francisco
top_metro_split=[]
for i in range(0,len(top_metros)):
top_metro_split_array=top_metros[i].split()
if(len(top_metro_split_array)==2):
top_metro_split.append(top_metro_split_array[0]+’+’+top_metro_split_array[1])
elif(len(top_metro_split_array)==3):
top_metro_split.append(top_metro_split_array[0]+’+’+top_metro_split_array[1]+’+’+top_metro_split_array[2])
else:
top_metro_split.append(top_metros[i])
for i in range(0,len(top_metro_split)):
driver = webdriver.Chrome()
url=’
https://h1bdata.info/index.php?em=&job=Software+Engineer&city=' + top_metro_split[i] +’&year=2019'
driver.get(url)
innerHTML = driver.execute_script(“return document.body.innerHTML”)
soup = bs4.BeautifulSoup(innerHTML)
x=soup.select(‘span[class=”help-block”]’)
print(top_metros[i],’:’,x[0].getText())
driver.close()

--

--

No responses yet