Free tool Live chat staffing calculator
A chat agent can handle two or three conversations at once, so phone staffing formulas overstate how many people chat needs. Paste how many chats arrive each hour, how long they last and how many each agent can juggle, and get an agents-per-hour table for the day.
- Built for concurrency
- Agents per hour
- Runs locally
Agents per hour for live chat
The sample day is an online store open 09:00–22:00 with an afternoon peak. All figures are sample figures; replace them with your own chat report.
Conversations that start in one hour.
One hour per line: 09:00 45. A plain list such as 12, 30, 45 also works (24 values are read as 00:00–23:00). Each line is treated as one hour.
From when an agent picks the chat up to when it ends, measured at your usual concurrency. 8 or 7:30.
The most conversations one agent handles at a time.
How long a new chat may wait for a free agent.
e.g. 80 = 80% of chats picked up within the target time.
Paid time agents are not available for chat: breaks, meetings, training, absence.
Agents on chat
—
Logged in and taking chats.
Agents to schedule
—
After shrinkage, rounded up.
Picked up within target
—
Share of new chats.
Average wait for pickup (s)
—
Across all chats.
Chat slots in use
—
Average share of the agents' slots busy.
Peak agents to schedule
10
The busiest hour.
Agent-hours for the day
94
Sum of scheduled agents per hour.
Chats in the day
1,058
What one agent more or less does
Green meets the target.
Agents per hour
Workload = chats running at the same time on average (chats × duration ÷ 60 min).
| Hour | Chats | Workload | Agents on chat | To schedule | Picked up within target | Average wait |
|---|---|---|---|---|---|---|
| 09:00 | 45 | 6 | 3 | 4 | 83.8% | 31.4 s |
| 10:00 | 80 | 10.7 | 5 | 7 | 88.1% | 17.3 s |
| 11:00 | 105 | 14 | 6 | 8 | 82.0% | 27.8 s |
| 12:00 | 90 | 12 | 6 | 8 | 94.8% | 6.05 s |
| 13:00 | 75 | 10 | 5 | 7 | 92.5% | 9.8 s |
| 14:00 | 95 | 12.7 | 6 | 8 | 91.8% | 10.3 s |
| 15:00 | 110 | 14.7 | 7 | 10 | 94.3% | 6.43 s |
| 16:00 | 100 | 13.3 | 6 | 8 | 87.6% | 17 s |
| 17:00 | 85 | 11.3 | 5 | 7 | 81.9% | 29.8 s |
| 18:00 | 60 | 8 | 4 | 6 | 89.1% | 16.8 s |
| 19:00 | 70 | 9.3 | 5 | 7 | 95.6% | 5.33 s |
| 20:00 | 88 | 11.7 | 6 | 8 | 95.7% | 4.85 s |
| 21:00 | 55 | 7.3 | 4 | 6 | 93.8% | 8.6 s |
Share these inputs: the values go after the # in the link, so they never reach a server.
https://tapcub.com/tools/chat-staffing-calculator
Version v1.0Updated Update history
What the table is telling you
Each hour is calculated on its own, so the table is a staffing curve you can lay shifts over.
Workload
Chats per hour × average duration ÷ 60: how many conversations are open at the same moment on average. 110 chats of 8 minutes = 14.7 chats running at once.
Agents on chat
The fewest agents whose chat slots (agents × concurrency) pick up the target share of chats within the target time. At 15:00 in the sample that is 7 agents, or 21 slots.
To schedule
Agents on chat ÷ (1 − shrinkage), rounded up. Add these across the day to get agent-hours, then fit shifts so every hour is covered.
Picked up and average wait
Pickup is when an agent takes the chat. The visitor's first response time adds the time to read and type, so it is always a little longer.
An approximation. It treats every agent as several independent chat slots and uses Erlang C on those slots. It does not model chats getting slower when an agent juggles more of them, uneven assignment, visitors leaving before pickup, or AI replies.
From a chat report to a rota
You need three numbers from your chat history and one decision.
-
1
Get chats per hour
Export a typical day — or the average of several Mondays — as new conversations per hour and paste it.
-
2
Measure duration at your concurrency
Use the average time a chat stays open with an agent, measured while agents work at their usual number of chats. Duration grows with concurrency.
-
3
Pick concurrency and a target
Set the most chats you want one agent to hold, and how fast a new chat should be picked up.
-
4
Shape shifts
Add shrinkage, read "to schedule" per hour and draw shifts over the curve. Try concurrency 2 vs 3 to see the trade-off.
Erlang C on chat slots
Chat is not a phone queue: an agent with three chats open is three busy "lines" that free up independently. So the calculator counts slots, not people.
- Each agent = concurrency slots; one chat occupies one slot for its full duration
- A new chat waits only when every slot is full (M/M/m queue with m = agents × concurrency)
- Ignores: slower replies at higher concurrency, uneven assignment, abandoned chats, AI-handled chats
- Each line of the profile is one hour with a steady arrival rate inside it
Workload (slot-Erlangs)
A = chats per hour × duration (s) ÷ 3,600
110 × 480 ÷ 3,600 = 14.7
Slots for N agents
m = N × concurrency
7 × 3 = 21
Pickup within target
SL = 1 − C(m, A)·e^(−(m − A)·t ÷ duration)
7 agents → 94.3% within 30 s
Agents to schedule
scheduled = ⌈N ÷ (1 − shrinkage)⌉
⌈7 ÷ 0.75⌉ = 10
Same chats, different concurrency
100 chats in one hour, 8 minutes each (13.3 chats running at once), target 80% picked up within 30 seconds, 25% shrinkage. Sample figures.
| Concurrent chats per agent | Agents on chat | Chat slots | Picked up within 30 s | To schedule |
|---|---|---|---|---|
| 1 | 18 | 18 | 87.6% | 24 |
| 2 | 9 | 18 | 87.6% | 12 |
| 3 | 6 | 18 | 87.6% | 8 |
| 4 | 5 | 20 | 95.9% | 7 |
Going from one chat at a time to three cuts the headcount from 24 to 8 — on paper. In practice chats run longer when agents juggle more, so measure duration at the concurrency you plan to use and rerun.
Where chat staffing goes wrong
Most errors come from treating chat like phones, or concurrency like a free multiplier.
Using phone Erlang C unchanged
Treating each agent as one line ignores concurrency and roughly doubles or triples the headcount.
Duration from a different concurrency
A chat that takes 6 minutes one-to-one may take 9 when the agent has three open. Use duration measured at the concurrency you plan.
Planning from a daily total
Website chat follows traffic: lunch breaks, evenings and campaign sends. Use the hourly shape, not the daily count.
Counting AI-resolved chats
Chats an AI assistant answers and closes alone never reach an agent. Remove them from the volume before staffing.
The inputs, from your own chat data
TapCub live chat runs on the same snippet as its analytics, and the parts below are what this calculator needs.
Concurrency limits and assignment
Each agent has a maximum number of concurrent chats; new chats go to the least-loaded agent or round robin.
Learn moreWhen conversations start
A weekday × hour heatmap of conversation starts and first response time by period in the support report.
Learn moreAI answers first
The AI assistant answers common questions from your knowledge base and hands over to a person when it should; AI-resolved chats are counted separately.
Learn moreChat staffing questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
How many live chat agents do I need?
Work out the workload — chats per hour × average duration ÷ 60 minutes — and divide by concurrency for a floor. Then add enough headroom to pick chats up quickly, which is what the queueing model does, and divide by (1 − shrinkage).
How many chats can one agent handle at once?
Teams commonly run two or three, but it depends on how complex the chats are and how fast agents type. Watch first response time and satisfaction as you raise it; past a point, every chat gets slower.
Why not just use an Erlang C calculator?
Erlang C assumes one agent handles one contact. A chat agent with three chats open behaves more like three slots, so plain Erlang C overstates headcount. This calculator applies Erlang C to the slots instead. See the Erlang C calculator for phones and tickets.
What does this model ignore?
That chats slow down at higher concurrency, that assignment is never perfectly even, that some visitors leave before anyone picks up, and that an AI assistant may answer part of the volume. Treat the result as a starting point and check it against your actual first response times.
Is pickup time the same as first response time?
No. Pickup is when an agent takes the chat; first response is when the visitor sees a reply from a person. The gap is reading and typing time — a typing test shows one side of it.
How do I turn agents per hour into shifts?
Add up the "to schedule" column to get agent-hours, then lay shifts of your usual length over the curve so each hour has at least the number shown. Overlap shifts at the peak.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Check the plan against real waits
Once the rota is live, compare the plan with what visitors actually experience: first response time by hour shows where it is still short.