{
  "slug": "agency-capacity-plan",
  "title": "Agency Hiring Capacity Calculator",
  "heading": "Delivery Capacity & Hiring Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/agency-capacity-plan",
  "summary": "Work out when your booked pipeline forces the next delivery hire.",
  "description": "Hiring too early burns cash on idle capacity; hiring too late costs you the account. This calculator compares your committed monthly delivery hours to the hours your current team can realistically produce at a sustainable utilization, then converts the shortfall into full-time-equivalent hires and shows the revenue each new hire must generate to pay for themselves. It also flags the buffer — how many hours of headroom you have before you're overbooked — so you can see whether the answer is a hire, a freelancer, or a scope conversation. Most agencies should bring on the next person at roughly 85% of sustainable capacity, allowing for ramp time before the crunch actually lands.",
  "formula": "Sustainable capacity = headcount × hours each × target utilization. Shortfall = committed hours − capacity. FTEs needed = shortfall ÷ (hours each × target utilization).",
  "dateModified": "2026-08-25",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=agency-capacity-plan",
  "inputs": [
    {
      "id": "heads",
      "label": "Current delivery headcount",
      "kind": "number",
      "hint": null,
      "default": 5,
      "unit": "people",
      "min": 1,
      "max": null
    },
    {
      "id": "hoursEach",
      "label": "Available hours per person per month",
      "kind": "number",
      "hint": null,
      "default": 155,
      "unit": "hrs",
      "min": 1,
      "max": null
    },
    {
      "id": "util",
      "label": "Sustainable utilization",
      "kind": "number",
      "hint": null,
      "default": 75,
      "unit": "%",
      "min": 10,
      "max": 100
    },
    {
      "id": "committed",
      "label": "Committed delivery hours per month",
      "kind": "number",
      "hint": null,
      "default": 640,
      "unit": "hrs",
      "min": 0,
      "max": null
    },
    {
      "id": "salary",
      "label": "Loaded cost of a new hire",
      "kind": "number",
      "hint": null,
      "default": 96000,
      "unit": "$/yr",
      "min": 0,
      "max": null
    },
    {
      "id": "rate",
      "label": "Average bill rate",
      "kind": "number",
      "hint": null,
      "default": 145,
      "unit": "$/hr",
      "min": 1,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "fte",
      "label": "Additional FTEs needed now",
      "format": "decimal",
      "hint": null,
      "primary": true
    },
    {
      "id": "loadPct",
      "label": "Current load against capacity",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "capacity",
      "label": "Sustainable monthly capacity",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "buffer",
      "label": "Hours of headroom (negative = overbooked)",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "hireRevenue",
      "label": "Annual revenue one hire can bill",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "hireMargin",
      "label": "Annual gross profit per hire",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Current delivery headcount: 5 people",
      "Available hours per person per month: 155 hrs",
      "Sustainable utilization: 75 %",
      "Committed delivery hours per month: 640 hrs",
      "Loaded cost of a new hire: 96000 $/yr",
      "Average bill rate: 145 $/hr"
    ],
    "outputs": [
      "Additional FTEs needed now: 0.51",
      "Current load against capacity: 110.1%",
      "Sustainable monthly capacity: 581.25",
      "Hours of headroom (negative = overbooked): -58.75",
      "Annual revenue one hire can bill: $202,275.00",
      "Annual gross profit per hire: $106,275.00"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter current delivery headcount (people).",
      "Enter available hours per person per month (hrs).",
      "Enter sustainable utilization (%).",
      "Enter committed delivery hours per month (hrs).",
      "Enter loaded cost of a new hire ($/yr).",
      "Enter average bill rate ($/hr).",
      "Read your additional ftes needed now 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": {
        "heads": 3,
        "hoursEach": 95,
        "util": 45,
        "committed": 380,
        "salary": 58000,
        "rate": 145
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "heads": 5,
        "hoursEach": 155,
        "util": 75,
        "committed": 640,
        "salary": 96000,
        "rate": 145
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "heads": 8,
        "hoursEach": 250,
        "util": 100,
        "committed": 1020,
        "salary": 154000,
        "rate": 145
      }
    }
  ],
  "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": "At what load should I start recruiting?",
      "a": "Start the search around 85% load, because hiring and ramping a delivery person typically takes 8-14 weeks end to end. If you wait until 100%, you'll bridge the gap with overtime or freelancers at worse margin and higher risk of quality slips."
    },
    {
      "q": "Hire or use freelancers?",
      "a": "Freelancers make sense when the shortfall is under roughly half an FTE, is seasonal, or requires a skill you won't need permanently. Hire when the demand is durable across at least two or three accounts — single-client hires are how agencies get caught out by one churn event."
    },
    {
      "q": "Why is sustainable utilization below 100%?",
      "a": "Because nobody bills every available hour. Internal meetings, tooling, pitch support, and training consume 20-30% of the week for most delivery staff, and modeling 100% guarantees you'll be structurally overbooked."
    },
    {
      "q": "What if gross profit per hire is negative?",
      "a": "Then your bill rate is too low for the salary you're contemplating, and hiring makes the P&L worse, not better. Fix the rate or hire at a lower seniority before adding the headcount."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/agency-utilization-target",
    "https://www.revenuelab.fyi/toolbox/agency-blended-rate",
    "https://www.revenuelab.fyi/toolbox/agency-freelancer-vs-hire"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Agency Hiring Capacity Calculator (https://www.revenuelab.fyi/toolbox/agency-capacity-plan)"
}