How Many Call Center Agents Do I Need? Erlang C Staffing With a Worked Example
Calculate how many contact center agents you need with Erlang C: traffic, service level, shrinkage and occupancy, with a worked example and a checklist.
Quick answer
To work out how many agents an inbound queue needs, first calculate the workload in Erlangs: calls per interval multiplied by average handle time, divided by the interval length. Then use the Erlang C formula to find the smallest number of agents that meets your service level target, for example 80% of calls answered within 20 seconds. Finally, divide by (1 minus shrinkage) to get the number of people to schedule. Example: 120 calls in 30 minutes at a 4-minute handle time is 16 Erlangs. Erlang C says 20 agents on the phones reach about 82% within 20 seconds; with 30% shrinkage you schedule 29 people. Staffing is not linear: 10% more calls needs 22 agents, not 20.
"How many agents do we need?" is the most expensive question in a contact center, because agent time is most of the cost. Guess too low and calls wait, callers abandon, and the agents who are on shift burn out. Guess too high and you pay people to sit idle. Most teams start with a rule of thumb, such as dividing call volume by calls per agent per hour, and most of those rules of thumb are wrong in a predictable direction: they assume calls arrive evenly, and they never do.
This guide explains the method most workforce planners use for inbound queues, Erlang C, in plain language. It walks through a full worked example, shows why staffing does not scale in a straight line with volume, and ends with a checklist you can use for your next forecast.
Why Simple Division Gets Staffing Wrong
Suppose you expect 120 calls in a half hour and each call takes 4 minutes of agent time, including after-call work. That is 480 minutes of work in a 30-minute interval, which looks like exactly 16 agents. In practice, 16 agents would mean callers waiting a very long time, because calls do not arrive one after another at neat intervals. They arrive in random clusters. When five calls land in the same minute, the agents who are free take them and the rest queue. Simple division assumes every agent is busy 100% of the time with no waiting, which only works if calls are perfectly spaced.
Erlang C models that randomness. It answers a more useful question: with a given number of agents, what share of callers will wait, how long will they wait on average, and how many will be answered within the target time?
The Inputs You Need
- Call volume per interval. Forecast offered calls for each 15- or 30-minute interval, not per day. Daily totals hide the peaks that drive staffing.
- Average handle time (AHT). Talk time plus hold time plus after-call work. See the average handle time definition if you are unsure what to include.
- Service level target. The share of calls answered within a time threshold, written as 80/20 (80% within 20 seconds) or 90/30. See what service level means.
- Shrinkage. The share of paid time agents are not available for calls: breaks, training, coaching, meetings, sickness and absence. Many contact centers plan with somewhere between 25% and 35%, but measure your own.
Step 1: Calculate the Workload in Erlangs
An Erlang is one hour of call work per hour, or put simply, the number of agents that would be kept continuously busy if calls arrived perfectly evenly.
Traffic (Erlangs) = calls in the interval × AHT in seconds ÷ interval length in seconds.
For our example: 120 calls × 240 seconds ÷ 1,800 seconds = 16 Erlangs. Sixteen is the absolute floor. Fewer than 16 agents and the queue grows without limit.
Step 2: Use Erlang C to Find the Agents on the Phones
Erlang C takes the traffic and a candidate number of agents and returns the probability that a caller has to wait at all. From that, two more numbers follow: the service level (share answered within your threshold) and the average speed of answer (ASA). You try increasing agent counts until the service level meets your target.
Here is the result for our example, 16 Erlangs, AHT 240 seconds, target 80% within 20 seconds:
| Agents on the phones | Chance a caller waits | Answered within 20 s | Average speed of answer | Occupancy |
|---|---|---|---|---|
| 17 | 73.7% | 32.2% | 177 s | 94.1% |
| 18 | 53.1% | 55.0% | 64 s | 88.9% |
| 19 | 37.4% | 70.9% | 30 s | 84.2% |
| 20 | 25.6% | 81.7% | 15 s | 80.0% |
| 21 | 17.1% | 88.7% | 8 s | 76.2% |
| 22 | 11.1% | 93.3% | 4 s | 72.7% |
Twenty agents is the smallest number that clears 80/20, at about 82%. Notice how sharply the numbers change at the bottom of the table. With 17 agents, one more than the 16-Erlang floor, only about a third of callers are answered within 20 seconds and the average wait is nearly three minutes. Each agent you add near the floor buys a large improvement; each agent you add near the top buys a small one.
Step 3: Add Shrinkage to Get the Number to Schedule
The 20 agents in step 2 must be logged in and available for calls. People on break, in training or off sick are not. To find how many to schedule:
Scheduled agents = agents on the phones ÷ (1 − shrinkage).
With 30% shrinkage: 20 ÷ 0.7 = 28.6, so you schedule 29 people for that half hour. Repeat the calculation for every interval of the day, then build shifts that cover the resulting curve. That last step, turning interval requirements into real shifts with breaks, is where workforce management tools earn their keep, but the requirement itself comes from these three steps.
Why Staffing Is Not Linear
The most useful lesson from Erlang C is that small changes in volume or handle time move staffing by more than you would expect, and in ways a spreadsheet of averages hides.
- 10% more calls. At 132 calls instead of 120, traffic rises to 17.6 Erlangs. Twenty agents now answer only about 61% within 20 seconds. You need 22 agents to get back above 80%. A 10% rise in volume needed a 10% rise in staff, but if you had kept 20 agents the service level would have dropped by about 21 points, not 10.
- 30 seconds shorter handle time. At an AHT of 210 seconds instead of 240, traffic drops to 14 Erlangs and 18 agents reach about 84%. Cutting 30 seconds of handle time saved two agents in every half hour at this volume.
- Larger teams are more efficient. Big queues can run at higher occupancy for the same service level than small ones, because random peaks average out across more agents. This is why pooling small queues into one larger, well-routed queue often improves service without adding staff.
That second point is the practical one. Handle time is usually the cheapest lever you have. Faster wrap-up, better call scripts, the right customer data on screen when the call connects, and fewer transfers all reduce AHT, and Erlang C shows exactly how many agents that saves.
Occupancy: The Number That Burns Agents Out
Occupancy is the share of logged-in time agents spend actually handling calls. In the table it runs from 73% to 94%. High occupancy looks efficient on paper, but sustained occupancy above roughly 85% to 90% tends to raise stress, absence and attrition, which then raises shrinkage and makes staffing harder. Many operations cap planned occupancy and treat anything above the cap as a reason to add staff, even if the service level target is met.
Where Erlang C Is Wrong, and What to Do About It
Erlang C is a model, and it makes assumptions that real queues break:
- It assumes nobody hangs up. Real callers abandon, which removes work from the queue. Erlang C therefore tends to overstate the staff needed when abandonment is high. Erlang A and simulation models account for patience; if your abandon rate is significant, use one of them or adjust from your own history.
- It assumes every agent can take every call. With skills-based routing, languages or multiple queues, agents are not interchangeable and a single Erlang C calculation understates the need. Calculate per skill, then adjust for agents who can cover several.
- It assumes callers are served in order. Callbacks, priorities and overflow rules change the picture.
- It ignores blended work. If the same agents also work outbound campaigns, WhatsApp or email, plan that work separately and protect inbound peaks.
None of this makes Erlang C useless. It is the right first answer for most inbound queues, and the gap between the model and reality is what your own interval data should close.
How the Contact Center Platform Feeds the Forecast
Erlang C is only as good as its inputs. The volume, handle time, abandonment and service level figures should come from your platform, per queue and per interval, not from monthly averages. In DialerBee, inbound queues report service level, wait time and abandonment, the operations center shows queues and agents live, and reports can be exported for your planning model. During the day, supervisors watch the same numbers on a wallboard and can move agents between queues when a peak arrives earlier than forecast.
Handle time is where the platform helps most. Customer context on screen when the call connects, disposition hotkeys, AI call summaries that cut after-call typing, and callbacks instead of long holds all reduce the work per call. As the example showed, every 30 seconds removed from AHT can be worth agents per interval. Some teams route short peaks to an AI receptionist instead of adding headcount for an hour a day.
Staffing Checklist
- Forecast offered calls per 15- or 30-minute interval, by queue and language, using at least several weeks of history plus known events.
- Measure AHT per queue, including after-call work and hold time.
- Agree a service level target per queue (for example 80/20 for sales, 90/30 for priority lines).
- Calculate Erlangs and run Erlang C per interval to get agents on the phones.
- Check occupancy and cap it at a level your team can sustain.
- Divide by (1 − shrinkage) to get scheduled heads, using your measured shrinkage.
- Build shifts and breaks that cover the interval curve.
- Compare forecast against actuals every week and adjust volume, AHT and shrinkage inputs.
Want to see the queue and service level reporting that feeds this model? Book a demo and we will walk through inbound queues, the operations center and reporting on a demo tenant. For outbound campaigns, the separate question of pacing is covered in our abandon-rate estimator. Run your own numbers in the Erlang C calculator before you commit to a headcount.
Frequently Asked Questions
How do I calculate how many call center agents I need?
Calculate traffic in Erlangs (calls per interval × average handle time ÷ interval length), use the Erlang C formula to find the smallest number of agents that meets your service level target, then divide by (1 − shrinkage) to get the number of people to schedule. Repeat for every 15- or 30-minute interval.
What is Erlang C?
Erlang C is a queueing formula that estimates the probability a caller has to wait, given the call traffic and the number of agents. From that probability you can calculate the service level and average speed of answer for any staffing level, which is why it is the standard starting point for inbound contact center staffing.
What is a good service level for a call center?
A common target is 80/20: 80% of calls answered within 20 seconds. Some operations use 90/30 for priority lines or 70/30 for lower-priority queues. The right target depends on the cost of a lost call and what your callers expect.
What is shrinkage in a call center?
Shrinkage is the share of paid agent time not available for handling contacts, including breaks, training, coaching, meetings, sickness and absence. Many contact centers plan with roughly 25% to 35%, but you should measure your own and update it regularly.
Why does a 10% increase in calls need more than a small staffing change?
Because service level does not change linearly with staff. In the example in this guide, keeping 20 agents while volume rose 10% would drop the share answered within 20 seconds from about 82% to about 61%. Restoring the target needed two more agents.
Does Erlang C work for outbound dialing?
No. Erlang C models inbound queues where callers wait for agents. Outbound dialing has the opposite problem, agents waiting for answered calls, and is managed with dialer pacing and abandon-rate controls rather than Erlang C.
Related articles
Outbound Agent Onboarding Checklist (Dialer, Compliance, Skills)
11 min read
OperationsB2B vs B2C Outbound Calling: Strategy, Compliance & Metrics
11 min read
TechnologyAI Voice API vs AI Contact Center Platform: Which Architecture Do You Need?
11 min read
TechnologyLegacy CCaaS vs AI-Native Contact Center: A Buyer's Architecture Guide
12 min read
Ready to see DialerBee in action?
Book a 15-minute live demo, or start a free trial and dial today — no slides, no commitment.
14-day free trial · no credit card · 11 languages · BYOC · compliance-supporting controls