{
  "slug": "agency-client-concentration",
  "title": "Client Concentration Risk Calculator",
  "heading": "Client Concentration Risk Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/agency-client-concentration",
  "summary": "Measure how exposed your revenue is to losing your biggest account.",
  "description": "Concentration risk is the quiet killer of profitable agencies: the margins look great right up until the account that funds 45% of payroll gives 30 days' notice. This calculator takes your total revenue and your top-client revenue, returns concentration percentage and a Herfindahl-style exposure read, then models the cash impact of losing that client — including how many months of runway remain and what replacement revenue you'd need to sign. Lenders and acquirers generally treat anything over 25% from one client as a material risk and discount valuation accordingly, so this number matters for exit value as well as sleep quality.",
  "formula": "Concentration = top-client revenue ÷ total revenue. Post-loss monthly gap = (top-client revenue ÷ 12). Runway = cash ÷ (monthly cost − remaining monthly revenue).",
  "dateModified": "2026-08-25",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=agency-client-concentration",
  "inputs": [
    {
      "id": "total",
      "label": "Annual revenue",
      "kind": "number",
      "hint": null,
      "default": 1400000,
      "unit": "$",
      "min": 1,
      "max": null
    },
    {
      "id": "top",
      "label": "Largest client's annual revenue",
      "kind": "number",
      "hint": null,
      "default": 480000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "top3",
      "label": "Top three clients' combined revenue",
      "kind": "number",
      "hint": null,
      "default": 820000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "monthlyCost",
      "label": "Monthly operating cost",
      "kind": "number",
      "hint": null,
      "default": 92000,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "cash",
      "label": "Cash on hand",
      "kind": "number",
      "hint": null,
      "default": 180000,
      "unit": "$",
      "min": 0,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "conc",
      "label": "Largest client share of revenue",
      "format": "percent",
      "hint": null,
      "primary": true
    },
    {
      "id": "top3Pct",
      "label": "Top three client share",
      "format": "percent",
      "hint": null,
      "primary": false
    },
    {
      "id": "monthlyGap",
      "label": "Monthly revenue lost if they leave",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "runway",
      "label": "Months of runway after the loss",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "replaceNeeded",
      "label": "Annual revenue you'd need to replace",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Annual revenue: 1400000 $",
      "Largest client's annual revenue: 480000 $",
      "Top three clients' combined revenue: 820000 $",
      "Monthly operating cost: 92000 $",
      "Cash on hand: 180000 $"
    ],
    "outputs": [
      "Largest client share of revenue: 34.3%",
      "Top three client share: 58.6%",
      "Monthly revenue lost if they leave: $40,000.00",
      "Months of runway after the loss: 11.7",
      "Annual revenue you'd need to replace: $480,000.00"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter annual revenue ($).",
      "Enter largest client's annual revenue ($).",
      "Enter top three clients' combined revenue ($).",
      "Enter monthly operating cost ($).",
      "Enter cash on hand ($).",
      "Read your largest client share of revenue 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": {
        "total": 840000,
        "top": 290000,
        "top3": 490000,
        "monthlyCost": 55000,
        "cash": 110000
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "total": 1400000,
        "top": 480000,
        "top3": 820000,
        "monthlyCost": 92000,
        "cash": 180000
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "total": 2240000,
        "top": 770000,
        "top3": 1310000,
        "monthlyCost": 147000,
        "cash": 290000
      }
    }
  ],
  "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": "What concentration level is considered risky?",
      "a": "Above 25% from one client is the common threshold where lenders, insurers, and acquirers start applying a discount. Above 40% you are effectively a subsidiary of that client's marketing department, and their reorganisation becomes your restructuring."
    },
    {
      "q": "Does a long contract reduce the risk?",
      "a": "It softens the timing, not the exposure. Most services contracts allow 30-90 day termination for convenience, so treat the notice period as your true buffer rather than the contract end date."
    },
    {
      "q": "How fast can concentration realistically be reduced?",
      "a": "Usually by growing the rest of the book rather than shrinking the big account. Adding two mid-size clients a year against a flat anchor account typically moves concentration down 8-12 points annually — cutting the anchor instead just shrinks the business."
    },
    {
      "q": "What does a runway of 999 mean?",
      "a": "It means the rest of your book already covers monthly operating cost, so losing the top client hurts profit but doesn't create a burn. That's the position you're aiming for."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/retainer-scope-creep",
    "https://www.revenuelab.fyi/toolbox/agency-runway-months",
    "https://www.revenuelab.fyi/toolbox/proposal-win-rate-cost"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Client Concentration Risk Calculator (https://www.revenuelab.fyi/toolbox/agency-client-concentration)"
}