Opportunities Engine
How recommendations are generated
Every property on the Opportunities page passes through two layers: a fast classifier that surfaces candidates from current metrics, and a scenario engine that validates whether the recommended action actually improves portfolio total return. A property is only recommended when both layers agree.
The two-layer architecture
Classifier-only recommendations have a blind spot: they score properties on current yield (DSCR, cash-on-cash, cash flow) and can't see appreciation, principal paydown, or whether redeploying freed capital would actually leave you better off. The engine closes that gap.
- Classifier — threshold rules on current metrics. Fast, static, surfaces candidates. Blind to equity growth, rent projection, and rate scenarios.
- Engine — scenario search and year-1 total-return validation. Authoritative. A property is only recommended when its classifier verdict still holds up after the engine models the action and compares portfolio total return before vs. after.
Candidates the classifier flags but the engine rejects are demoted into the Hold section with a short diagnostic explaining why the recommendation didn't survive validation — so you never lose the reasoning.
Per-property classifier
Each property is evaluated against three buckets in order — first match wins. All thresholds are configurable in Settings.
1. Sell / 1031 Exchange
Trips when at least 2 of 3 criteria are true:
- DSCR < 1.20 — fragile debt coverage (only counts if the property has a mortgage)
- Cash-on-cash < 5.0% — inadequate cash yield
- Monthly cash flow < $200 — or negative
Confidence is strong when all 3 trip, moderate when 2 do. Classifier verdicts are then passed through the engine's year-1 total-return gate (see below) before a sell card actually renders.
2. Cash-Out Refi
Requires DSCR qualifies AND ≥ 1 other criterion:
- DSCR ≥ 1.35 — mandatory gate (or free-and-clear, which auto-qualifies)
- LTV ≤ 70% — substantial equity available to extract
- ROE < 8.0% — equity underperforming, could be redeployed
Confidence is strong at all 3, moderate at 2. The engine then runs a scenario search across viable refinance options at current rates and only surfaces the card if at least one scenario improves both portfolio ROE and year-1 total return after the cost of the new debt.
3. Hold & Monitor
The default bucket when neither sell nor refi criteria trip. Confidence is strong only when cash flow is ≥ $200 AND ROE ≥ 8% — otherwise moderate.
Blanket loan classifier
When properties are pledged to a blanket loan (a commercial loan secured by more than one property), the engine evaluates the entire loan position as a single unit — one recommendation per loan instead of one per property. The same three-bucket framework applies to combined DSCR, cash-on-cash, and cash flow across all linked properties, with one additional modifier:
- Balloon urgency — if the loan's balloon is due within 24 months, it counts as an extra sell trigger (when at least one sell criterion is already tripping) and can independently trigger a refi recommendation even if the other refi criteria don't all trip.
The engine's total-return gate
Both the refi and sell paths apply the same year-1 total-return test. The engine compares the portfolio's current year-1 total return (projected annual cash flow + equity growth) against what it would be after executing the action and redeploying any freed capital at your target ROE.
For refinances, the engine also runs a full scenario search across viable rate/term combinations and only picks a recommendation when at least one scenario passes the gate and respects your minimum DSCR. Candidates that fail the gate get demoted into the Hold section with a diagnostic explaining why — Peachtree and Mardale are examples of properties that can trip classifier rules yet still beat a sale or refinance on a total-return basis because their appreciation and principal paydown do more work than current yield suggests.
Independent flags
A few signals surface outside the three buckets:
- Negative cash flow warning — any property with monthly cash flow below $0 is flagged in the Attention strip, even if it only trips 1 sell criterion and lands in Hold.
- Balloon urgency — loans with a balloon due in ≤ 24 months get a timing badge regardless of which bucket they land in.
Configurable thresholds
Every threshold below is editable from Settings. Defaults are what most investors start with; tune them to your portfolio's risk tolerance.
| Setting | Default | Used by |
|---|---|---|
| sellDscrThreshold | 1.20 | Sell criterion 1 |
| sellCashOnCashMin | 5.0% | Sell criterion 2 |
| sellCashFlowMin | $200/mo | Sell criterion 3 |
| refiDscrMin | 1.35 | Refi DSCR gate |
| refiMaxLtv | 70% | Refi criterion 2 |
| refiRoeThreshold | 8.0% | Refi criterion 3 / Hold confidence |
| targetROE | user-set | Engine redeployment gate |
| maxCashOutLtv | user-set | Engine refi scenario search |
| minDscrThreshold | user-set | Engine redeployed DSCR floor |