Call center capacity planning simulator

Many customers who wait too long on the line never call back. They go to your competitor.

  • Instant result
  • No sign-up
  • Visible assumptions
  • Deterministic calculation

In 30 seconds: Simulate call patterns and right-size your team to keep wait times low without paying for idle capacity. Deterministic calculation with auditable formulas. The result is indicative — adjust the assumptions to reflect your real operation.

Sizing a call center answers one exact question: how many agents do I need to answer X% of calls in under Y seconds? The Erlang C formula solves it from busy-hour call volume, average handle time (AHT) and your service target. This calculator applies Erlang C and adds shrinkage to give you the real headcount you must schedule — not just the agents on the phones.

Practical example

Inbound fintech support call center at the busy hour: 360 calls per hour, AHT (average handle time) of 240 seconds (4 minutes per call, including after-call work), an 80/20 target (answer 80% of calls in under 20 seconds) and 30% shrinkage (breaks, training, meetings and absenteeism).

Traffic load: (360 × 240) ÷ 3600 = 24 Erlangs. On average there are 24 simultaneous calls during the busy hour.

Erlang C shows you need 29 agents ON THE PHONES to hit 80/20 — not 24. The 5 agents above the load of 24 are the buffer that keeps the queue from blowing up: with exactly 24, occupancy would be 100% and wait time would tend to infinity.

With 29 agents on the phones: service level reached 84%, occupancy 82.8% and average speed of answer (ASA) of 11.6 seconds. An 82.8% occupancy is healthy — above 90% burns agents out, below 70% is idle capacity.

But 29 is just the agents on the phones. With 30% shrinkage you must SCHEDULE 29 ÷ (1 − 0.30) = 42 agents on the shift to have 29 actually handling calls. Forgetting shrinkage is the #1 sizing mistake: you hire 29, run with ~20 available, and the SLA collapses.

Operating recommendation: AHT and shrinkage are the two highest-impact levers. Cutting AHT from 240 to 210 seconds (better scripting + knowledge base) reduces on-phone agents from 29 to ~26, a 10% smaller headcount without touching the SLA. And tackling shrinkage (from 30% to 25%) lowers scheduled agents from 42 to 39.

Industry use cases

General inbound support

Typical 80/20 target (80% in 20s). AHT 180-300s. Healthy occupancy 80-85%. Size with BUSY-HOUR volume, not the daily average: the peak defines the headcount.

Collections (outbound)

Erlang C applies to inbound; predictive outbound uses different dialing models. In blended operations, size inbound with Erlang and add outbound separately.

SaaS technical support

High AHT (300-600s) from complexity. Looser SLA (80/60). Fewer but more senior agents; shrinkage rises due to ongoing training on new releases.

Multi-client BPO

Each client with its own SLA. Size Erlang per queue; pooling (agents shared across queues) cuts total agents 10-20% versus isolated queues.

Want to go beyond the quick calculation?

The advanced simulators model complete scenarios — 12-month cash flow, pricing with sensitivity analysis, credit risk, delivery routes — with your own data and no sign-up.

Explore the simulators

Calculator guide

What it calculates and who it is for

This calculator applies the Erlang C formula to answer the most expensive operational question of an inbound call center: how many agents do I need on the floor to hit my service level? Enter your peak-hour call volume, average handle time and service target, and you get required agents, achieved service level, occupancy and average wait.

It is aimed at supervisors, WFM analysts and operations leads of inbound contact centers — customer care, support, scheduling — who currently size staff by intuition or with simple rules that break at peak hours.

Inputs

Calls per hour
Volume of the interval you are sizing — use the peak hour, not the daily average. The average systematically understaffs.
AHT (average handle time)
Average duration of a complete interaction in seconds: talk time plus after-call work.
Service target (%)
Percentage of calls you want answered within the target time. An 80/20 SLA means 80% within 20 seconds.
Target time (seconds)
The SLA answer window: the seconds within which a call must be answered to count as on time.
Shrinkage (%)
Share of paid time an agent is not available for calls: breaks, training, meetings, absenteeism.

Results you get

Traffic load (Erlangs)
Total work arriving per hour: calls × AHT ÷ 3600. One Erlang equals one agent busy 100% of the time for an hour.
Required agents
The minimum number of connected, available agents that meets your service target under Erlang C.
Agents to schedule
Required agents adjusted for shrinkage: how many must be on the shift so the required number is actually on line.
Achieved service level
The percentage of calls answered within the target time at that staffing — usually somewhat better than the target, because agents come in whole numbers.
Occupancy
The fraction of on-line time agents spend actually handling calls: load ÷ agents.
ASA (average wait)
Average Speed of Answer: the seconds a call waits on average before being answered.

Methodology and assumptions

Load (Erlangs) = Calls per hour × AHT (s) ÷ 3600

Erlang C: P(wait) is derived from Erlang B via the standard relation between the two formulas

Service level = 1 − P(wait) × e^(−(N − A) × Target time ÷ AHT)

Occupancy = A ÷ N

Agents to schedule = N ÷ (1 − Shrinkage)

The engine searches for the smallest integer staffing N that reaches your target, iterating the Erlang C formula. Model assumptions: Poisson arrivals, infinite queue and infinite patience — calls wait, they don't abandon.

By design Erlang C is conservative: because it does not model abandonment, it errs toward one agent more rather than one less. When sizing against a contractual SLA, that bias works in your favor.

Worked example

Hypothetical example for illustration. The numbers reproduce exactly when entered into the calculator on this page.

Worked example: 240 calls in the peak hour, 300-second AHT, an 80/20 target and 30% shrinkage.

Load: 240 × 300 ÷ 3600 = 20 Erlangs.

Required agents: 25 on line. With 25 agents the achieved service level is 85.0% within 20 seconds — the first integer above the requested 80%.

Occupancy: 20 ÷ 25 = 80%. Average wait (ASA): 12.5 seconds.

Agents to schedule: 25 ÷ (1 − 0.30) = 35.7 → 36 people on the shift to keep 25 on line.

Note the jump: the load is 20 Erlangs, but the shift needs 36 people. The difference — 5 agents for arrival variability and 11 for shrinkage — is exactly what simple rules of three miss.

How to interpret the result

You always need more agents than Erlangs of load: with N equal to the load, occupancy would be 100% and the queue would grow without bound. The cushion above the load is what buys your service level.

Watch occupancy as well as the SLA. Sustained above ~85-90%, the operation becomes fragile: any spike or absence blows up the queue, and agent fatigue degrades AHT. If your result shows very high occupancy with a barely-met SLA, consider one more agent.

The staffing↔service relation has diminishing returns in both directions: removing one agent near the minimum degrades the SLA abruptly, while adding agents above the requirement helps less and less. Use the calculator to see that cliff before cutting staff.

Limitations and when not to use it

  • Erlang C does not model call abandonment or retries: in real long queues, part of the traffic hangs up and calls back, which the model does not capture.
  • It sizes one homogeneous interval. For the full day's roster, repeat the calculation per interval (ideally 30 minutes) with each interval's volume: using the daily average is the classic mistake.
  • It assumes interchangeable agents and a single queue. If you use skills-based routing with separate groups, size each queue separately.
  • The AHT you enter must include after-call work; leaving it out systematically understaffs.
  • Do not use it for asynchronous channels (email, deferred WhatsApp) or outbound dialing: Erlang C queueing math applies to real-time inbound traffic.

From theory to calculation

The calculator on this page runs with your numbers — no forms, no login. Scroll up and try it.

Try the calculator

Frequently asked questions

1Why does the result demand so many more agents than the Erlang load?
Because calls do not arrive evenly spaced: they cluster at random. The agent cushion above the load is what absorbs those random peaks and keeps waits short. The tighter your wait tolerance, the bigger the cushion.
2What shrinkage should I enter?
Your own operation's: measure the share of paid time your agents are unavailable for calls (breaks, restroom, training, meetings, absences) over several weeks and use that average. It is an internal number, not an industry constant.
3Can I use it to size chat?
Only as a rough approximation if each agent handles one chat at a time. With concurrency (several simultaneous chats per agent) the Erlang C model no longer applies as-is.
4How do I size the whole day?
Run the calculator once per time interval with that interval's volume and build the roster from those results. The day's staffing is the envelope of the intervals, not an average.
5What if my occupancy comes out above 100%?
It means the load exceeds the agents: the queue grows without limit and the SLA is unreachable at that staffing. The calculator flags it as not viable; you need more agents, a lower AHT or traffic deflection.

Last updated: July 19, 2026

View methodology