Skip to content
Technical white paper

How Underwrite computes every number it shows.

A broker document can be read into assumptions. The return is calculated from those assumptions, and the method is on this page.

392
fixed test set
138
Phase 3 modules
Same
result each time

Every model is checked against a fixed test set. The same inputs give the same answer.

The same inputs always produce the same outputs.

How the return is calculated

Underwrite can turn broker material into assumptions. A figure tied to a sentence keeps that sentence, and a figure without one is marked for you to check. From there the return is calculated: IRR, coverage, NOI, sale value and the waterfall. The same deal always gives the same result.

The method
assumptions + the model = pro forma, debt, returns, memo
a document fills assumptions, each with its sentence or a mark to check
the same assumptions always give the same result

Pro forma construction

Revenue and expenses are built year by year. Vacancy is applied to gross potential income, property management and reserves scale with EGI, and each line compounds from the Year 1 assumption.

Operating build
residentialGPR(y) = units * monthlyRent * 12 * (1 + rentGrowth)^(y - 1)
retailGPR(y) = retailSF * rentPerSF * (1 + rentGrowth)^(y - 1)
EGI(y) = GPR(y) + otherIncome(y) - vacancy(y)
NOI(y) = EGI(y) - operatingExpenses(y)

Expense recoveries

Until you include them, operating expenses are carried gross. Included, what commercial tenants reimburse is added to income as its own line. The pool is each recoverable expense line, grown as above, times the commercial share of the building's expenses (100% with no apartments; on a mixed-use building the commercial share of Year 1 gross potential rent unless you enter it). A tenant's share is its SF over the commercial area unless you enter it, so space nobody leases is carried by the landlord. Recoveries are paid on occupied space only, so vacancy and lease-up reduce them, and a tenant pays nothing while its space sits empty between leases. The total before admin fees never exceeds the pool. The management fee and reserves stay a percent of income before recoveries, so including recoveries moves NOI by exactly the amount recovered. Variable expenses are not grossed up for occupancy and there is no year-end reconciliation.

Recoveries, per payer and year
pool(y) = recoverable lines(y) * commercialExpenseShare
NNN = share * pool(y) + adminFee * share * CAM(y)
modified gross, base year = share * max(0, pool(y) - pool(base year))
modified gross, expense stop = max(0, share * pool(y) - stop per SF * SF)
fixed CAM = min(charge per SF * SF * (1 + growth)^(y - start), share * CAM(y))
CAM cap: controllable CAM(y) <= controllable CAM(base) * (1 + cap)^(y - base)
recoveries(y) = sum over payers of amount * (1 - commercial vacancy(y))

Sources and uses

Closing costs and origination fees are explicit. Debt is sized against purchase price, while the equity check funds the gap between total uses and loan proceeds.

Closing stack
closingCosts = purchasePrice * closingCostPct
loanAmount = purchasePrice * LTV
originationFee = loanAmount * originationFeePct
equity = purchasePrice + closingCosts + originationFee - loanAmount

Debt schedule

The base loan is a fixed-rate amortizing mortgage with a balloon at term. Optional mezzanine and refinance overlays are modeled separately, then rolled into blended DSCR and exit payoff logic.

Annual debt service
PMT = loanAmount * (rate / 12) / (1 - (1 + rate / 12)^(-months))
annualDebtService = PMT * 12
DSCR(y) = NOI(y) / annualDebtService(y)

Exit value

Exit value uses forward NOI, the year after the sale, because a buyer prices next year's income.

Sale proceeds
grossSale = NOI(hold + 1) / exitCapRate
netSale = grossSale * (1 - sellingCostPct)
exitCash = netSale - loanBalance(hold)

An exit cap below the entry cap is a compression bet, and the desk and the memo flag it.

Equity waterfall

The waterfall distributes operating cash and exit cash through return of capital, preferred return, catch-up tiers, and promote. Losing deals do not receive phantom preferred return.

Waterfall priority
1. Return LP capital
2. Pay compounded preferred return
3. Split catch-up tiers by hurdle
4. Split residual profit by promote structure

IRR computation

Project IRR is solved from the equity cash-flow stream. The solver uses Newton-Raphson with each step clamped, so a distressed deal cannot overshoot past -99%; a stream that does not converge, or lands above 500%, reports no IRR rather than a number.

IRR identity
sum(CF(t) / (1 + IRR)^t) = 0
initial guess = 15%
step clamp = -99% to 5,000%
no IRR reported above 500%

Returns decomposition

Underwrite separates the return story into yield, appreciation, leverage premium, equity buildup, paydown, and sponsor economics. Two identical IRRs can have very different risk profiles.

Return attribution
operatingYield = average NOI during hold / purchasePrice
appreciation = annualized net sale growth over basis
unleveredIRR = IRR(purchase + closing, NOI after leasing capital, net sale)
leveragePremium = equityIRR - unleveredIRR

Sensitivity analysis

The sensitivity suite reruns the full engine under changed assumptions: tornado bars, exit-cap and rent-growth heat tables, hold-period curves, vacancy curves, rate curves, DSCR stress, and Monte Carlo.

Sensitivity principle
for each scenario:
nextInputs = applyShock(baseInputs)
nextResults = run(nextInputs)
impact = nextIRR - baseIRR

Validation guards

Validation guards cover critical input errors, property-type-aware operating bands, lender thresholds, and cross-field consistency risks such as stacked leverage, refinance dependency, and double-growth bets.

Cross-field example
stackedLeverageRisk fires when:
LTV is high
DSCR cushion is thin
exit cap is below entry cap

Verdict and grade

The verdict is two rules: clear the return hurdle, and keep every year of debt service covered. The grade is broader, scoring returns, MoIC, DSCR, leverage, cap arbitrage, and LP share, and never moves the verdict.

Verdict rule
PURSUE if projectIRR >= 15.00% and minDSCR >= 1.00x
all-equity deals bypass DSCR because no debt service exists

Every figure comes from a named engine function; this page documents the core ones.

What does and does not leave your browser

Every figure on the underwriting desk is calculated in your browser, and the marketing pages show the same model's output. A deal saved in the browser's library lives in its local storage. Share links and the memo link encode deal data into the URL, so opening one sends the deal to Underwrite's server in the request line, which the hosting platform's access log keeps.

Without sign-in, your deal leaves the browser on four occasions, each only when you ask: three of the four AI features, and a link that carries the deal. With Underwrite Core there are two more, also only when you ask: saving a deal to your account sends it to Underwrite's server, which keeps it privately under the account, and making a share link sends the deal to Underwrite's server, which signs the link and keeps no copy of the deal. One more path sends the deal's ZIP and a digest of its link: where this site has it set up, Public rent context sends the five-digit ZIP when you press its Look up control, and, while its figures are on the desk and can travel on a link here, sends them back with the server's token for them and a one-way digest of the deal's memo or share link that does not contain the deal, right after the lookup, after each pause in editing and when you copy a link, so the server can sign the figures to that deal. Nothing else about the deal goes with either. With Underwrite Core, making a share link sends the figures and the server's token for them with the deal itself, as making a share link already sends the deal. The parser sends the document or text you hand it and returns extracted values, each with the sentence it was read from or a hand-verify flag where the model could not quote one. Those quotes are session state on the desk: they are not written into a saved deal or a share link, and tenant rows from a rent roll carry none. A comp file you read on the desk goes the same way and returns rows, each with the line it came from, which code sets beside the deal's assumptions without changing them, unless you click to use a comp median. The AI deal review and the memo's executive summary send the deal's inputs and the engine's results and return prose about them, checked against the engine before it is shown. The parser changes inputs, and the engine recomputes from them as from a typed value. No model computes an output: not an IRR, a multiple, a verdict or a grade.

Confidential Mode turns the four AI features off (the parser, comp reading, the AI deal review and the memo's AI summary), on the desk and on the memo page, along with share links and the memo link that would carry deal data in its URL, and Public rent context's ZIP lookup where it is set up, and leaves manual underwriting fully usable. On Buyer's first read (/first-read) the same switch stops the page from sending a document to the parser, and the page says which of the site's own requests still load.

What is read

Source quotes

A quote appears only when the server found the sentence in your pasted or spreadsheet text and it states the value. It stays at that field for the session that parsed it. Every other value is flagged with the reason, or says how the server computed it. The server passes a PDF to the model without reading its text, so every PDF row is flagged and its sentence is the model’s account of the document, not a checked quote. Quotes are not carried into a saved deal or a share link, and tenant rows have none.

Confidential Mode

It turns off the parser, comp reading, the AI review, the memo's AI summary, share links and memo links, and the public rent lookup where it is set up. Everything else keeps computing in your browser.

Source trail

Source trail walks the IRR back through the cash flows and revenue assumptions to the seller’s sentence on rent. It shows a calculation and its inputs. It does not cite a source for every figure. The desk uses the same tool.

Inside the IC memo

  1. 01Deal Strength Score
  2. 02Monte Carlo Distribution
  3. 03Sponsor Co-Invest Sweep
  4. 04Stress Test Matrix
  5. 05Lender Risk Rating
  6. 06Refinance Rate Risk
  7. 07Capital Stack Visualization
  8. 08GP Promote Yield
  9. 09Reserve Adequacy
  10. 10Sale vs Refinance Decision
  11. 11Real Returns
  12. 12LP Suitability Index

Model boundaries

The engine does not model highly bespoke tax structures, unusual credit agreements or custom partnership terms, and it takes no enterprise data feeds. Those belong in analyst, counsel or firm-specific review.

Read the model-boundary document

Worked example: Cayuga Commons

Cayuga Commons is the regression anchor, the deal that detects engine drift. It exercises the operating build, debt service, exit value, waterfall, verdict and memo.

Cayuga Commons anchor
purchase price = $8,500,000
senior debt = 65% LTV at 6.25%
hold = 7 years
exit cap = 6.50%
verdict = PURSUE, mixed-use
Run Cayuga Commons in the tool