Call Center Staffing: Erlang C Explained Simply
Erlang C calculates how many agents you need to answer a target percentage of calls within a set time. Here's exactly how the formula works and how to apply it.
> **Quick Answer:** Erlang C tells you the minimum number of agents needed so that a given percentage of calls are answered within your target time. It starts with traffic intensity (A = calls/hour × AHT / 3600), then finds the agent count N where the queuing formula meets your service level target.

Walk into any contact center operation and ask how they calculate agent headcount. The honest answer — even when buried inside a sophisticated workforce management platform — is Erlang C. NICE, Genesys, Aspect, Verint: they all use it at their core. Understanding the formula means you can verify your WFM platform's outputs, explain staffing decisions to finance, and spot the assumptions baked into your scheduling model.
Here's how it actually works.
The Three Inputs Erlang C Needs
1. Call Arrival Rate (λ)
How many calls arrive per hour during your planning period. Always use your **peak interval** — typically the busiest 30-minute period doubled to an hourly rate, or your CDR's busiest hour directly.
For a contact center handling 540 calls between 10:00 and 11:00 AM, λ = 540 calls per hour.
2. Average Handle Time (AHT)
This is where many staffing models fail. AHT is not just talk time. It's:
**AHT = Average Talk Time + Average Hold Time + Average After-Call Work (Wrap-up)**
If your agents spend an average of 4 minutes talking, 30 seconds placing customers on hold, and 90 seconds completing post-call work, your AHT is 6 minutes = **360 seconds**.
Using talk time alone (4 minutes) would underestimate your staffing need by 33%. That's a meaningful gap.
3. Service Level Target
Service level is expressed as X% of calls answered within Y seconds. The most common target is **80/20** — 80% of calls answered within 20 seconds. Healthcare often targets 90/15. High-value financial services might target 95/10.
Calculating Traffic Intensity
Traffic intensity (A) in Erlangs is calculated as:
**A = (λ × AHT) / 3600**
Using our example:
- λ = 540 calls/hour
- AHT = 360 seconds
- A = (540 × 360) / 3600 = **54 Erlangs**
54 Erlangs means the equivalent of 54 agents occupied full-time. Due to random arrival patterns, you need more than 54 agents to serve this load with acceptable service levels.
The Erlang C Formula
The probability that a caller must wait (C) for N agents handling A Erlangs of traffic:
**C(N,A) = [B(N,A) × N/(N-A)] / [1 - (A/N)(1 - B(N,A))]**
Where B(N,A) is the Erlang B probability (all N agents are busy). This formula is valid only when N > A — when agents exceed traffic intensity. If N ≤ A, the queue grows without bound.
Once you have C(N,A), service level is:
**SL = 1 - C(N,A) × e^(-(N-A) × (t/AHT))**
Where t is your target answer time in seconds.
A Worked Example
Traffic: 54 Erlangs, target 80/20 (80% answered in 20 seconds), AHT = 360 seconds.
We need to find the minimum N where SL ≥ 0.80.
| Agents (N) | Wait Prob C(N,A) | Service Level |
|------------|-----------------|---------------|
| 55 | 0.931 | 31.2% |
| 58 | 0.645 | 57.9% |
| 61 | 0.404 | 73.4% |
| 64 | 0.225 | 83.4% ✓ |
With 63 agents you get 79.1% (just short), with **64 agents** you hit 83.4% — comfortably above the 80% target.
Agent occupancy at 64 agents: 54 / 64 = **84.4%**. That's within the safe range (target: 70–85% for stable operations).
[Calculate your own staffing requirements](/erlang-calculator) — enter your call volume, AHT, and service level target and get your agent count instantly.
Why Occupancy Matters as Much as Agent Count
Erlang C gives you the minimum agent count for your service level target, but watch occupancy. When occupancy climbs above 85–90%, the system becomes increasingly unstable. A small traffic spike — 5% more calls than forecast — can cause wait times to spike disproportionately.
At 84% occupancy (our example above), the system is in a reasonable state. If traffic spikes 10% during an unexpected event (a product recall, an outage, a billing error), traffic intensity rises to about 59 Erlangs. With still 64 agents, occupancy hits 92% and service level drops to around 60%. You'd need to add 4–5 agents to recover.
This is why workforce planners build **buffers** into their Erlang C calculations, typically targeting 78–83% occupancy rather than the maximum the formula permits.
Adding Shrinkage: From Agents Needed to Agents Scheduled
Erlang C tells you how many agents you need **on the phones**. To get from "agents needed" to "agents to schedule," you must apply a shrinkage factor.
Shrinkage represents time when scheduled agents are unavailable: breaks, training, team meetings, coaching sessions, unplanned absences, system downtime.
**Agents to schedule = Agents needed / (1 - Shrinkage rate)**
Typical shrinkage rates:
- **Small center (under 30 agents):** 25–30%
- **Mid-size center (30–150 agents):** 30–35%
- **Large center (150+ agents):** 35–40%
Using our example with 30% shrinkage:
- Agents needed on phones: 64
- Agents to schedule: 64 / 0.70 = **92 agents**
That's 28 agents more than the Erlang C output — the difference between adequate service and chronic understaffing.
Limitations of Erlang C
Erlang C assumes:
- Calls arrive according to a Poisson process (random, independent arrivals)
- All agents handle calls at the same average speed
- Average handle time follows an exponential distribution
- No callers abandon the queue
In real contact centers, some callers abandon after waiting. This actually makes Erlang C **conservative** — it overestimates agents needed because it assumes no abandonment. Modified models (Extended Erlang C, or simulation-based WFM) account for abandonment, but Erlang C remains the standard first-pass calculation and the basis for initial headcount budgets.
For common errors in applying Erlang C — including the AHT mistake, the peak interval mistake, and the occupancy target mistake — see our [7 common Erlang mistakes guide](/blog/common-erlang-mistakes).