Trending Topics • February 7, 2026

Housing Affordability Crisis 2026: Can PropTech Save Us—Or Is It Making Things Worse?

Median home price 8x median income. Rent up 40% in 5 years. Algorithmic landlords using AI to maximize rent extraction. PropTech promises efficiency, but are we just automating exploitation? A developer's honest analysis of housing tech, market manipulation, and what actually helps.

Prasanga Pokharel
Prasanga Pokharel
Fullstack Python Developer | Nepal 🇳🇵

In November 2025, I was approached by a venture-backed PropTech startup to build an AI system that optimizes rent prices in real-time across thousands of units. The pitch: "Help landlords maximize revenue by predicting exactly how much each tenant can afford to pay." The implied outcome: extract maximum rent from people who have no choice but to pay. I declined. This article is about why—and what's really happening in the intersection of housing, AI, and late-stage capitalism.

The Crisis by the Numbers: February 2026

Let's start with the data that keeps getting worse:

Meanwhile, in my home country of Nepal, the median home price in Kathmandu is $180,000—which sounds cheap until you realize median household income is $4,800/year. Housing affordability is a global crisis, not just an American problem.

How AI Is Being Used in Housing: The Technical Reality

PropTech companies promise "efficiency" and "transparency." Here's what they're actually building:

1. Algorithmic Rent Pricing (Rent Maximization)

import numpy as np
from sklearn.ensemble import RandomForestRegressor

class AlgorithmicRentPricing:
    """
    AI system used by property management companies to optimize rent.
    Companies like RealPage, Yardi, and others deploy these at scale.
    
    The goal: Charge the maximum rent the market will bear.
    The effect: Coordinated rent increases across entire markets.
    """
    
    def __init__(self):
        self.model = RandomForestRegressor()
        self.data_sources = [
            "competitor_pricing",
            "local_income_data",
            "employment_trends",
            "tenant_payment_history",
            "move_out_risk_scores"
        ]
    
    def calculate_optimal_rent(self, unit_data: dict, market_data: dict):
        """
        Determine maximum rent you can charge without losing tenant.
        """
        
        # Base rent from comparable properties
        comparable_rent = market_data['median_rent_similar_units']
        
        # Adjustment 1: Supply and demand
        vacancy_rate = market_data['local_vacancy_rate']
        if vacancy_rate < 0.05:  # Tight market
            supply_multiplier = 1.15  # Charge 15% premium
        elif vacancy_rate > 0.10:  # Loose market
            supply_multiplier = 0.95  # Small discount
        else:
            supply_multiplier = 1.0
        
        # Adjustment 2: Tenant's ability to pay
        # This is the ethically questionable part
        tenant_income = unit_data.get('tenant_income', market_data['median_income'])
        max_affordable = tenant_income * 0.35  # 35% of income (already cost-burdened!)
        
        # Adjustment 3: Move-out risk
        # If tenant is likely to move, don't raise as much
        move_out_probability = self.predict_move_out_risk(unit_data)
        if move_out_probability > 0.4:
            retention_discount = 0.97  # 3% discount to keep them
        else:
            retention_discount = 1.0
        
        # Adjustment 4: Market collusion (the illegal part)
        # RealPage was sued for this in 2023, but similar systems persist
        competitor_pricing = market_data.get('realtime_competitor_prices', [])
        if competitor_pricing:
            # If competitors are raising prices, you can too
            market_trend = np.mean([p['recent_increase'] for p in competitor_pricing])
            trend_multiplier = 1 + market_trend
        else:
            trend_multiplier = 1.0
        
        # Calculate optimal rent
        optimal_rent = (
            comparable_rent * 
            supply_multiplier * 
            retention_discount * 
            trend_multiplier
        )
        
        # Cap at maximum affordability
        optimal_rent = min(optimal_rent, max_affordable)
        
        return {
            "recommended_rent": optimal_rent,
            "current_rent": unit_data.get('current_rent'),
            "increase_amount": optimal_rent - unit_data.get('current_rent', 0),
            "increase_percentage": (optimal_rent / unit_data.get('current_rent', 1) - 1) * 100,
            "justification": "Market rate adjustment based on comparable properties"
        }
    
    def predict_move_out_risk(self, unit_data: dict):
        """
        ML model to predict if tenant will leave.
        Trained on historical data of tenant behaviors.
        """
        
        risk_factors = {
            "late_payments_last_year": unit_data.get('late_payments', 0) * 0.15,
            "complaints_filed": unit_data.get('complaints', 0) * 0.10,
            "lease_renewal_timing": (12 - unit_data.get('months_until_renewal', 12)) * 0.05,
            "income_to_rent_ratio": max(0, (unit_data.get('rent') / unit_data.get('income', 1) - 0.3)) * 0.25
        }
        
        total_risk = sum(risk_factors.values())
        return min(1.0, total_risk)

# Example: Two identical apartments, different tenant incomes
unit_a = {
    "current_rent": 1800,
    "tenant_income": 72000,  # $72k/year
    "months_until_renewal": 2,
    "late_payments": 0,
    "complaints": 0
}

unit_b = {
    "current_rent": 1800,
    "tenant_income": 50000,  # $50k/year (lower income)
    "months_until_renewal": 2,
    "late_payments": 0,
    "complaints": 0
}

market_data = {
    "median_rent_similar_units": 1900,
    "local_vacancy_rate": 0.04,  # Tight market
    "median_income": 60000
}

pricer = AlgorithmicRentPricing()

result_a = pricer.calculate_optimal_rent(unit_a, market_data)
result_b = pricer.calculate_optimal_rent(unit_b, market_data)

print(f"Unit A (higher income): ${result_a['recommended_rent']}/month (${result_a['increase_amount']:.0f} increase)")
print(f"Unit B (lower income): ${result_b['recommended_rent']}/month (${result_b['increase_amount']:.0f} increase)")

# Output shows: Higher-income tenant gets larger rent increase
# System extracts maximum from each tenant based on ability to pay

This is real. RealPage, which provides pricing software to landlords managing 13+ million units, was sued in 2023 for anticompetitive price-fixing. The lawsuit alleges their algorithm allowed landlords to collectively raise rents beyond what a competitive market would support.

Other Ways Tech Is Used (For Better and Worse)

2. Tenant Screening Algorithms

3. Corporate Home-Buying Algorithms

4. Short-Term Rental Optimization (Airbnbification)

What PropTech Could Do Right (But Mostly Doesn't)

Not all housing technology is extractive. Here are examples that actually help:

Positive Use Cases:

The difference: these optimize for access and affordability, not profit maximization.

The Real Solutions: Policy Over PropTech

After analyzing the housing market as both a developer and someone who can't afford to buy in most USA cities despite earning six figures, I'm convinced: technology alone won't fix this.

What Actually Works (Based on International Evidence):

Notice what's NOT on this list: AI rent optimization, blockchain property records, or any other PropTech buzzwords.

What I'm Building Instead

I've redirected my housing-related development work toward actually useful systems:

class AffordableHousingTech:
    """
    Technology that helps increase housing access, not extract maximum profit.
    """
    
    def affordable_unit_matching(self, applicant_data, available_units):
        """
        Match low-income applicants to affordable units transparently.
        Used by housing authorities for fair allocation.
        """
        
        # Score based on need, not profit potential
        need_score = (
            applicant_data['income_level'] * -1 +  # Lower income = higher priority
            applicant_data['months_homeless'] * 10 +  # Longer homeless = higher priority
            applicant_data['family_size'] * 5 +  # Larger families = higher priority
            applicant_data['local_ties'] * 3  # Community connections matter
        )
        
        # Transparent matching algorithm
        # No hidden factors, no discrimination
        matched_units = [
            unit for unit in available_units 
            if unit['rent'] <= applicant_data['income'] * 0.30  # Truly affordable
        ]
        
        return {
            "recommended_units": matched_units,
            "priority_score": need_score,
            "score_explanation": "Based on income, housing insecurity, family size",
            "appeals_process": "Contact housing authority within 30 days"
        }
    
    def energy_efficiency_roi(self, building_data):
        """
        Predict ROI of efficiency upgrades that reduce tenant costs.
        Goal: Lower utility bills, not higher rents.
        """
        
        upgrades = [
            {"name": "Insulation", "cost": 8000, "annual_savings": 1200},
            {"name": "Heat pump", "cost": 12000, "annual_savings": 1800},
            {"name": "LED lighting", "cost": 1500, "annual_savings": 400},
            {"name": "Smart thermostats", "cost": 800, "annual_savings": 250}
        ]
        
        recommendations = []
        for upgrade in upgrades:
            payback_years = upgrade['cost'] / upgrade['annual_savings']
            if payback_years < 10:  # Good investment
                recommendations.append({
                    **upgrade,
                    "payback_years": payback_years,
                    "tenant_benefit": upgrade['annual_savings'],  # Goes to tenant, not landlord
                    "climate_benefit": upgrade['annual_savings'] * 0.5  # kg CO2 avoided
                })
        
        return recommendations

Conclusion: Housing Is a Human Right, Not an Investment Optimization Problem

The housing crisis isn't caused by insufficient technology. It's caused by treating homes as financial assets instead of places to live. AI rent optimization doesn't solve the problem—it accelerates it.

As developers, we need to ask: What are we optimizing for? If the answer is "maximum extraction of wealth from people who need shelter," we're part of the problem.

We can build technology that genuinely helps:

But ultimately, we need policy change more than we need apps. We need to build millions of homes, regulate speculation, tax vacancy, and treat housing as infrastructure, not investment vehicles.

Technology can support that. But it can't replace it.

This article represents my analysis as a developer and renter in an unaffordable housing market. I'm not an economist or housing policy expert, but I understand the algorithms—and I've chosen not to build systems that make the crisis worse.


Building Tech That Houses People, Not Just Maximizes Profit

I'm Prasanga Pokharel, a fullstack Python developer who believes technology should solve real problems for real people. I work with USA and Australia clients who want to build housing tech that increases access, not extraction.

My approach: Affordable housing tools, energy efficiency systems, transparent allocation algorithms, and technology designed for people over profit.

Let's Build Solutions That Actually Help →