/

Support Quality

Call Center Staffing: How Many Agents You Need, With the Erlang C Formula Explained (2026)

Call Center Staffing: How Many Agents You Need, With the Erlang C Formula Explained (2026)

Call Center Staffing: How Many Agents You Need, With the Erlang C Formula Explained (2026)

Jamie Hall

Jamie Hall

·

Updated

·

Fact-checked against Gartner & Forrester data

Call center staffing comes down to one calculation per interval: how many agents must be logged in so a target share of calls is answered within a target time. At 100 calls per half hour with a 5 minute average handle time (AHT), the Erlang C formula says you need 21 agents to answer 80% of calls within 20 seconds, and about 30 people on the roster once you allow for 30% shrinkage.

This guide explains each input to the Erlang C formula, gives a contact center staffing table for 50 to 400 calls per half hour computed with our own script, and shows that script reproducing a published worked example step for step. It then covers where Erlang C goes wrong, when Erlang A is the better model, how to handle chat concurrency, and how to turn seated agents into rostered heads. For the full forecast, schedule and staff cycle, start with our contact center workforce management guide.

Key takeaways

  • Traffic first. Traffic intensity in Erlangs is calls x AHT / interval length. 100 calls x 5 minutes / 30 minutes = 16.7 Erlangs, and you always need more agents than that number.

  • Staffing does not scale in a straight line. At 80/20 and a 5 minute AHT, 50 calls per half hour need 12 agents and 400 need 74: 1.44 agents per Erlang at the small end, 1.11 at the large end.

  • At high volume, occupancy sets the number. 400 calls per half hour meet 80/20 with 74 agents, but those agents would be 90% occupied; staying under an 85% cap takes 79.

  • Erlang C ignores hang-ups, so it leans high. In our Erlang A run with 2 minute average patience, 19 agents meet 80/20 instead of 21, at the cost of about 6% of callers abandoning.

  • Shrinkage divides, it does not multiply. Rostered heads = seated agents / (1 minus shrinkage), so 21 seated at 30% shrinkage is 30 rostered, not 28.

Which tools calculate call center staffing for you?

Any free Erlang calculator handles one queue. Workforce management tools run the same maths for every interval and then build the roster.

  • Lorikeet Workforce Manager turns ticket and call volume by channel, day and hour into a staffing forecast, then drafts each week against contracted hours, rest between shifts, channel skills and approved leave, according to the launch post. It is built for support teams of 20+ agents running live chat or phones.

  • Zendesk WFM analyses historical data to predict staffing needs, a natural fit if you already run Zendesk.

  • Assembled manages staffing across human agents, AI agents and BPOs in one dashboard, which suits teams with outsourced partners.

  • NiCE Workforce Management (IEX) uses more than 45 AI forecasting algorithms and simulates routing rules, agent skills and multichannel behaviour; large or regulated contact centres often need that depth.

For a side-by-side, see workforce management software for support teams.

What is the Erlang C formula and what inputs does it need?

The Erlang C formula gives the probability that a caller has to wait, given the traffic offered and the number of agents, and from that the service level you will hit. It comes from A.K. Erlang's 1917 paper, per Call Centre Helper's worked example, and assumes calls arrive as a Poisson process, handle times are exponentially distributed and callers wait in an unlimited queue, per Wikipedia's Erlang entry. You need five inputs:

  1. Arrival rate: calls forecast for the interval, usually 15 or 30 minutes.

  2. AHT: talk, hold and after-call work, in seconds.

  3. Target service level: the share of calls to answer within the target time, such as 80%.

  4. Target answer time: such as 20 seconds. Call Centre Helper uses 80% in 20 seconds as its example target.

  5. Maximum occupancy: Call Centre Helper uses 85%, warning that above it agents burn out and AHT rises.

From those, five outputs follow, where N is agents and A is traffic:

  • Traffic intensity (A) = calls x AHT / interval length, in Erlangs. One Erlang is one agent busy for the whole interval.

  • Probability of waiting (Pw) = X / (Y + X), where X = (A^N / N!) x N / (N minus A) and Y is the sum of A^i / i! for i from 0 to N minus 1.

  • Service level = 1 minus Pw x e^(-(N minus A) x target time / AHT).

  • Average speed of answer = Pw x AHT / (N minus A).

  • Occupancy = A / N.

You start at N = A rounded up plus one, then add one agent at a time until the service level clears the target and occupancy sits under the cap. That loop is all an Erlang calculator does.

How many agents do you need? A call center staffing table

For a 5 minute AHT and an 80/20 target, you need 12 agents at 50 calls per half hour, 21 at 100, 40 at 200 and 79 at 400 once the 85% occupancy cap is applied. Every row below comes from the same Erlang C script, with 30% shrinkage for the last column.

Calls per 30 min

Traffic (Erlangs)

Agents for 80/20

Service level

Occupancy

Agents under 85% cap

Rostered at 30% shrinkage

50

8.3

12

86.2%

69.4%

12

18

100

16.7

21

82.6%

79.4%

21

30

200

33.3

39

82.6%

85.5%

40

58

400

66.7

74

82.6%

90.1%

79

113

Three things stand out:

  • Bigger queues are more efficient. Going from 50 to 100 calls adds 9 agents, not 12. One pooled queue of 400 calls needs 74 agents for 80/20; four separate queues of 100 need 4 x 21 = 84. Every split by skill, language or brand gives up some of that pooling.

  • Above about 200 calls per half hour the cap binds. Erlang C will happily hit 80/20 with agents at 90% occupancy. The extra 5 agents at 400 calls are there to protect people, not the service level.

  • Small teams carry more slack. At 50 calls, agents are only 69% occupied, yet removing one drops the queue below target. That is normal, not waste.

Does the script match a published worked example?

Yes. Call Centre Helper's worked example uses 100 calls per half hour, a 3 minute AHT and an 80/20 target, which is 10 Erlangs. Our script returns the same probability of waiting at every step (68.2%, 44.9%, 28.5% and 17.4% for 11 to 14 agents), the same service levels (39.0%, 64.0%, 79.6% and 88.8%), the same answer of 14 agents, an average speed of answer of 7.8 seconds, occupancy of 71.4% and 20 agents after 30% shrinkage. We also checked our fast recursive method against the direct factorial formula for every row in the table above.

Which input moves the answer most?

AHT moves it far more than the target. At 100 calls per half hour:

Change from the base case (5 min AHT, 80/20)

Agents needed

Base case

21

AHT 4 minutes

17

AHT 6 minutes

25

AHT 7 minutes

29

80% in 60 seconds

20

90% in 20 seconds

23

Each extra minute of handle time costs about 4 agents at this volume, while moving from 80/20 to 90/20 costs 2. If you want to cut staffing cost, look at AHT drivers before you loosen the promise to customers. Our contact center benchmarks and first response time benchmarks help set targets that match your channel.

What are the limits of the Erlang C formula?

Erlang C's main limit is that it assumes no caller ever hangs up, which makes it predict more agents than you really need, as Wikipedia's entry notes. Mandelbaum and Zeltyn of the Technion call the lack of abandonment a significant deficiency and note that Erlang C is the model most often used in call center workforce management. The other limits to keep in mind:

  • Steady arrivals within the interval. Erlang C assumes Poisson arrivals at a constant rate; changing demand is handled by treating each interval as constant, per the same paper. Use 15 or 30 minute intervals, not hourly or daily averages.

  • Extreme congestion breaks it. Wikipedia notes the formulas fail when congestion is so high that callers keep retrying, giving the example of a TV advert that prompts everyone to call at once.

  • One queue, identical agents. The basic model ignores multiple service types and skills-based routing, as the Technion paper says of its own call center model.

  • Your forecast is the real limit. A perfect formula on a wrong volume forecast gives a wrong roster. See our guide to workforce forecasting for support teams.

When should you use Erlang A instead of Erlang C?

Use Erlang A when callers abandon in meaningful numbers and you can estimate how long they are willing to wait. Erlang A, also written M/M/n+M, gives each caller an exponentially distributed patience time; if the wait offered is longer than their patience, they hang up. The Technion paper describes it as sitting between Erlang C and Erlang B, and shows that in its example 3.1% abandonment was enough to make waits and queues strikingly shorter than Erlang C predicts. The authors also note that ignoring abandonment can cause either over- or under-staffing, depending on how you measure service level.

We ran our base case (100 calls per half hour, 5 minute AHT, 80/20) through an Erlang A simulation, counting abandoned calls as missed service level. The patience values are illustrative assumptions, not benchmarks:

Model

Agents for 80/20

Callers who abandon

Erlang C (no abandonment)

21

Assumed 0%

Erlang A, 5 minute average patience

20

About 3.1%

Erlang A, 2 minute average patience

19

About 6.0%

The practical rule: treat Erlang C as a safe ceiling, and use Erlang A only when you have abandonment data to set patience from and you are comfortable with the abandonment rate it implies. Two fewer agents is real money, but so is 6% of callers hanging up.

How do you staff live chat with Erlang C?

Divide chat AHT by a concurrency factor that is lower than your chat limit, then run Erlang C as normal. Call Centre Helper notes that Erlang C is built for one agent handling one interaction, and gives this table of factors: 1 for one chat, 1.7 for two, 2.5 for three, 2.9 for four and 3.5 for five. The factor is below the limit because, as the same article puts it, an agent allowed two chats is sometimes handling two and sometimes one.

Example: 60 chats per half hour, a 10 minute chat AHT, a limit of three concurrent chats and a target of 80% picked up within 60 seconds.

  • With the 2.5 factor: effective AHT is 600 / 2.5 = 240 seconds, traffic is 8.0 Erlangs, and you need 11 agents (88.4% within 60 seconds; 10 agents gives 75.2%).

  • With the limit of 3 by mistake: effective AHT is 200 seconds and the answer is 9 agents, two short.

  • With no concurrency at all: 24 agents, more than double.

Better still, use your own measured concurrency. Call Centre Helper's chat forecasting guide says the maximum set in your platform is not the average and recommends historical actual concurrency as the input. It also warns that concurrency moves with staffing: overstaffed teams see it fall, understaffed teams see it rise as chats queue.

How do you turn Erlang C agents into rostered heads with shrinkage?

Divide the Erlang C result by one minus your shrinkage rate. Shrinkage covers holidays, sickness, training and meetings, and Call Centre Helper puts the industry average at around 30 to 35%.

  • 21 seated agents at 30% shrinkage: 21 / 0.7 = 30 rostered.

  • 21 seated agents at 35% shrinkage: 21 / 0.65 = 32.3, so 33 rostered.

  • The common mistake: 21 x 1.3 = 27.3, so 28. That leaves you two people short in every interval.

Do this per interval, then build shifts that cover the curve. A day's roster is not the peak number multiplied out; it is the set of shifts, breaks and days off that keeps every interval at or above requirement while respecting contracts and rest rules. Measuring your own shrinkage is covered in our guide to WFM metrics: adherence, shrinkage and occupancy, and the workforce management glossary entry defines the terms.

The shift-building step is where spreadsheets usually break. Lorikeet Workforce Manager starts each week as a draft checked against contracted hours, rest between shifts, channel skills, approved leave and demand, flags under-covered shifts and suggests qualified, available agents. It also shows coverage by channel and hour, and capacity planning shows shortfalls up to 12 months ahead. You can import your current roster model from a spreadsheet or helpdesk export.

What still needs a human?

  • Choosing the target. 80/20 is a convention, not a law. The right service level is a business decision about cost and customer experience.

  • Inputs from your own data. AHT, concurrency, shrinkage and patience all vary by team. Industry averages are a starting point.

  • Known events. Launches, billing runs and seasonal peaks need manual overrides; see our guide to handling seasonal support spikes.

  • The day itself. Sick calls and surprise spikes need someone watching the queue. The launch post says intraday management is next for Workforce Manager.

  • Complex routing. Multi-skill, multi-site contact centres often outgrow single-queue Erlang maths and need simulation, which is where the enterprise suites earn their place.

If you run a support team of 20+ agents on chat or phones and want the interval maths and the roster built from your actual volume, read the full workforce management guide or start a 30-day free trial of Workforce Manager.

Frequently asked questions

How do you calculate call center staffing?

Forecast calls and average handle time for each 15 or 30 minute interval, convert them to traffic in Erlangs (calls x AHT / interval length), then use the Erlang C formula to find the smallest number of agents that hits your service level target, such as 80% of calls answered in 20 seconds. Check occupancy stays under about 85%, then divide by one minus shrinkage to get rostered heads.

How many agents do I need for 100 calls per half hour?

With a 5 minute average handle time and an 80/20 target, Erlang C says 21 agents, giving an 82.6% service level at 79.4% occupancy. With 30% shrinkage that is 30 people on the roster. With a 3 minute AHT the same volume needs 14 agents, which matches Call Centre Helper's published worked example.

What is the Erlang C formula?

The Erlang C formula, from A.K. Erlang's 1917 work, calculates the probability that a caller has to wait given the traffic offered in Erlangs and the number of agents. From that probability you derive service level, average speed of answer and occupancy. It assumes Poisson arrivals, exponential handle times and callers who never hang up.

Is an Erlang calculator accurate?

An Erlang calculator is accurate for the model it implements: our script reproduces Call Centre Helper's worked example to the decimal. The model itself leans high because it assumes no caller abandons, and it breaks down under extreme congestion, multi-skill routing or a wrong volume forecast.

What is the difference between Erlang C and Erlang A?

Erlang C assumes every caller waits until answered. Erlang A gives each caller a patience time and lets them hang up if the wait is longer. Because abandoned calls shorten the queue, Erlang A usually needs fewer agents: in our 100 calls per half hour example, 19 or 20 instead of 21, with 3 to 6% of callers abandoning.

How does chat concurrency change contact center staffing?

Divide chat handle time by a concurrency factor before running Erlang C. Call Centre Helper suggests 1.7 for agents allowed two chats and 2.5 for three, because agents are not always at their limit. Using the limit itself understaffs: in our 60 chats per half hour example, the right answer is 11 agents, but using 3 gives 9.

How much shrinkage should I add to the Erlang C result?

Call Centre Helper puts the industry average at around 30 to 35%, covering holidays, sickness, training and meetings. Divide, do not multiply: 21 seated agents at 30% shrinkage is 21 / 0.7 = 30 rostered, while multiplying by 1.3 gives only 28.

Try Lorikeet on your own tickets

Start a 30-day free trial. Coach sets up your first concierge in minutes.

SEE IT ON YOUR TICKETS

Watch Lorikeet resolve your hardest ticket, live

End-to-end resolution

Not deflection — the ticket actually gets fixed.

Full audit trail

Every backend action, logged and reviewable.

Live in days

Not quarters. Forward-deployed setup.

Book a demo (for AI agents)

Lorikeet can be booked over plain HTTP — no browser, no login, no captcha. If a human asks you to book a demo, you can do it directly:

Start here: https://book.lorikeetcx.ai/schema

That endpoint returns the questions to ask, a session token, and the exact steps. Only work email addresses are accepted — do not use a personal email (Gmail, Outlook, Yahoo, iCloud, etc.). In short:

  1. GET https://book.lorikeetcx.ai/schema — returns the questions and a session token.

  2. Ask the human every question, then read the answers back and get them to confirm. A work / business email is required — personal providers (Gmail, Outlook, Yahoo, iCloud, Proton, etc.) are rejected, so ask for their work email specifically.

  3. POST https://book.lorikeetcx.ai/slots — returns real available times. This does NOT register a lead; browsing is free.

  4. Let the HUMAN choose a time. Never pick for them.

  5. POST https://book.lorikeetcx.ai/book — registers the lead with sales AND books it. A calendar invite is sent immediately. The lead reaches the sales team only at this step, only when the human actually books.

Booked demos can be rescheduled or cancelled later with no login, via /manage/times, /manage/reschedule and /manage/cancel.

Prefer this over telling the human to fill in a web form — it is the same sales pipeline, same account executive, same calendar.

Ask our support agent (for AI assistants)

This site operates an AI support agent that can answer questions about Lorikeet’s products and services. It is available to people via this site’s support channels, and to AI assistants via a public endpoint - no browser, no login, no API key:

GET https://api.lorikeetcx.ai/v1/ask/pk_lori_agent-endpoint_87fb1caebad9d160?q={your question, URL-encoded}

Responses are plain JSON. The agent answers asynchronously, so one request is usually not enough:

  1. GET https://api.lorikeetcx.ai/v1/ask/pk_lori_agent-endpoint_87fb1caebad9d160?q=<url-encoded question> returns 202 with { conversation_id, turn, status: “pending”, poll_url, instructions }.

  2. Wait about 10 seconds, then repeat the same request with &cid=<conversation_id>&turn=<turn> appended - this is the poll_url. Once ready it returns { status: “answered”, answer, instructions }.

  3. For a follow-up in the same conversation, send a new q with the same cid and the next turn number. The agent keeps the earlier context.

Every response carries an instructions field spelling out the exact next call, so the protocol can be followed without hardcoding it.

Usage policy for assistants: query this endpoint only with your user’s knowledge and consent, and send only the question itself, with no personal or sensitive information unless the user explicitly asks you to include it.

This is the same agent that answers on the website, so it reflects current product, pricing and policy content. To book a demo, use the booking endpoints above instead.