Who lives at Parkside at Round Rock? Show median household income and its 12-month change with the metro percentile, the income distribution, rent-to-income ratio, household age, and mobility score. Can these residents absorb the rent level the sponsor is underwriting, or is the problem somewhere else?
Pulling the subject's tenant, rent, and financial data alongside the submarket benchmark.
mkdir -p analysis && cat > analysis/parkside_tenant_capacity.py <<'EOF'
import numpy as np
edges=[0,10e3,15e3,25e3,35e3,50e3,75e3,100e3,150e3,200e3,350e3,500e3,750e3]
subj=[0,0,0,0,0,.202247,.382022,.146067,.134831,.134831,0,0]
sub=[0,0,.000054,.004938,.024313,.139250,.164341,.250429,.054557,.175236,.146576,.040307]
def pct(sh,p):
sh=np.array(sh)/sum(sh); c=0
for i,s in enumerate(sh):
if c+s>=p and s>0: return edges[i]+(p-c)/s*(edges[i+1]-edges[i])
c+=s
print("Income percentiles (bracket-interpolated):")
for name,d in [("Subject",subj),("Submarket",sub)]:
print(f" {name}: P25 ${pct(d,.25):,.0f} P50 ${pct(d,.5):,.0f} P75 ${pct(d,.75):,.0f} share<$75K {sum(d[:6])*100:.1f}% share<$100K {sum(d[:7])*100:.1f}%")
rep_med_subj=119046; rep_med_sub=156894
print(f"Reported median subject ${rep_med_subj:,} vs submarket ${rep_med_sub:,}: {(rep_med_subj/rep_med_sub-1)*100:.1f}%")
b50=pct(subj,.5)
print(f"Bracket-implied subject median vs submarket reported: {(b50/rep_med_sub-1)*100:.1f}%")
ip_avg=1275.08; ip_med=1208; ask_avg=1318.58; sub_ip_avg=1445.50
print("\nRent-to-income (annual rent / income):")
for lbl,inc in [("reported median $119,046",rep_med_subj),(f"bracket median ${b50:,.0f}",b50),("P25 (bracket)",pct(subj,.25)),("$62.5K (mid of bottom bracket)",62500),("$50K (floor)",50000)]:
print(f" {lbl}: in-place avg {ip_avg*12/inc*100:.1f}% | asking avg {ask_avg*12/inc*100:.1f}%")
print(f" Submarket: in-place avg ${sub_ip_avg} / median ${rep_med_sub:,} = {sub_ip_avg*12/rep_med_sub*100:.1f}%")
print("\nRent at 30% of income (monthly):")
for lbl,inc in [("reported median",rep_med_subj),("bracket median",b50),("P25",pct(subj,.25)),("$62.5K",62500),("$50K",50000)]:
print(f" {lbl}: ${inc*.30/12:,.0f} headroom vs in-place avg {(inc*.30/12/ip_avg-1)*100:.0f}%")
# unit-type rent at bottom cohort
for bt,r in [("Studio",1021.85),("1BR",1190.75),("2BR",1576.71),("3BR",2311.00)]:
print(f" {bt} in-place ${r:,.0f}: RTI at $62.5K {r*12/62500*100:.1f}%, at bracket median {r*12/b50*100:.1f}%")
print("\nPricing vs submarket:")
print(f" Asking avg: ${ask_avg} vs ${1507.18} -> {(ask_avg/1507.18-1)*100:.1f}%")
print(f" Asking $/sf median: 1.72 vs 1.56 -> {(1.72/1.56-1)*100:.1f}%")
print(f" In-place $/sf avg: 1.59 vs 1.56 -> {(1.59/1.56-1)*100:.1f}%")
for bt,a,s in [("0BR",1165.40,1205.80),("1BR",1245.37,1275.51),("2BR",1592.60,1663.09),("3BR",2691.00,1960.12)]:
print(f" {bt} asking ${a:,.0f} vs ${s:,.0f}: {(a/s-1)*100:+.1f}%")
for bt,a,s in [("3BR in-place",2311.00,1931.91)]:
print(f" {bt} ${a:,.0f} vs ${s:,.0f}: {(a/s-1)*100:+.1f}%")
print("\nOperations:")
print(f" Occupancy 12mo ago 99.77% -> now 93.52%: {(0.9352-0.9977)*100:.1f} pts")
print(f" Unleased 38 / 432 units = {38/432*100:.1f}%")
print(f" Retention 67.4% vs submarket 63.1%: {(0.6736-0.631)*100:+.1f} pts")
print(f" DOM 99 vs 66: {(99/66-1)*100:+.0f}%")
print(f" Leases signed 13 in 30d vs 38 unleased -> months to clear {38/13:.1f}")
print(f" NOI $3,086,585 / 2021 price $77.5M = {3086585.35/77.5e6*100:.2f}% yield on 2021 basis")
print(f" Tax share of opex: {1439420.8/4128835.65*100:.1f}%")
EOF
python3 analysis/parkside_tenant_capacity.pyParkside's renters can afford today's rents with plenty of room to spare. The weak spot is leasing: the property is losing occupancy and cutting rents in a submarket that is adding a lot of supply. I don't have the sponsor's underwritten rent, so I can't test that exact number. What the data shows is that rent affordability doesn't limit the deal except on the 3-bedrooms.
Parkside is a 432-unit, 5-story building built in 2019 with small units averaging 829 sf . Its renters are mostly young, single, middle-income professionals.
| Metric | Parkside | Round Rock–East submarket | Read |
|---|---|---|---|
| Median household income | $119,046, 77th percentile in the Austin metro | $156,894 | 24.1% lower |
| Income change | +5.6% over 6 months, 88th metro percentile for growth | +8.4% over 12 months, 70th metro percentile | Growing faster than the metro |
| Rent-to-income | 12.2% | 11.1% (my calculation) | Very affordable: 7th percentile in the metro, where lower means more affordable |
| Head-of-household age | 34 | 36.2 | Younger |
| Single | 79.8% | 40.2% | Far more singles |
| Mobility score (lower = more likely to move soon) | 2.9 | 32.1 | Much more likely to move |
Twelve-month income change for Parkside itself isn't available. The property's income time series came back empty, so the 6-month figure is the best property-level trend. The 12-month number above is for the submarket.
Treat the $119K median with caution. In the property's own income brackets, 58.4% of households earn under $100K, which puts the median closer to $94K . It's also a small sample: 106 households, about 21% of the building . Even using the lower median, rent-to-income is only 16.2% , so the conclusion holds either way.
The income distribution is tight. No household earns under $50K, 20% earn $50–75K, and 38% earn $75–100K . Wealth is thin, though. The median household has $25–50K in net worth and $10–15K in liquid savings . These renters handle the monthly rent comfortably but have little cushion for big increases.
Mostly yes. The limit only bites on the larger units:
Returns on the purchase price are also thin. Net operating income is $3.09M, which is a 3.98% yield on the $77.5M paid in 2021. Property taxes are 34.9% of operating expenses . That, more than rent levels, may be the actual underwriting problem.
If the sponsor's model shows rent growth that leaves the 3-bedrooms and occupancy as they are today, the renters can pay it; the property just can't lease units that fast. I'd push back on three assumptions:
If you send the sponsor's rent assumptions by unit type, I'll test each one against these income brackets.
This is a read-only snapshot of a RealAI analysis.