TapCub is live — analytics, insights and live chat, free on one platform

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
Calculator

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.

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.

Peak: 10 agents to schedule at 15:00. The day needs 94 agent-hours across 13 hours, at up to 3 chats per agent and 25.0% shrinkage.

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

Agents per hour

Workload = chats running at the same time on average (chats × duration ÷ 60 min).

HourChatsWorkloadAgents on chatTo schedulePicked up within targetAverage wait
09:004563483.8%31.4 s
10:008010.75788.1%17.3 s
11:00105146882.0%27.8 s
12:0090126894.8%6.05 s
13:0075105792.5%9.8 s
14:009512.76891.8%10.3 s
15:0011014.771094.3%6.43 s
16:0010013.36887.6%17 s
17:008511.35781.9%29.8 s
18:006084689.1%16.8 s
19:00709.35795.6%5.33 s
20:008811.76895.7%4.85 s
21:00557.34693.8%8.6 s
Runs entirely in your browser. Nothing you type here is uploaded or stored by TapCub.

Share these inputs: the values go after the # in the link, so they never reach a server.

Version v1.0Updated Update history

Read the result

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.

How to use it

From a chat report to a rota

You need three numbers from your chat history and one decision.

  1. 1

    Get chats per hour

    Export a typical day — or the average of several Mondays — as new conversations per hour and paste it.

  2. 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. 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. 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.

Formula

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

Worked example

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.

Agents needed for 100 chats an hour at different concurrency
Concurrent chats per agentAgents on chatChat slotsPicked up within 30 sTo schedule
1181887.6%24
291887.6%12
361887.6%8
452095.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.

Common mistakes

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.

FAQ

Chat 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.

Changelog

Update history

New features, fixes and data refreshes for this tool, newest first.

  1. · 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

Next step

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.

See your data clearly. Find your growth.

Every click, backed by data. Install one line of code and see your first numbers in a minute.

No credit card · Free plans for analytics and chat · Cookieless analytics