Real Estate · Multifamily

A multifamily underwriting workbook that fills itself in from an OM and a T12

Turned 3-5 hours of copy-pasting numbers into a broker's PDF in, full 15-tab live pro forma out.

AI coding agent TypeScript spreadsheet engine PDF parsing
15 tabs · 325 named ranges · 186 automated tests · cent-exact ·
45 seconds: two broker PDFs go in, a 15-tab live pro forma comes out. Everything it covers is written out below.

The problem

Every multifamily acquisitions person knows this shape. A broker sends over an OM (offering memorandum, PDF) and a T12 (trailing-12-month P&L, PDF or spreadsheet). You want to know one thing: is this deal any good, and what should we offer?

Getting to that answer takes hours.

You open the last deal’s spreadsheet, save-as, blank out the numbers, and start copy-pasting from the PDFs. Rent roll goes here. Historical income goes there. Expense categories need to be re-mapped because the broker uses different line-item names than your model does. You plug in assumptions — rent growth, expense inflation, exit cap rate — and stare at the returns.

Then you notice the interest-only period on the loan is 24 months, not 36 like last time, so you rebuild the debt schedule. Then the LP/GP waterfall needs a different promote structure. Halfway through, you catch that the T12 you’re copying from includes reserves inside operating expenses when your model puts them below the line. Three tabs later, you catch a $60/mo unit typo. You re-check the whole thing.

Multiply by twenty deals a month. This is why most operators only really underwrite two or three seriously and the rest get napkin math.

The approach

Turn the spreadsheet into an engine.

Not another disposable file — one live template that:

  • Reads the OM PDF and the T12 and fills itself in.
  • Stays fully formula-driven. Change one assumption (rent growth, exit cap, refi timing) and every downstream number cascades. Nothing is a baked-in static number that goes stale the moment you tweak an input.
  • Runs an automated check that confirms every derived cell matches a separate calculation to the cent, so you can trust the number in the cell without tracing the formula back six tabs.

The AI does the boring part — parsing the PDFs, mapping the broker’s line items to your standard chart of accounts, populating 300+ cells across 15 tabs. You do the interesting part — setting the assumptions and reading the returns.

What we built

  • A 15-tab workbook. Cover page (deal summary + returns dashboard) → Assumptions → Rent Roll → T12 P&L → Pro Forma → CapEx → Debt Schedule → LP/GP Waterfall → Sensitivity → Returns → Sources & Uses → Loan Compare → Refi Scenarios → Exit → Notes.
  • 325 named cells you can reference from anywhere. Change PurchasePrice on the assumptions tab and the debt schedule, waterfall, returns, and sensitivity table all update instantly. No hunting through cell references.
  • A debt schedule that handles real loan structures. Amortization + interest-only periods + refis + prepayment penalties. Not just “monthly payment.”
  • A full LP/GP waterfall. IRR pref, catch-up, and multi-tier promote. Actually computes what each partner receives at every tier, not just “return of capital + N% split.”
  • A safety net of automated checks — 186 of them per deal. Every derived cell is compared to a separate calculation. If a formula drifts, we see it before the sheet gets sent to a lender or an LP.
  • A blank template you duplicate. New deal = copy the template, drop in the OM + T12, and the sheet fills itself in in about 90 seconds.

The numbers

BeforeAfter
Time to a defensible first-pass underwrite3-5 hours per deal~10 minutes per deal
Deals we can seriously underwrite per week3-420+
Errors caught by a partner reading the sheet later1-2 per deal~0
Time to refresh every open deal when assumptions shift (e.g. rates move)Impossible to actually doChange 1 cell, every deal reflows
Time to onboard a new analyst2-4 weeks (rebuilding tribal model knowledge)Same day

The lesson

Same lesson the property-management dashboard taught: the interesting thing isn’t any single tab. It’s the engine underneath.

The disposable spreadsheet is one deal’s work product — you build it, you use it, you archive it.

The engine is every deal’s work product, forever. You do the thinking once — how expenses should be categorized, what a real debt schedule looks like, how your waterfall actually splits — and then you reuse that reasoning across every deal you touch. Every new deal makes the engine slightly better. Every improvement to the engine makes every deal you underwrite from that day forward slightly better.

If you’re a multifamily investor sitting on a folder of custom deal-specific spreadsheets, the highest-leverage move isn’t a fancier pro forma. It’s turning your reasoning into an engine, and then just pouring new deals into it.

The AI just handles the copy-paste.