Skip to content
← All client work/Real-estate · Investment
At scaleReal-estate · Investment

Multifamily underwriting software case studyRaw listings became cap rates automatically, with incomplete deals held back and explained.

An investment firm needed to evaluate multifamily properties at scale without slow, error-prone manual underwriting.

ClientREK Partners · Andreas Ortiz
ProjectMultifamily Underwriting & Cap-Rate Platform
My roleSenior developer
StatusAt scale
Discuss a similar build
Property dashboard showing listing cards with cap-rate badges, price, size, unit count and year built, and a "10 missing cap rate" indicator.

The real product, shown with demo data.

~90%Of listings skipped on each run by change detection — only new or changed ones are re-fetched
NOIAnd cap rate from a region-specific expense model
9 linesItemised operating expenses behind every NOI, plus vacancy and a capital reserve
< $40/moTotal running cost for the whole platform: hosting, database, scraping and AI
In short

A real-estate investment firm needed to evaluate multifamily properties at scale. I built a platform that collects property data on a schedule, enriches it with market rents and public records, and computes NOI and cap rate from a regional expense model — and gives no number at all when the inputs are incomplete.

01 · The situation

Underwriting by hand was slow and error-prone.

A real-estate investment firm needed to evaluate multifamily properties at scale. Manually pulling listings, rents, and public records, then running the underwriting math, was slow and error-prone.

02 · The challenge

A wrong cap rate means a bad investment.

The data lives behind anti-bot defenses and in inconsistent formats, and the financial model has to be exactly right. So it needed reliable data collection and correct, region-aware financial calculation.

03 · What I built

From raw listing to investment metric, automatically.

A platform that automatically collects property data on a schedule, enriches each property with market rents and public records, classifies and analyzes it with AI, and computes investment metrics — surfaced in a dashboard with filtering and sorting, where every figure can be opened to see the calculation behind it.

Screens from the real product, captured with demo data. No client or customer data is shown.

04 · How it works

A scheduled underwriting pipeline

  1. 01CollectListings behind anti-bot defensesChange detectionRetries
  2. 02EnrichMarket rents + public records
  3. 03AIClassifyProperty type from images, details from textVisionGPT
  4. 04Cap-rate engineNOI from a region-specific expense model
  5. 05Completeness checkNo price, units or rents: no cap rate
  6. 06DashboardFilter, sort, review
On a schedule the platform collects new and changed listings, enriches them, classifies them with AI and computes the investment math — and leaves the cap rate empty, with a reason, when an input is missing.
05 · The hard engineering

Reliable data, correct math.

The cap-rate engine, one property at a timeIllustrative figures
Gross scheduled rent24 units × $1,350 × 12$388,800
− Vacancy (5%)−$19,440
− Operating expensesRegion model: Texas−$155,131
= Net operating income$214,229
÷ Asking price$3,150,000
Cap rate6.80%
Completeness check
✓ Price found
✓ Unit mix found
✓ Rents found for the unit mix
⚑ No price: no cap rate
⚑ No rents yet: no cap rate
A listing that fails a check gets no cap rate, and a stated reason.
01

Resilient scraping

Survives anti-bot systems and changing page structures, with retries and monitoring that surface collection failures.

02

AI used precisely

Image-based property-type classification, plus extraction of unit counts, square footage and key details from listing text.

03

Cap-rate engine

Per-unit market rents fed into an engine that computes NOI and cap rate from a detailed, region-specific expense model.

04

No guessed numbers

A listing with no price, no unit mix or no rents gets no cap rate, and the stats page says which reason applies — instead of a figure that looks right and is not.

05

Change detection

Each run re-fetches only listings that are new or whose price or status changed. That skips about 90% of them, which is why the schedule moved from daily to weekly.

06 · Key decisions

The calls that shaped the build

Why is the financial model region-aware?

Operating expenses differ by region. A single national assumption would produce cap rates that look right but lead to bad investment decisions.

Where exactly is AI used?

Only where it adds something rules can’t: classifying property type from images and pulling unit counts, square footage and key details from listing text.

Why leave a cap rate empty?

A wrong number is worse than no number. When a listing has no price, no unit mix or no rents, the platform shows no cap rate and says which input is missing, instead of silently skewing the results.

07 · The outcome

Investment-grade underwriting, produced automatically.

✓ Underwriting produced automatically from raw listings✓ Data reliability the decisions depend on✓ Financial correctness, region by region
08 · Stack
PythonFastAPICelery/RedisResilient scrapingGoogle Vision + GPTPostgreSQLCap-rate engine
Is this like your product?

Anywhere a wrong number means a bad investment decision.

Real-estate investorsautomated underwriting and deal screening
Lenderscollateral analysis at scale
Fundsconsistent, region-aware financial models