{
  "slug": "repair-vs-replace-roof",
  "title": "Repair vs Replace Roof Calculator",
  "heading": "Repair vs Replace Roof Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/repair-vs-replace-roof",
  "summary": "Compare patching your roof now against a full replacement, factoring in remaining life.",
  "description": "A roof repair buys time cheaply but a roof nearing the end of its life may need multiple repairs before a full replacement becomes unavoidable anyway. This tool compares a single repair cost against replacement cost, spread over the roof's remaining useful life, and estimates how many repair cycles you're likely to pay for before replacement is forced regardless.",
  "formula": "Repair Path Cost = Repair Cost × Expected Repair Cycles before failure. Replace Path Cost = Replacement Cost amortized over new roof life.",
  "dateModified": "2026-09-06",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=repair-vs-replace-roof",
  "inputs": [
    {
      "id": "repairCost",
      "label": "Repair cost",
      "kind": "number",
      "hint": null,
      "default": 1200,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "replaceCost",
      "label": "Full replacement cost",
      "kind": "number",
      "hint": null,
      "default": 14000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "roofAge",
      "label": "Current roof age",
      "kind": "number",
      "hint": null,
      "default": 18,
      "unit": "yrs",
      "min": 0,
      "max": null
    },
    {
      "id": "typicalLife",
      "label": "Typical roof lifespan",
      "kind": "number",
      "hint": null,
      "default": 22,
      "unit": "yrs",
      "min": 1,
      "max": null
    },
    {
      "id": "expectedRepairCycles",
      "label": "Expected repairs before replacement needed",
      "kind": "number",
      "hint": null,
      "default": 2,
      "unit": null,
      "min": 1,
      "max": 10
    }
  ],
  "outputs": [
    {
      "id": "winner",
      "label": "Better financial move",
      "format": "raw",
      "hint": null,
      "primary": true
    },
    {
      "id": "remaining",
      "label": "Estimated years of roof life left",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "repairPathCost",
      "label": "Repair path total cost",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "replacePathCost",
      "label": "Replace path amortized cost",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Repair cost: 1200 $",
      "Full replacement cost: 14000 $",
      "Current roof age: 18 yrs",
      "Typical roof lifespan: 22 yrs",
      "Expected repairs before replacement needed: 2"
    ],
    "outputs": [
      "Better financial move: Repair",
      "Estimated years of roof life left: 4",
      "Repair path total cost: $2,400",
      "Replace path amortized cost: $2,545"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter repair cost ($).",
      "Enter full replacement cost ($).",
      "Enter current roof age (yrs).",
      "Enter typical roof lifespan (yrs).",
      "Enter expected repairs before replacement needed.",
      "Read your better financial move 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": {
        "repairCost": 700,
        "replaceCost": 8500,
        "roofAge": 11,
        "typicalLife": 13,
        "expectedRepairCycles": 1
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "repairCost": 1200,
        "replaceCost": 14000,
        "roofAge": 18,
        "typicalLife": 22,
        "expectedRepairCycles": 2
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "repairCost": 1900,
        "replaceCost": 22500,
        "roofAge": 29,
        "typicalLife": 35,
        "expectedRepairCycles": 3
      }
    }
  ],
  "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": "How many repairs are typical before a roof needs full replacement?",
      "a": "Once a roof passes about 80% of its rated life, most roofers see 2-3 targeted repairs (flashing, isolated shingle sections) before wide-spread failure forces a full tear-off."
    },
    {
      "q": "Does insurance change this math?",
      "a": "Yes — storm-damage claims can cover full replacement even on an older roof, which usually makes replacement free or near-free relative to a self-funded repair."
    },
    {
      "q": "Should I replace before selling my house?",
      "a": "If the roof is past 75% of its life, buyers and inspectors will flag it; replacing beforehand can be cheaper than the price concession a buyer will negotiate."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/metal-vs-shingle-roof-cost",
    "https://www.revenuelab.fyi/toolbox/repair-vs-replace-appliance"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Repair vs Replace Roof Calculator (https://www.revenuelab.fyi/toolbox/repair-vs-replace-roof)"
}