{
  "slug": "group-block-attrition-cost",
  "title": "Group Block Attrition Cost Calculator",
  "heading": "Group Block Attrition Cost Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/group-block-attrition-cost",
  "summary": "What a group's room-block pickup shortfall costs — and what attrition fees recover.",
  "description": "Group and meeting contracts set an attrition threshold — usually 80-90% of the blocked rooms — below which the group owes damages for rooms they reserved but didn't fill. This calculator compares actual pickup against the block size and threshold, calculates the shortfall, and applies the contracted attrition fee (usually charged at the group rate minus an allowance for costs the hotel avoided, like housekeeping on unsold rooms) to show what the group owes and what the hotel actually recovers versus what full pickup would have generated.",
  "formula": "Attrition Rooms = max(0, Threshold Rooms − Actual Pickup). Attrition Fee Owed = Attrition Rooms × Group Rate × (1 − Cost Offset %).",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=group-block-attrition-cost",
  "inputs": [
    {
      "id": "blockSize",
      "label": "Contracted room block",
      "kind": "number",
      "hint": null,
      "default": 200,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "threshold",
      "label": "Attrition threshold",
      "kind": "number",
      "hint": null,
      "default": 85,
      "unit": "%",
      "min": 0,
      "max": 100
    },
    {
      "id": "actualPickup",
      "label": "Actual rooms picked up",
      "kind": "number",
      "hint": null,
      "default": 140,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "groupRate",
      "label": "Contracted group rate",
      "kind": "number",
      "hint": null,
      "default": 175,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "costOffset",
      "label": "Avoided-cost offset (housekeeping etc.)",
      "kind": "number",
      "hint": null,
      "default": 15,
      "unit": "%",
      "min": 0,
      "max": 100
    }
  ],
  "outputs": [
    {
      "id": "feeOwed",
      "label": "Attrition fee owed by group",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "attritionRooms",
      "label": "Rooms short of threshold",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "totalRecovered",
      "label": "Total hotel revenue recovered",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "shortfallVsFull",
      "label": "Shortfall vs full block pickup",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Contracted room block: 200",
      "Attrition threshold: 85 %",
      "Actual rooms picked up: 140",
      "Contracted group rate: 175 $",
      "Avoided-cost offset (housekeeping etc.): 15 %"
    ],
    "outputs": [
      "Attrition fee owed by group: $4,462.50",
      "Rooms short of threshold: 30",
      "Total hotel revenue recovered: $28,962.50",
      "Shortfall vs full block pickup: $6,037.50"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter contracted room block.",
      "Enter attrition threshold (%).",
      "Enter actual rooms picked up.",
      "Enter contracted group rate ($).",
      "Enter avoided-cost offset (housekeeping etc.) (%).",
      "Read your attrition fee owed by group 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": {
        "blockSize": 120,
        "threshold": 51,
        "actualPickup": 84,
        "groupRate": 105,
        "costOffset": 9
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "blockSize": 200,
        "threshold": 85,
        "actualPickup": 140,
        "groupRate": 175,
        "costOffset": 15
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "blockSize": 320,
        "threshold": 100,
        "actualPickup": 224,
        "groupRate": 280,
        "costOffset": 24
      }
    }
  ],
  "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 attrition threshold usually below 100% of the block?",
      "a": "Contracts build in a cushion, typically 80-90% of the block, because a small pickup miss is normal and expected. Groups negotiate this cushion specifically so minor forecasting error doesn't trigger a penalty — the fee only kicks in once the shortfall exceeds that negotiated tolerance."
    },
    {
      "q": "Why subtract a cost offset from the attrition fee?",
      "a": "Courts and standard hotel contracts generally require the attrition fee to reflect the hotel's actual damages, not a windfall. Since unsold rooms also don't incur housekeeping, amenities, and some utility costs, a 10-20% offset against group rate is standard to approximate those avoided variable costs."
    },
    {
      "q": "Can the hotel also resell attrition rooms to other guests?",
      "a": "Yes, and many contracts require mitigation — if the hotel resells rooms from the unfulfilled block to other guests at or near the group rate, that resold revenue typically must be credited against the attrition fee owed, reducing what the group ultimately pays."
    },
    {
      "q": "How should sales teams use this before signing a contract?",
      "a": "Model attrition cost recovery at a realistic worst-case pickup (60-70% of block) before finalizing rate and threshold. If the recovered revenue including the attrition fee still falls meaningfully short of the group rate at full block, it signals the block size may be oversold relative to the group's realistic room need."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/hotel-revpar-calculator",
    "https://www.revenuelab.fyi/toolbox/venue-rental-profit-per-event",
    "https://www.revenuelab.fyi/toolbox/hotel-renovation-payback"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Group Block Attrition Cost Calculator (https://www.revenuelab.fyi/toolbox/group-block-attrition-cost)"
}