Every number in your report is either a direct data-provider read, a deterministic computation we own, or a sanity-gated narrative. Here is the full breakdown — section by section.
We binary-search the purchase price at which monthly cash flow is approximately $0, given today's 30-year fixed rate and the property's estimated rent. It is the single number that answers the question most investor calculators sidestep: at what price does this deal stop losing money?
Assumptions baked in: 20% down, 30-year amortization, 1.5% annual tax/insurance load on purchase price, $150/mo maintenance reserve, 5% vacancy. Jurisdiction-specific property tax overrides the flat load where we model it (see § 05).
lib/calculations.ts#calculateBreakEvenPrice
Standard US mortgage amortization, monthly compounding: P × (r × (1+r)^n) / ((1+r)^n − 1). The same formula your bank uses — not an approximation.
Monthly net cash flow = gross rent × (1 − vacancy) − mortgage payment − expenses. Cash-on-cash return = annual net cash flow ÷ (down payment + rehab budget). Five-year IRR solves the internal rate of return on cash contributed versus cash + equity at year five.
DSCR = annual NOI ÷ annual debt service. Most DSCR lenders require 1.25× or higher; some will underwrite to 1.0× with pricing adjustments. Below 1.0× = negative-cashflow deal — the property cannot service its own debt.
A single AVM figure is the weakest link in any underwrite, so we triangulate. Value runs a cascade: Rentcast AVM → sale-comp median (same-bedroom, ~1 mile) → tax-assessment grown at jurisdictional rate → last sale price grown by market appreciation. When the spread between the highest and lowest estimate exceeds 50% of the subject price, we cap the verdict at MARGINAL — a confident-looking "DEAL" label on top of a wildly uncertain value is worse than the honest hedge.
Rent gets the same treatment: the Rentcast rent AVM is compared against the median of live rent comps. Divergence of more than 25% attaches a visible warning so you can verify whole-unit rent with a local property manager before trusting the cash-flow math.
Signals that stale out of the cascade: sales older than seven years are dropped entirely (a 2012 sale projected forward at today's zip trend is not a credible current-value anchor), and for qualifying older sales we cap extrapolation at five years of compounded growth. Tax-assessment readings are excluded when assessment / AVM > 10× — this guard catches building-level assessments that Rentcast occasionally tags to individual NYC units (e.g., a $14M building-roll assessment on a $223K Bronx apartment).
Trend-divergence cap: when the zip-level rent growth is negative but price growth is bullish, the five-year wealth projection clamps annual appreciation at 3%. Contradictory trends rarely coexist for long; extrapolating both at face value ships an unrealistic wealth number.
Flat "1.2% of value" tax math is the single biggest source of cash-flow error in generic calculators. We model state and city rules where they materially change the number: California Prop 13 (tax basis resets at sale, then grows 2%/yr), Florida Save-Our-Homes (3% or CPI cap for homesteaded properties, reassessed at sale), Texas uncapped annual reassessment, Baltimore City composite rate, and NYC class-2 overlays for certain boroughs.
Assessment-to-market-value ratio varies by state. Most states assess below full market (roughly 85%); we apply a 1.15× multiplier to Rentcast's latest_tax_ assessment to back out the implied market value. Florida is the exception — it assesses at 100% of just value by statute, so the FL multiplier is 1.0× to avoid overstating market value by 15%.
DC is handled specially for short-term-rental math (see § 08 — 90-night cap reshapes STR occupancy), not property-tax math. States without a modeled rule fall back to the national average, and the report footer surfaces the caveat so you can verify against the county assessor.
Rentcast HOA captures are noisy at the unit level — one listing shows $400/mo, the unit next door shows $1,200, both in the same building. For a short pilot list of known condominium buildings (currently Jefferson House in DC and Spinnaker Bay in Baltimore) we carry an observed monthly HOA average in a reference table and flag the listing HOA as an outlier when it reads more than 15% above that average. The pilot list grows as we verify additional buildings from first-hand filings; until then, most addresses still rely on the per-listing Rentcast figure.
When Rentcast returns an "Apartment" property type for a pilot-list condo building, we normalize it to "Condo" — you are buying a deeded unit, not a leasehold.
Co-operative units are a different asset class from condos — buyers hold shares in a corporation, not a deeded unit, and building boards gate sublets, down-payment minimums, and renovation scope. None of the numbers we compute model those constraints, so we detect the pattern and warn rather than pretend otherwise.
Heuristic fires on a NYC-borough address with an apartment/condo property type and either (a) a tax-assessment-to-AVM ratio above 10× (co-op shares routinely carry building-level assessments), or (b) a pre-1970 build year (most NYC pre-war "apartments" are co-ops by default). When either triggers, the report surfaces a co-op warning asking you to verify the building's bylaws and sublet policy before underwriting.
Generic short-term-rental estimators assume a 60% stabilized occupancy rate. That fits most markets; it does not fit the few where the local government caps STR nights. Washington DC is the clearest example: the STR Regulation Act caps non-primary-residence listings at 90 nights per year, which is roughly 24.7% occupancy — less than half the default assumption.
For DC addresses we scale STR revenue and occupancy together down to the 90-night ceiling so the fixes card, the STR-vs-LTR monthly gross, and the annualized figure all agree. Other jurisdictions where STR is outright prohibited for non-owner-occupants (NYC Local Law 18, several CA coastal cities) surface a warning instead of a number.
Insurance estimate uses NAIC state-level homeowners premium averages, scaled linearly by dwelling value. A flood-zone add-on applies when the property sits in a FEMA Special Flood Hazard Area — queried live from the FEMA National Flood Hazard Layer REST API using the property's geocoded coordinates.
Climate hazard scores (hurricane, wildfire, heat, drought, tornado) are state-level heuristics, not address-level. Use them as a starting point for insurance-shopping, not a final quote.
30-year and 15-year fixed rates are pulled from the Freddie Mac Primary Mortgage Market Survey, refreshed weekly. Fed funds rate from the FRED API. An investor premium (typically +75 bps) is layered over the PMMS benchmark to reflect real DSCR-loan pricing, not owner-occupant pricing.
Property details and rent estimates come from Rentcast. Sale comparables are filtered to same-bedroom-count properties within the same city, deduped by address key, and commercial-type records are excluded from the ARV pool.
After the math finishes and the composite score is set — but before any AI touches the report — we run a pure-code gate over the structured output. Each rule is a deterministic contradiction check the code would otherwise let slip through:
dealScore === 0 (reject) with positive final-year wealth contradicts itself and blocks the report.Rules above at FAIL severity block report delivery — the API returns a 502 and the report is not shown. Separately, two WARN-severity rules (DSCR outside the 0.4–3.0 band, GRM outside 4–40, or HOA = $0 on a condo) attach visible flags without blocking so you can see the model's own uncertainty. Zero API cost. Runs in under a millisecond.
lib/invariantCheck.ts#runInvariantCheck
The 3-fix diagnosis, negotiation scripts, and inspection red flags are written by Anthropic. The AI never calculates numbers — every financial value (breakeven price, STR revenue estimate, 70%-rule flip offer) is computed by our code and passed into the prompt as a fixed input. The model's job is narration and strategy ordering, not math.
By the time Anthropic sees the data, it has already cleared the invariant gate (§ 11) and every value has been clamp-corrected against the triangulation cascade (§ 04). The narrator is effectively reviewing a pre-validated report before shaping it into prose — so a contradictory number can never reach the narrative, because it never reaches the narrator.
Photo red-flag review uses the same Anthropic model with vision input. Findings are observational only — the model is instructed not to speculate about anything not directly visible in frame.
Fix 1 = lowest-effort path. Fix 2 = value-add or structural change. Fix 3 = strategic pivot.
We can't tell you any single report is correct — no AVM-based tool honestly can. What we can tell you:
Accuracy backtest results will publish here once we have enough historical reports to run a meaningful sample (target: quarterly after launch).
Not financial advice. Not an appraisal. Not a substitute for a licensed inspection, a full underwriting review, or consultation with a qualified professional.
Rent and value estimates have ranges of uncertainty inherent to any AVM. Before closing on a property, verify the numbers with a local agent, lender, or CPA.
The report is a starting point for diligence, not the end of it. If something looks off, email us — we'll walk through the numbers with you.