{
  "slug": "rental-hold-irr",
  "title": "Rental Hold Period IRR Calculator",
  "heading": "Rental Property IRR Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/rental-hold-irr",
  "summary": "Total return across cash flow, loan paydown and sale proceeds over your hold period.",
  "description": "Cash-on-cash measures one year; a rental's real return comes from four sources over a hold period — cash flow, principal paydown, appreciation, and the tax-deferred nature of the whole thing. This calculator projects rent growth, expense growth, and appreciation year by year, computes the loan balance at exit, deducts selling costs, and returns the internal rate of return and the equity multiple on your original cash. The IRR is what lets you compare a rental honestly against an index fund, because it accounts for when each dollar arrives rather than just how many there are.",
  "formula": "Year 0 flow = −(down + closing + rehab). Years 1..n = annual cash flow. Final year adds sale price × (1 − selling costs) − loan balance. IRR is the rate where the net present value of that series is zero.",
  "dateModified": "2026-08-25",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=rental-hold-irr",
  "inputs": [
    {
      "id": "price",
      "label": "Purchase price",
      "kind": "number",
      "hint": null,
      "default": 300000,
      "unit": "$",
      "min": 1000,
      "max": null
    },
    {
      "id": "downPct",
      "label": "Down payment",
      "kind": "number",
      "hint": null,
      "default": 25,
      "unit": "%",
      "min": 0,
      "max": 100
    },
    {
      "id": "closing",
      "label": "Closing + rehab",
      "kind": "number",
      "hint": null,
      "default": 15000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "rate",
      "label": "Loan rate",
      "kind": "number",
      "hint": null,
      "default": 7,
      "unit": "%",
      "min": 0.1,
      "max": null
    },
    {
      "id": "rent",
      "label": "Starting monthly rent",
      "kind": "number",
      "hint": null,
      "default": 2450,
      "unit": "$/mo",
      "min": 0,
      "max": null
    },
    {
      "id": "opexPct",
      "label": "Operating expenses",
      "kind": "number",
      "hint": null,
      "default": 38,
      "unit": "% of rent",
      "min": 0,
      "max": 90
    },
    {
      "id": "rentGrowth",
      "label": "Annual rent growth",
      "kind": "number",
      "hint": null,
      "default": 3,
      "unit": "%",
      "min": -5,
      "max": null
    },
    {
      "id": "expenseGrowth",
      "label": "Annual expense growth",
      "kind": "number",
      "hint": null,
      "default": 3.5,
      "unit": "%",
      "min": -5,
      "max": null
    },
    {
      "id": "appreciation",
      "label": "Annual appreciation",
      "kind": "number",
      "hint": null,
      "default": 3,
      "unit": "%",
      "min": -10,
      "max": null
    },
    {
      "id": "hold",
      "label": "Hold period",
      "kind": "number",
      "hint": null,
      "default": 10,
      "unit": "years",
      "min": 1,
      "max": 30
    },
    {
      "id": "sellPct",
      "label": "Selling costs",
      "kind": "number",
      "hint": null,
      "default": 7,
      "unit": "% of sale",
      "min": 0,
      "max": 20
    }
  ],
  "outputs": [
    {
      "id": "irr",
      "label": "Internal rate of return",
      "format": "percent",
      "hint": null,
      "primary": true
    },
    {
      "id": "multiple",
      "label": "Equity multiple on cash invested",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "totalProfit",
      "label": "Total profit over the hold",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "totalCashFlow",
      "label": "Cumulative cash flow",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "saleNet",
      "label": "Net proceeds at sale",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "principalPaid",
      "label": "Principal paid down by tenants",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "exitValue",
      "label": "Property value at exit",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Purchase price: 300000 $",
      "Down payment: 25 %",
      "Closing + rehab: 15000 $",
      "Loan rate: 7 %",
      "Starting monthly rent: 2450 $/mo",
      "Operating expenses: 38 % of rent",
      "Annual rent growth: 3 %",
      "Annual expense growth: 3.5 %",
      "Annual appreciation: 3 %",
      "Hold period: 10 years",
      "Selling costs: 7 % of sale"
    ],
    "outputs": [
      "Internal rate of return: 9.2%",
      "Equity multiple on cash invested: 2.31",
      "Total profit over the hold: $118,218.06",
      "Cumulative cash flow: $26,343.25",
      "Net proceeds at sale: $181,874.81",
      "Principal paid down by tenants: $31,922.14",
      "Property value at exit: $403,174.91"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter purchase price ($).",
      "Enter down payment (%).",
      "Enter closing + rehab ($).",
      "Enter loan rate (%).",
      "Enter starting monthly rent ($/mo).",
      "Enter operating expenses (% of rent).",
      "Enter annual rent growth (%).",
      "Enter annual expense growth (%).",
      "Enter annual appreciation (%).",
      "Enter hold period (years).",
      "Enter selling costs (% of sale).",
      "Read your internal rate of return 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": {
        "price": 180000,
        "downPct": 15,
        "closing": 9000,
        "rate": 7,
        "rent": 1475,
        "opexPct": 23,
        "rentGrowth": 1.7999999999999998,
        "expenseGrowth": 2.1,
        "appreciation": 1.7999999999999998,
        "hold": 6,
        "sellPct": 4.2
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "price": 300000,
        "downPct": 25,
        "closing": 15000,
        "rate": 7,
        "rent": 2450,
        "opexPct": 38,
        "rentGrowth": 3,
        "expenseGrowth": 3.5,
        "appreciation": 3,
        "hold": 10,
        "sellPct": 7
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "price": 480000,
        "downPct": 40,
        "closing": 24000,
        "rate": 7,
        "rent": 3925,
        "opexPct": 61,
        "rentGrowth": 4.800000000000001,
        "expenseGrowth": 5.6000000000000005,
        "appreciation": 4.800000000000001,
        "hold": 16,
        "sellPct": 11.200000000000001
      }
    }
  ],
  "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": "Why is IRR better than total profit?",
      "a": "Because it accounts for timing. Two deals returning the same dollars over five years and fifteen years are not equivalent, and IRR is the standard way to express that difference as a single annual rate you can compare against other investments."
    },
    {
      "q": "What appreciation rate should I use?",
      "a": "Something close to long-run local nominal growth, which historically has often tracked inflation plus a small margin in most markets. Recent hot-market growth rates are the worst possible input, because they embed conditions unlikely to persist over a ten-year hold."
    },
    {
      "q": "Should expense growth exceed rent growth?",
      "a": "Modelling expenses growing slightly faster is the conservative choice, and insurance and property tax increases in many markets have justified it. If you assume rents outrun costs forever, the model will show a return that no real property has ever delivered."
    },
    {
      "q": "Does this include tax on the sale?",
      "a": "No. Capital gains and depreciation recapture apply on a taxable sale, though a 1031 exchange can defer both. Treat the IRR as pre-tax and compare it to pre-tax returns from other assets for a fair comparison."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/rental-cash-flow",
    "https://www.revenuelab.fyi/toolbox/rental-cap-rate",
    "https://www.revenuelab.fyi/toolbox/brrrr"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Rental Hold Period IRR Calculator (https://www.revenuelab.fyi/toolbox/rental-hold-irr)"
}