{
  "slug": "retainer-scope-creep",
  "title": "Retainer Scope Creep Cost Calculator",
  "heading": "Scope Creep Cost Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/retainer-scope-creep",
  "summary": "See what unbilled extra hours are doing to a retainer's real margin.",
  "description": "A retainer priced at 40 hours a month that quietly consumes 52 has not lost 12 hours — it has lost the entire margin on those hours plus the opportunity cost of what that capacity could have billed elsewhere. This calculator compares contracted hours to actual delivered hours, prices the overage at your loaded cost, and shows the retainer's effective hourly rate and margin after creep. It also shows the fee increase required to restore your original margin, which is the number to bring to the renewal conversation. Scope creep is the most common cause of a 55%-margin proposal turning into a 20%-margin account without anyone noticing until the year-end review.",
  "formula": "Effective rate = Retainer fee ÷ Actual hours. Margin after creep = (Fee − Actual hours × loaded cost) ÷ Fee. Fee to restore margin = Actual hours × loaded cost ÷ (1 − target margin).",
  "dateModified": "2026-08-25",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=retainer-scope-creep",
  "inputs": [
    {
      "id": "fee",
      "label": "Monthly retainer fee",
      "kind": "number",
      "hint": null,
      "default": 8000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "contracted",
      "label": "Contracted hours per month",
      "kind": "number",
      "hint": null,
      "default": 40,
      "unit": "hrs",
      "min": 1,
      "max": null
    },
    {
      "id": "actual",
      "label": "Actual hours delivered",
      "kind": "number",
      "hint": null,
      "default": 52,
      "unit": "hrs",
      "min": 1,
      "max": null
    },
    {
      "id": "cost",
      "label": "Loaded delivery cost per hour",
      "kind": "number",
      "hint": null,
      "default": 62,
      "unit": "$/hr",
      "min": 1,
      "max": null
    },
    {
      "id": "target",
      "label": "Target gross margin",
      "kind": "number",
      "hint": null,
      "default": 55,
      "unit": "%",
      "min": 5,
      "max": 90
    }
  ],
  "outputs": [
    {
      "id": "marginNow",
      "label": "Actual gross margin after creep",
      "format": "percent",
      "hint": null,
      "primary": true
    },
    {
      "id": "effectiveRate",
      "label": "Effective hourly rate earned",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "overageHours",
      "label": "Unbilled overage hours",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "overageCost",
      "label": "Cost of the overage",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "feeToRestore",
      "label": "Fee increase to restore target margin",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Monthly retainer fee: 8000 $",
      "Contracted hours per month: 40 hrs",
      "Actual hours delivered: 52 hrs",
      "Loaded delivery cost per hour: 62 $/hr",
      "Target gross margin: 55 %"
    ],
    "outputs": [
      "Actual gross margin after creep: 59.7%",
      "Effective hourly rate earned: $153.85",
      "Unbilled overage hours: 12",
      "Cost of the overage: $744.00",
      "Fee increase to restore target margin: -$835.56"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter monthly retainer fee ($).",
      "Enter contracted hours per month (hrs).",
      "Enter actual hours delivered (hrs).",
      "Enter loaded delivery cost per hour ($/hr).",
      "Enter target gross margin (%).",
      "Read your actual gross margin after creep 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": {
        "fee": 4750,
        "contracted": 24,
        "actual": 31,
        "cost": 37,
        "target": 33
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "fee": 8000,
        "contracted": 40,
        "actual": 52,
        "cost": 62,
        "target": 55
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "fee": 12750,
        "contracted": 64,
        "actual": 83,
        "cost": 99,
        "target": 88
      }
    }
  ],
  "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": "Is some scope creep normal?",
      "a": "A 5-10% variance against contracted hours is normal and usually not worth policing. Past 20% you are running a different engagement than the one you priced, and the fix is a scope conversation, not more efficiency."
    },
    {
      "q": "Should I bill overage or raise the retainer?",
      "a": "Raise the retainer when the overage is structural and recurring — clients hate surprise invoices far more than a predictable higher fee. Bill overage only for genuinely one-off requests, and make the mechanism explicit in the contract before the first one happens."
    },
    {
      "q": "How do I track actual hours if the team hates timesheets?",
      "a": "Track at the account and week level rather than the task and minute level. Weekly per-account hour totals are accurate enough to catch a 30% overage and cheap enough that people actually record them."
    },
    {
      "q": "What if the effective rate is still above my cost?",
      "a": "Then the account is profitable but underpriced, which is a slower problem than a loss-making one. Compare the effective rate to your blended target rate — the gap, multiplied by annual hours, is what the account is costing you in opportunity."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/agency-blended-rate",
    "https://www.revenuelab.fyi/toolbox/agency-client-concentration",
    "https://www.revenuelab.fyi/toolbox/agency-effective-hourly"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Retainer Scope Creep Cost Calculator (https://www.revenuelab.fyi/toolbox/retainer-scope-creep)"
}