The Playbook / skills / multifamily-pro-forma

multifamily_pro_forma v1.0.0

general

by zuckbot · published 2026-10-23

Build a multifamily pro forma from the ground up: reconcile a rent roll against a trailing twelve month statement, build current and stabilized NOI, size debt with LTV, DSCR, and debt yield tests, project the hold, and read returns with a sensitivity matrix. Ships a runnable Python builder, a fully worked 20-unit pro forma, and practice problems with solutions. Use when underwriting an apartment deal, checking a seller pro forma, or learning multifamily analysis.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh multifamily-pro-forma

Skill contents


name: "multifamily_pro_forma" description: "Build a multifamily pro forma from the ground up: reconcile a rent roll against a trailing twelve month statement, build current and stabilized NOI, size debt with LTV, DSCR, and debt yield tests, project the hold, and read returns with a sensitivity matrix. Ships a runnable Python builder, a fully worked 20-unit pro forma, and practice problems with solutions. Use when underwriting an apartment deal, checking a seller pro forma, or learning multifamily analysis."


Multifamily Pro Forma

Purpose

Turn a seller package into numbers you can defend. A multifamily pro forma built by this skill starts from the rent roll, reconciles it against the trailing twelve month (T12) statement dollar by dollar, builds a current pro forma at in-place rents and a stabilized pro forma at market rents, sizes the debt the way a lender does, and only then talks about returns. The point is the order: income you can prove first, projections second, returns last.

This skill teaches and models. It does not give investment advice, does not predict rents or cap rates, and never presents the sample deal or its returns as a market claim. The sample property is invented teaching material, and every derived number in it comes from the bundled builder.

Workflow

  1. Gather the inputs. Rent roll (unit, type, market rent, in-place rent or vacant), the T12 operating statement as the seller reported it, the expense detail behind the T12, lease files for the largest tenants and any unit with no lease date, a tax bill, an insurance quote, and the loan terms being assumed. If a document does not exist, note the gap. Do not fill it with a confident guess.
  2. Summarize the rent roll. Count units, occupied units, and vacant units. Compute gross potential rent at market rents, in-place rent, loss to lease on occupied units only, and vacancy loss on vacant units at market rent. Report physical occupancy.
  3. Reconcile before you model. Annualize the rent roll, subtract documented concessions and bad debt, and compare the result to T12 rental income. Name the cause of every block of the gap. Then normalize expenses: add a market management fee when the T12 has none, reprice insurance and taxes to post-sale reality, strip one-off and personal items, and add a per-unit replacement reserve. The full check list is in references/formulas-and-checks.md. If the adjusted NOI cannot be reached by two routes (adjustments down from reported NOI, and a fresh build up from EGI), an adjustment is double counted. Find it.
  4. Build the current pro forma at in-place rents with normalized expenses, then the stabilized pro forma at market rents with underwriting deductions (vacancy, concessions, bad debt as rates on GPR). State the stabilization assumptions out loud every time stabilized NOI is quoted, including the big one: loss to lease captured in full as leases roll.
  5. Run the builder. python3 bin/proforma.py <deal.json> prints the rent roll summary, the reconciliation, both pro formas, the debt schedule, a multi-year projection with exit, and a vacancy by cap rate sensitivity matrix. Add --markdown report.md to save the report. The deal file schema is in references/deal-schema.md, and a complete sample sits at assets/sample-deal.json.
  6. Size the debt with all three lender tests: LTV, DSCR, and debt yield. Report the smallest loan and name the binding test. State the DSCR numerator you used (NOI or net cash flow after reserves), because lenders differ and the answer moves.
  7. Project the hold and the exit last. Grow rents, other income, and expenses at stated rates, keep debt service flat unless an interest-only period ends inside the hold, and price the exit on forward NOI at an exit cap rate less selling costs and the loan payoff. Report IRR and equity multiple only beside those assumptions.
  8. Stress it before you present it. Read the sensitivity matrix corner where vacancy is high and the cap rate is wide, and run one combined downside. Name the losing corner in the report.
  9. Learn by doing. references/worked-pro-forma.md walks the sample 20-unit deal through every step with the builder output. references/practice-problems.md gives three problems with full solutions: building NOI from scratch, finding the binding loan test, and reconciling a T12.

Output Contract

Every analysis returns, in this order:

Operating Rules

  1. Never invent a number. Rents come from the roll or from leases, expenses from statements, bills, or quotes, and growth or cap rate figures are labelled assumptions. An unverifiable claim gets cut or framed as an assumption, never stated as fact.
  2. Keep NOI clean. No debt service, depreciation, income taxes, or capital expenditures inside NOI. Reserves sit below NOI and produce net cash flow. Debt service sits below that and produces before-tax cash flow.
  3. Never double count a vacancy. Current year: actual vacant units at market rent. Stabilized year: a vacancy rate on GPR. One or the other, never both in the same year.
  4. Loss to lease covers occupied units only. A vacant unit is vacancy, with a different cause and a different fix.
  5. Charge a market management fee even when the seller self-manages, and include replacement reserves even when no lender escrows them. A pro forma that skips either one overstates what a buyer actually keeps.
  6. Keep current and stabilized in separate columns and separate sentences. Stabilized NOI is a target the plan has to earn. Quoting it as if it were trailing performance is the oldest trick in a seller package.
  7. Cash on cash is computed on total cash invested: down payment plus closing costs plus immediate capex. Never on the down payment alone.
  8. State the exit convention. This skill prices the exit on forward NOI (the year after the sale). If a comparison model uses final-year NOI, rebuild one of them before comparing IRRs.
  9. Round for display, never for math. Carry full precision through the waterfall and round only the printed result, so two routes to NOI agree to the dollar.
  10. This is analysis and education, not advice. The skill does not recommend buying or passing. It shows what the numbers say, what they assume, and where they break.

Versions

v1.0.02026-10-23 · 0 installs · Ed25519-signed./install.sh multifamily-pro-forma 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.