METHODOLOGY

How Arys arrives at a deal recommendation

Arys is a first-pass underwriting assistant. This page documents the formulas, the confidence caps, the recommendation gates, and the areas that still require local verification before making an offer.

Rental formulas

The rental path is scored from recurring income, operating costs, debt service, DSCR, and cash-on-cash return.

FORMULA TRACE
  • annualGrossIncome = monthlyRent * 12
  • annualNOI = annualGrossIncome - annualOperatingExpenses
  • annualDebtService = monthlyDebtService * 12
  • annualCashFlow = annualNOI - annualDebtService
  • monthlyCashFlow = annualCashFlow / 12
  • dscr = annualNOI / annualDebtService
  • cashOnCashReturn = annualCashFlow / totalCashRequired
  • capRate = annualNOI / purchasePrice
  • Gross yield is annual rent divided by purchase price.
  • Cap rate and gross yield are not interchangeable metrics.
  • Zero rent remains a valid stress-test input, but it drops rent-support confidence and should fail the recommendation gates.

BRRRR formulas

The BRRRR path reuses income and expense math, then models refinance proceeds, cash recovery, and stabilized DSCR.

FORMULA TRACE
  • adjustedArv = arv * (1 - appraisalHaircutPct)
  • refinanceLoanAmount = adjustedArv * refiLtv
  • refiClosingCosts = refinanceLoanAmount * refiClosingCostPct
  • adjustedRehabCost = rehabCost * (1 + rehabOverrunPct)
  • totalCashRequired = downPayment + closingCosts + adjustedRehabCost + reserves
  • refinanceProceedsAfterPayoff = refinanceLoanAmount - originalLoanAmount - refiClosingCosts
  • maxCashOutAmount = totalCashRequired * maxCashOutPct
  • cashOutAtRefinance = min(totalCashRequired, maxCashOutAmount, max(0, refinanceProceedsAfterPayoff))
  • cashLeftInDeal = max(0, totalCashRequired - cashOutAtRefinance)
  • cashRecoveredPct = cashOutAtRefinance / totalCashRequired
  • effectiveCoC = cashLeftInDeal === 0 ? null : annualCashFlow / cashLeftInDeal
  • stabilizedDscr = annualNOI / annualDebtService
  • When projected cash left in the deal is zero, BRRRR cash-on-cash is treated as not meaningful instead of being forced to 100%.
  • Refinance closing costs, appraisal haircuts, seasoning months, reserve requirements, and rehab overruns are first-class assumptions in the public model.
  • The public BRRRR model assumes acquisition debt at purchase and a stabilized refinance, not rehab-draw interest or hard-money points.
  • Hard minimum: stabilized DSCR below 1.10 is blocked.
  • Balanced recommendation target: stabilized DSCR must reach 1.20 or higher to clear the public recommendation target.

Flip formulas

The flip path is scored from projected resale, sale costs, holding costs, net profit, margin, and projected ROI.

FORMULA TRACE
  • grossSalePrice = arv
  • totalSaleCosts = grossSalePrice * saleCostsPct
  • totalHoldingCosts = monthlyHoldingCosts * flipTimelineMonths
  • adjustedRehabCost = rehabCost * (1 + rehabOverrunPct)
  • baseProjectCost = purchasePrice + adjustedRehabCost + closingCosts + reserves
  • totalProjectCost = baseProjectCost + totalHoldingCosts
  • netProfit = grossSalePrice - totalSaleCosts - totalProjectCost
  • projectedRoi = netProfit / totalProjectCost
  • annualizedSimpleRoi = projectedRoi * (12 / flipTimelineMonths)
  • Flip ROI is labeled as projected ROI or annualized simple ROI, not IRR.
  • Flip is not recommended when projected net profit is zero or negative.
  • Flip holding costs exclude rental-only management and vacancy leakage.
  • The public flip model assumes purchase-loan carry only; it does not include hard-money points, rehab draw interest, or lender-specific fee stacks.

STR formulas

The STR path uses nightly rate and occupancy to build gross revenue, then applies the current standard operating-cost model before debt service. It is not yet a full hospitality expense stack.

FORMULA TRACE
  • annualGrossIncome = nightlyRate * 365 * occupancyRate
  • annualNOI = annualGrossIncome - annualOperatingExpenses
  • annualDebtService = monthlyDebtService * 12
  • annualCashFlow = annualNOI - annualDebtService
  • monthlyCashFlow = annualCashFlow / 12
  • dscr = annualNOI / annualDebtService
  • cashOnCashReturn = annualCashFlow / totalCashRequired
  • STR legality is not auto-verified from public inputs. Nightly rate and occupancy can support revenue modeling, but they do not prove legal viability.
  • Unknown STR regulation caps public data confidence at 50% and blocks a Buy verdict until the rule set is verified.
  • Restricted STR regulation caps public data confidence at 30% or below and blocks recommendation outright.
  • Public QA scenarios include an STR case with unknown regulation status so the math can be reviewed without overstating legal certainty.
  • A fuller hospitality expense model still needs cleaning, platform fees, utilities, permit costs, and lodging tax assumptions.
  • Until those STR-specific expenses are modeled directly, treat the STR path as gross-revenue underwriting rather than investor-grade net underwriting.

Confidence scoring and missing-data caps

Confidence is canonical. The UI reads the confidence object; it does not recalculate confidence in page components.

FORMULA TRACE
  • dataConfidence = weighted(compsScore, rentScore, completenessScore, varianceScore)
  • recommendationConfidence = weighted(winnerScore, scoreGap, stabilityScore)
  • subjectCompGap = abs(subjectPricePerSqft - medianCompPricePerSqft) / medianCompPricePerSqft
  • No comps caps data confidence at 20%.
  • If the winning rental or BRRRR path has no rent support, data confidence is capped at 50%.
  • If the winning STR path is missing nightly rate or occupancy, data confidence is capped at 50%.
  • If the winning STR path has unknown regulation status, data confidence is capped at 50%.
  • If the winning STR path is restricted, data confidence is capped at 30% or below.
  • If the winning flip or BRRRR path has fewer than 3 usable comps, data confidence is capped at 55%.
  • If the subject price per square foot is far outside comp support, confidence is capped again before surfacing a high label.

Recommendation gates

Highest score and recommendation are separate outputs. A strategy can lead on score and still be blocked from recommendation.

FORMULA TRACE
  • recommendation requires dataConfidence >= 50
  • recommendation requires the Balanced preset to pass
  • rental requires monthlyCashFlow > 0 and dscr >= 1.10
  • brrrr requires monthlyCashFlow > 0 and stabilizedDscr >= 1.10
  • brrrr Balanced target requires stabilizedDscr >= 1.20
  • flip requires netProfit > 0
  • str requires monthlyCashFlow > 0 and dscr >= 1.10
  • str requires strRegulationStatus = verified_allowed before a recommendation can become Buy
  • If data confidence falls below 40% or required inputs are missing, the verdict downgrades to Not Enough Data.
  • If no strategy clears the recommendation gates, the canonical verdict is Pass even when one strategy has the top score.
  • If STR regulation is unknown, the strategy can still be modeled for QA but it cannot become a Buy recommendation.
  • If STR regulation is restricted, the canonical verdict should not surface as Buy.
  • Public pages should never translate a Pass verdict into buy language.

Demo data and public QA routes

Demo and fallback states should be obvious. They exist so the product stays inspectable, not to masquerade as live underwriting.

  • Public sample cards use a capped demo confidence label instead of a live high-confidence claim.
  • Demo banners explicitly say the numbers are sample values and not live underwriting.
  • The public QA route at /analysis/demo exposes stable scenarios and formula traces for rental, STR, flip, and BRRRR review.
Arys provides decision-support estimates, not financial, legal, tax, or investment advice. Verify local regulations, operating costs, financing terms, and exit assumptions before making an offer.