Show me the historical rent and occupancy time series for the submarket around Archer Tower in Denver, broken out by bedroom count. I want to see the trend over time for asking rent, in-place rent, and occupancy, not just a current snapshot, so I can gauge momentum before underwriting this deal.
cat << 'EOF' > /tmp/calc.py
data = {
0: {"start_ask":1508.877551,"end_ask":1417.759916,"start_ip":1292.5075,"end_ip":1297.678077},
1: {"start_ask":2022.808648,"end_ask":2059.222861,"start_ip":1679.73618,"end_ip":1744.392066},
2: {"start_ask":2930.84965,"end_ask":3053.27483,"start_ip":2525.986916,"end_ip":2647.618046},
3: {"start_ask":4407.909091,"end_ask":4746.791667,"start_ip":3435.277778,"end_ip":4663.402062},
}
for bed,d in data.items():
ask_chg = (d["end_ask"]/d["start_ask"]-1)*100
ip_chg = (d["end_ip"]/d["start_ip"]-1)*100
print(f"{bed}BR: asking {d['start_ask']:.0f}->{d['end_ask']:.0f} ({ask_chg:+.1f}%), in-place {d['start_ip']:.0f}->{d['end_ip']:.0f} ({ip_chg:+.1f}%)")
occ_start = 0.9725543241120517
occ_end = 0.9101143206213457
occ_recent_peak = 0.9610786281525439 # jan 2025
print(f"\nOccupancy Jul-24: {occ_start*100:.1f}%, Aug-26: {occ_end*100:.1f}%, chg: {(occ_end-occ_start)*100:+.1f}pp")
print(f"Occupancy peak (Jan-25): {occ_recent_peak*100:.1f}%")
EOF
python3 /tmp/calc.pyDenver Central submarket (Archer Tower's home turf): occupancy is bleeding out, and asking rents haven't kept pace with in-place — a classic late-cycle softening pattern you want priced into this deal, not glossed over.
The momentum read, by line item:
Occupancy is the real story. Submarket occupancy ran 97.3% in mid-2024, held in the mid-to-high 90s through early 2025, then began sliding steadily — down to 93.3% by last October, and now sitting at just 91.0% as of August 2026, a 6.2-point decline over the trailing 26 months . This isn't noise — it's been a near-uninterrupted downtrend since spring 2025, meaning new supply or demand softness is outrunning lease-up in this corridor. That's the single number that should shape your occupancy underwriting for Archer Tower — don't assume the submarket snaps back to high-90s stabilized occupancy without a specific reason this asset would outperform its market.
Asking and in-place rents are diverging by unit type — a sign of concessions and downward pricing pressure on the smaller units that dominate this submarket. Studios actually saw asking rent fall 6.0% ($1,509→$1,418) while in-place barely moved (+0.4%) — landlords are cutting list price to chase leases, but the existing tenant base hasn't repriced down yet. That gap is exactly the kind of embedded softness that shows up in trade-outs going negative once turnover happens. One-bedrooms and two-bedrooms are healthier — asking up 1.8% and 4.2%, in-place up 3.8% and 4.8% respectively — a more normal, modest-growth pattern.
Three-bedroom data is a false read — don't underwrite off it. Asking is up 7.7% and in-place is up a startling 35.8% , but the underlying sample is only 9–25 units across the whole submarket per month — a handful of large-format leases swinging the average, not a market trend. Treat 3BR (and especially 4BR, which runs 0–3 units some months) as noise, not signal.
Bottom line for underwriting: lean on the 0-2BR trends (where Archer Tower's unit mix likely concentrates) and build occupancy off the current 91% trajectory, not the 96%+ levels from a year ago — this submarket is still finding a floor, not recovering. The studio asking-vs-in-place gap is worth checking against Archer Tower's own rent roll: if the property's studios are still priced near the old in-place level, a mark-to-market on turnover could be a headwind, not a value-add opportunity, until submarket occupancy stabilizes.
This is a read-only snapshot of a RealAI analysis.