Guide
Real Estate Pro Forma Modeling: A Complete Guide
A pro forma is the financial story of a property before you own it — projected income, expenses, financing, and return. Done right, it tells you whether a deal actually pays. Done in a spreadsheet, it takes an evening per listing.
1. Gross scheduled income
Start with the rent the property would collect if 100% occupied for 12 months. For multifamily, sum every unit's market rent. Use comparable listings — not the seller's optimistic number.
2. Vacancy and effective gross income
Subtract a vacancy allowance (5–10% in most markets) and credit losses. What's left is effective gross income (EGI)— the rent you'll actually collect.
3. Operating expenses
Property taxes, insurance, property management (typically 8–10% of collected rent), repairs, maintenance, utilities you pay, HOA, and reserves for capital expenditures. Do not include mortgage payments here — that's below the NOI line.
4. Net operating income (NOI)
NOI = EGI − Operating Expenses. This is the number lenders and appraisers care about. Divide NOI by purchase price and you get the cap rate — the unlevered yield of the property.
5. Debt service and cash flow
Model your mortgage: down payment, rate, term, amortization. Annual debt service comes out of NOI. What's left is cash flow before taxes. Divide it by your cash invested and you get cash-on-cash return.
6. Projections and IRR
Grow rent, expenses, and property value at reasonable rates (2–3% is a common baseline). Model a sale in year 5 or 10, subtract selling costs and remaining loan balance, and you have proceeds. The internal rate of return (IRR) combines annual cash flow with the exit to give you a single levered return number.
7. Skip the spreadsheet
Every deal you underwrite by hand takes 30–60 minutes and reuses the same formulas. RE-SIM runs this exact pro forma in a Chrome side panel — paste a property address, optionally pull live rent and sales comps, and get NOI, cash flow, cash-on-cash, CapEx reserves, and a 10-year projection in seconds. It never reads the page you are on.