[size=5]Earnings Update:[/size]
OPAD has scheduled earnings for February 23rd, AMC, at 5:00pm ET.
OPEN has scheduled earnings for February 24th, AMC, at 5:00pm ET.
[size=5]Data Updates[/size]
ibuyerstats.com is no longer updating as of 12/31/2021, but that gives a picture of the entire quarter, at least.
For OPEN, I started pulling some data, similar to what I did last time. Per ibuyerstats.com (and in terms of the number of for sale listings in a state), Texas is one of Opendoor’s largest areas it operates in, followed by Georgia, and Arizona. California, Florida, and North Carolina have a similar number of for sale listings. For those interested, the .csv of Tarrant County (Texas, includes Dallas and Fort Worth areas) data is attached.
sales_data_tarrant.csv (241.2 KB)
[size=4]Charts from ibuyerstats:[/size]
[size=3]Number of Homes for Sale by Day[/size]
[size=3]For Sale listings by State[/size]
[size=3]Number of listings added, by day[/size]
[size=3]Number of listings removed, by day[/size]
this may be correlated with sales
[size=3]Total value of all homes in inventory, by day[/size]
[size=3]Gross profit margin by home price[/size]
Just OPEN:
same chart but with everyone:
[size=3]Average price of homes, by day[/size]
[size=3]Gross Margin[/size]
(Z = 2.8, OPEN = 6.3, OPAD = 20.9)
Note: I think ibuyerstats provided some decent info for general trends, but I think there was definitely some issue with data quality, which was probably why they stopped updating. I had been emailing them about it, because I was having issues with the data they provided, as propertyId’s weren’t matching and it was not possible to match up transactions accurately (manually looking up some transactions also resulted in slightly different results)
I’m mostly going to focus on OPEN, since I’m more familiar with them, but if I have time in the future, I will try and get into OPAD as well.
[size=5]Results[/size]
Pivot Table of Results For Tarrant County:
![image](https://forums.ascendedtrading.com/uploads/default/original/2X/9/9bb89d9866fc657cfb8be87595b594faa0a48591.png)
Compared to Q3, OPEN has more than doubled their sale transactions in Tarrant County. Buy transactions are down about 40% compared to Q3. Looking ahead to Q1, buy transactions look like they are remaining steady from December, but OPEN has sold the most houses in January compared to any month in Q3 or Q4.
Regarding the table column “Buy/Sale on Same Prop”, I determine if the buy and sale transaction is on the same property based on the legal description. If OPEN is listed as the grantor and grantee and two separate transactions with the same legal description, it is assumed that the property and been bought and sold. For these transactions, I take average the amount of time between the recorded dates to get the average time to unload. Of course, there are properties that they may be selling that are older than the data I’ve collected, which may skew the avg unload time results.
[size=4]Discussion on Results[/size]
I should preface this by saying that this is only 1 county out of the many OPEN operates in, so it may not necessarily be applicable to their overall operations this past quarter, and unfortunately I don’t have any monetary details associated with these transactions at the moment. I like that OPEN has had a huge increase in sales transactions though, while also slowing down on their buying a bit. I think the market was concerned with the large inventory OPEN was carrying, so working to start pushing that down (and being successful at it) I think is a good sign. I need to take a better look through OPEN’s financial statements and reports to see how they are recognizing revenue. If they are recognizing all revenue on sales (rather than recognizing the fee from the buyer as revenue, when buying the property), and this trend is similar to what is happening in OPEN’s other markets, I think it is very possible they could be profitable this quarter.
Edit: revenue is recognized on sale of property, per their 10-Q. If OPEN has been able to accomplish similar sales across its markets/inventory, their revenue could be near 4.5B for Q4 (they estimated 3.1-3.2B). ibuyerstats estimated OPEN’s gross margin as 6.3% based on the last 100 transactions, but keep in mind this does not include the fee OPEN charges the seller (approximately 7%). So gross profits, factoring in that fee and based on revenue near 4.5B, could be close to $602M. If we use OPEN’s 8.9% gross margin from last quarter, that would be closer to $405M gross profit. Regardless, OPEN has been keeping a tight control of operating expenses the last few quarters, with operating expenses trending downward the last three quarters, from $342M Q1 '21, $311M Q2 '21, and $271M Q3 '21.
So, if we can confirm that other markets are seeing a similar sales trend as Tarrant County, and OPEN isn’t getting hosed on its margins, Opendoor may be profitable this quarter, which would be huge for the earnings call.
[size=4]Future Work[/size]
I hope to try and find some other counties I can scrape for data where OPEN operates. Will try and do this for OPAD too, if I have time. If anyone wants to help with the data collection aspect (finding sites to scrape or writing scripts to scrape the sites) that would be awesome.
[size=5]References/Code[/size]
For reference, I’ve attached the relevant main.py code for the script I used to scrape Tarrant County’s land records. I also attached a utility file I used for starting up selenium:
Code for Scraping Tarrant County Land Records
selenium_utils.py (7.7 KB)
import requests
import pandas as pd
import json
from furl import furl
from pandas import json_normalize
import lxml
import html5lib
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from utils.selenium_utils import (
enable_headless,
options,
get_cookies,
save_screenshot,
selenium_initialization,
create_driver,
wait_for_element_by_xpath
)
def tarrant_county():
SEARCH_URL = "https://tarrant.tx.publicsearch.us/results?department=RP&limit=250&offset={offset}&parties=%7B%22parties%22%3A%5B%7B%22term%22%3A%22opendoor%22%2C%22types%22%3A%5B%22grantor%22%2C%22grantee%22%5D%7D%5D%7D&recordedDateRange=20210701%2C20220124&searchType=advancedSearch"
selenium_initialization(options=options)
d = create_driver(options)
d.get(url=SEARCH_URL.format(offset=0))
sales_df = None
try:
for idx in range(8):
f = furl(SEARCH_URL.format(offset=idx*250))
d.get(url=f.url)
print(f"Page {idx+1}")
wait_for_element_by_xpath(d, "//div[@id='a11y-status-message']")
deeds_data = pd.read_html(d.page_source)
print(deeds_data)
print(deeds_data[0])
new_data = deeds_data[0]
if sales_df is None:
sales_df = new_data
else:
sales_df = sales_df.append(new_data)
except Exception as e:
print(e)
pass
file_name = "sales_data_tarrant.csv"
with open(file_name, "w") as f:
sales_df.to_csv(f)
if __name__ == '__main__':
tarrant_county()