“I’m sorry sir, we can’t give you a rent quote that far in advance. All apartments here go off daily pricing.”
When I heard that line over the phone, I knew finding an apartment here could turn into a huge headache. I will be moving to Charlotte NC after graduation, and am trying to find a suitable apartment for the next year or two. By far the biggest obstacle to a painless search is this daily pricing model, followed by all apartments in Charlotte.
What is daily pricing?
Let’s say today is January 1. I would like to sign a 12-month lease starting June 1, and in normal circumstances, I can get a quote for that lease and mull over my decision for a week or two.
However, under daily pricing, the price of that lease changes every day until the lease is signed (after the lease is signed, the monthly payment is fixed for each month). The main effects of this are:
- Lease rates will adjust to market supply and demand, peaking when a lot of people are trying to move in at the same time.
- Apartments can only give quotes for leases that begin less than 2 months from today. Using my example, the earliest I could sign a lease beginning June 1 would be 2 months prior, on April 1.
The first bullet point is a problem, since a lot of recent college grads will be trying to secure a lease in Charlotte (starting new jobs) at the same time as me. The second bullet point is a nuisance, since I like to get things done ahead of time. I will have no choice but to wait for the 2 month window.
So I asked myself, “wouldn’t it be great if I could do the following 2 things?”
- Each day, get a table of all the available apartments in Charlotte, with the current rents.
- Track changes in rent levels across time, so that I can secure a lease before prices start rising too dramatically. By “rent levels” I mean the lowest rent available at each apartment complex.
The Solution: Build a Web Scraper!
I’ve written a Python script to scrape the websites of a handful of apartment complexes. It records the current rents for all available 2 Bed / 2 Bath units, since I am only interested in those units (I will be splitting rent with a college buddy). When scraping rent levels, the script uses the default lease length for each website (usually 12 months).
Special thanks to Sunny Huang for guiding me through some technical difficulties during this project!