{
  "slug": "gross-up-vacancy-noi-stress-test",
  "title": "Vacancy Stress Test / NOI Sensitivity Calculator",
  "heading": "Vacancy & NOI Stress Test Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/gross-up-vacancy-noi-stress-test",
  "summary": "See how NOI, DSCR, and cash flow hold up if vacancy or rent falls below projection.",
  "description": "Underwriting a deal at trailing or projected 95% occupancy and current market rent is fine as a base case, but the deal that only works at that exact assumption isn't a deal — it's a bet. This calculator lets you stress-test NOI by applying a vacancy shock and a rent-decline shock simultaneously, then recomputes NOI, the resulting DSCR against a fixed debt service figure, and how much cushion (or shortfall) remains. Lenders commonly underwrite to a minimum stressed vacancy of 7-10% even in tight markets, and many require a debt service coverage ratio that still clears 1.0x at a stressed rent roll before approving a loan. Running your own numbers through the same lens before you buy — not just at the lender's minimum stress level, but at a level that reflects real recession-era vacancy and rent softness for the asset type and market — separates deals with real margin for error from ones that only work if everything goes right.",
  "formula": "Stressed gross income = Base gross income × (1 − vacancy shock%) × (1 − rent decline%); Stressed NOI = Stressed gross income − operating expenses; Stressed DSCR = Stressed NOI ÷ annual debt service.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=gross-up-vacancy-noi-stress-test",
  "inputs": [
    {
      "id": "baseGrossIncome",
      "label": "Base annual gross rental income",
      "kind": "number",
      "hint": null,
      "default": 240000,
      "unit": "$",
      "min": 1,
      "max": null
    },
    {
      "id": "operatingExpenses",
      "label": "Annual operating expenses",
      "kind": "number",
      "hint": null,
      "default": 96000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "annualDebtService",
      "label": "Annual debt service (P&I)",
      "kind": "number",
      "hint": null,
      "default": 95000,
      "unit": "$",
      "min": 1,
      "max": null
    },
    {
      "id": "vacancyShock",
      "label": "Additional vacancy stress",
      "kind": "number",
      "hint": null,
      "default": 10,
      "unit": "%",
      "min": 0,
      "max": 50
    },
    {
      "id": "rentDeclineShock",
      "label": "Rent decline stress",
      "kind": "number",
      "hint": null,
      "default": 5,
      "unit": "%",
      "min": 0,
      "max": 50
    }
  ],
  "outputs": [
    {
      "id": "stressedDscr",
      "label": "Stressed DSCR",
      "format": "decimal",
      "hint": null,
      "primary": true
    },
    {
      "id": "stressedNoi",
      "label": "Stressed NOI",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "baseDscr",
      "label": "Base-case DSCR",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "baseNoi",
      "label": "Base-case NOI",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "noiDropPct",
      "label": "NOI decline under stress",
      "format": "percent",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Base annual gross rental income: 240000 $",
      "Annual operating expenses: 96000 $",
      "Annual debt service (P&I): 95000 $",
      "Additional vacancy stress: 10 %",
      "Rent decline stress: 5 %"
    ],
    "outputs": [
      "Stressed DSCR: 1.15",
      "Stressed NOI: $109,200",
      "Base-case DSCR: 1.52",
      "Base-case NOI: $144,000",
      "NOI decline under stress: 24.2%"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter base annual gross rental income ($).",
      "Enter annual operating expenses ($).",
      "Enter annual debt service (p&i) ($).",
      "Enter additional vacancy stress (%).",
      "Enter rent decline stress (%).",
      "Read your stressed dscr on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "baseGrossIncome": 145000,
        "operatingExpenses": 58000,
        "annualDebtService": 57000,
        "vacancyShock": 6,
        "rentDeclineShock": 3
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "baseGrossIncome": 240000,
        "operatingExpenses": 96000,
        "annualDebtService": 95000,
        "vacancyShock": 10,
        "rentDeclineShock": 5
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "baseGrossIncome": 385000,
        "operatingExpenses": 154000,
        "annualDebtService": 152000,
        "vacancyShock": 16,
        "rentDeclineShock": 8
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "What stress levels should I actually use?",
      "a": "A common starting point is 5-10% additional vacancy stress and 3-7% rent decline stress layered on top of your base case, roughly modeling a moderate recession scenario for most residential and light commercial assets. Higher-volatility asset types like hospitality or coworking warrant more severe stress, sometimes 20%+ combined income decline."
    },
    {
      "q": "What DSCR should survive the stress test?",
      "a": "Most experienced underwriters want stressed DSCR to stay at or above 1.0x — meaning the property can still cover its debt service even in the stress scenario — with 1.1-1.2x as a more comfortable margin. A deal that goes underwater on DSCR at a mild 10-15% combined income stress has very little real margin for error."
    },
    {
      "q": "Does this account for expenses rising during a downturn?",
      "a": "No — this version holds operating expenses fixed and stresses only income, which is actually optimistic since expenses like insurance and bad debt often rise in a downturn even as income falls. For a more conservative stress test, also increase the operating expense input by 5-10% to reflect that dynamic."
    },
    {
      "q": "Is this the same test lenders run?",
      "a": "It's similar in concept but lenders have their own specific stress underwriting standards that vary by loan program and property type, often codified in their term sheet or investment committee guidelines. Use this as a personal sanity check before you're deep into a deal, not as a substitute for the lender's actual underwriting."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/dscr-loan-sizing",
    "https://www.revenuelab.fyi/toolbox/cap-rate-expansion-sensitivity",
    "https://www.revenuelab.fyi/toolbox/equity-multiple-vs-irr"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Vacancy Stress Test / NOI Sensitivity Calculator (https://www.revenuelab.fyi/toolbox/gross-up-vacancy-noi-stress-test)"
}