๐—ช๐—ต๐—ฎ๐˜ ๐—”๐—œ ๐—จ๐—ป๐—ฑ๐—ฒ๐—ฟ๐˜„๐—ฟ๐—ถ๐˜๐—ถ๐—ป๐—ด ๐—”๐—ฐ๐˜๐˜‚๐—ฎ๐—น๐—น๐˜† ๐—ฅ๐—ฒ๐—พ๐˜‚๐—ถ๐—ฟ๐—ฒ๐˜€ (๐—๐˜‚๐˜€๐˜ ๐˜๐—ต๐—ฒ ๐—œ๐—ป๐—ฐ๐—ผ๐—บ๐—ฒ ๐—ฆ๐—ถ๐—ฑ๐—ฒ)

Every few weeks, someone sends me a DM to review a new AI underwriting platform. "Upload your T12. Get a proforma in 60 seconds." And every time, I think the same thing.

You don't understand the problem you're solving.

I've been buying apartment complexes for over 30 years. I've underwritten hundreds of deals across every market cycle since the early '90s. And I can tell you that what passes for "AI underwriting" right now is data extraction with a few rules bolted on. That's not real underwriting.

To keep this from turning into a book, I'm only going to attack the income side. Just revenue. The expense side, capital structure, and exit modeling each have their own iceberg of complexity. But income alone should be enough to show you the gap between what AI tools do today and what a human actually does (or should do) when they sit down to underwrite a deal.

Underwriting is a bet. Strip away every spreadsheet and every proforma template, and that's what's left. You are wagering that a stream of future cash flows, discounted to today, is worth more than what the seller is asking. Every sensitivity table and every scenario model is just a structured way of asking: is this bet positive expected value?

The quality of that bet depends on three things. Can you measure what the property produces today? Can you estimate the probability-weighted range of what it will produce tomorrow? And can you identify the risks that sit outside any model?

That framework sounds clean. Simple, even. But the moment you try to measure income on an apartment property, you realize "income" isn't one number. It's eight separate analytical problems, each with its own data sources, its own logic, and its own ways of fooling you.

Rent Comps

You need to answer one question: is this property at market, above market, or below market, unit type by unit type?

That's a spatial and temporal matching problem. You need comps that are similar in vintage, unit size, finish level, and submarket. A 2024-renovated unit with quartz countertops and LVP doesn't comp against the 1985-original with laminate and carpet across the street, even if they're the same square footage.

And the comps need to be adjusted. A unit offering two months free isn't a $1,400/month unit. It's a $1,167/month unit on an effective basis. A comp that includes water, sewer, and trash in rent is not the same as one where tenants pay utilities separately. The adjustment layer is where most analysis breaks down, because most analysts (and the majority of AI tools I've tested) skip it.

A machine should pull comps, score them by relevance across multiple dimensions, weight recent comps heavier, normalize for concessions and utility inclusion, and output a market rent estimate with a confidence range. Not a single number. A range.

Economic Factors

Supply pipeline. Employment base. Population trends. Zoning risk. Capital flows. Interest rate environment.

This module doesn't produce a number. It produces context for every other module. If there are 3,000 units delivering in the next 18 months in a submarket with 10,000 existing units, that changes your rent growth assumption, your vacancy assumption, and your concession assumption. All of them.

Most tools let you type your own rent growth number into a blank cell. Three percent. Where did that come from? Ask most analysts. The answer is often "that is what we do on all our deals". A good system would tell you: given the supply pipeline, employment trends, and historical absorption in this submarket, rent growth for this unit type has a mean of 1.8% with a standard deviation of 2.1%. You can disagree with that. But at least you're disagreeing with data instead of making something up.

Bad Debt

This one is almost always done wrong. Bad debt isn't just "uncollectable rent." It's the gap between what you billed and what you deposited. And it's wildly property-specific.

A Class C workforce property in a soft market might run 8-12% bad debt. A Class A suburban property might run .05-1%. National averages are useless here. The number depends on property class, submarket economics, and local eviction law. A state with a 6-month eviction process has structurally higher bad debt than a state where you can get possession in 30 days. That's not a management problem. That's a legal-environment problem baked into the property's DNA.

An AI tool should model bad debt as a function of all those factors. Not let you plug in 2% because it feels right.

Concessions

I separate concessions from rent comps for a reason. Concessions are a leading indicator. When a market softens, concessions show up before rent declines do. If every comp in the submarket is offering 6-8 weeks free, that tells you something different than a market where units are leasing at full ask with waitlists.

Concessions distort your revenue projection. If you're modeling $1,400 rents but the market requires one month free to fill units, your actual effective GPR is 8% lower than your proforma shows. That's real money. On a 200-unit property, that's $280,000 a year in revenue you don't actually have. A concession module needs to track whether concessions are increasing or declining over time. That trend is a momentum signal for the entire submarket.

Rent Roll Analysis

You're reading the rent roll to diagnose the health of the revenue base.

Loss-to-lease: the gap between in-place rents and market rents. If market rent is $1,400 and the average tenant is paying $1,200, you have 14% loss-to-lease. That's your organic upside. You can capture it through lease renewals without spending a dollar on renovations.

Gain-to-lease: the opposite. Tenants paying above market. That's risk, not revenue. When those leases roll, you may lose those tenants or have to drop rents.

The distribution matters. You want a tight bell curve centered near the market. A wide distribution tells you the property has been managed inconsistently. Some units got bumped, some didn't. That's both a problem (revenue instability) and an opportunity (easy renewals you can capture without spending a dime).

Then there are the anomalies. Units renting for $600 when the average is $1,100. Employee units. Owner's relatives. Sweetheart deals that never hit the P&L correctly. You need to flag and exclude those, or they distort every average you calculate.

Other Income

Pet fees, application fees, late fees, laundry, parking, storage, vending. Sounds small. Often 3-6% of effective gross revenue.

Watch for the trap. Sellers inflate other income in the trailing period to juice NOI before a sale. I've seen properties where late fees doubled in the six months before listing. That's not sustainable income. That's staging. The module needs to benchmark other income per unit against comps, flag anomalous spikes, and separate what's real from what's false.

It also needs to spot what's missing. No pet premium? No covered parking fees? Those are revenue adds you can underwrite in your value-add plan. But only if the system identifies the gap.

RUBS Income

Ratio Utility Billing System. You bill tenants back a portion of water, sewer, trash, sometimes electric. On a 200-unit property, RUBS income can be $75-150 per unit per month. That's $180,000 to $360,000 a year. Not a rounding error.

The analysis cross-references current RUBS income against total utility expense to calculate the recovery rate, compares your rates against the competitive set, and checks regulatory limits. Some states cap what you can bill back.

If the current recovery rate is 40% and the market supports 70%, that's income upside. If it's already at 85% and the comps are at 60%, that's risk. You're already at the ceiling and tenants will push back.

Projected Rental Income Growth

This is where the economic factors module feeds back in. Your growth rate isn't a single number applied uniformly for five years. That's lazy modeling.

If 2,000 units deliver in Year 1, growth goes flat. When the construction pipeline dries up in Years 2-3, you could see 3-4%. Years 4-5 typically revert to a 2% long-run average. The system should pull from trusted sources (Yardi Matrix, CoStar, BLS, Census) and produce a year-by-year data-driven growth rate with a confidence interval.

The Real Architecture

That's eight separate analytical modules. Just for income. Each one has its own data sources, its own comparison logic, and its own ways of fooling you if you aren't paying attention.

The expense side has another eight to ten. Insurance, taxes, payroll, R&M, contract services, make-ready, utilities, management fee, capex reserve. Each with the same depth.

Then capital structure. Then exit modeling. You're looking at 25-30 distinct analytical engines that need to talk to each other.

This is why the current crop of "AI underwriting" platforms is shallow. They build one model that tries to do everything. It's like running a 200-unit property with one person handling leasing, maintenance, accounting, and compliance. You can try. Every function runs at a C-minus.

The right approach is modular. Each module is a specialist. They share a common data layer. They feed into each other through defined interfaces. You can improve one without breaking the others. You can ship the T12 extraction engine and rent roll diagnostic before the RUBS module is even built.

The deeper problem is variance. The variance of underwriting outcomes across different analysts, different shops, different assumptions is enormous. Give the same deal to five underwriters and you'll get five different values. That variance is the problem. It's created by blank cells where people type guesses, missing adjustments that nobody catches, and assumptions that go unchallenged because the spreadsheet doesn't push back.

A real AI underwriting system doesn't replace the human. It reduces the variance. It shows you what the data supports and forces you to justify any deviation. It doesn't let you type 5% vacancy because that's what the broker's OM says. It tells you that based on submarket absorption, seasonal patterns, and the current supply pipeline, stabilized vacancy for this property class runs 7.2% with a range of 5.8% to 9.1%. Then you decide.

That's a fundamentally different product than "upload your T12 and get a proforma."

I could be wrong. Maybe the market wants the fast proforma and doesn't care about the depth. But I've watched enough deals blow up because someone plugged optimistic numbers into blank cells and called it underwriting.

And we haven't even talked about expenses yet.