Free tool Agent occupancy and shrinkage calculator
Erlang tells you how many agents need to be on the queue. Shrinkage — breaks, training, meetings, leave — decides how many you have to roster to get them there. Occupancy tells you how hard the ones on the queue are working. Work out all three, line by line.
- Shrinkage item by item
- Occupancy vs. service
- Runs locally
Occupancy and shrinkage
All figures are sample figures. Shrinkage defaults to minutes per shift for on-shift items and percent of paid time for off-shift items.
e.g. 8 or 7:30. Unpaid lunch is not part of it.
Multiply when on-shift items are minutes per attended shift (the default); add when every item is already a share of all paid time.
One item per line, minutes per shift by default: Breaks 30. Also 1.5h or 5%.
Percent of paid time by default: Annual leave 8%. 20 days of leave out of 260 paid days ≈ 7.7%.
From the Erlang C calculator, for one interval.
For the FTE figure, e.g. 60 for 12 h × 5 days.
e.g. 40.
Calls or new chats.
Seconds, or m:ss. For chat: the whole chat, measured at your usual concurrency.
Talk, hold and after-call work, or time in chats. 5.5 or 5:30.
Logged in and ready, no contact.
For utilisation.
Total shrinkage
30.2%
Share of paid time not on the queue.
On-shift
19.8%
Per attended shift.
Off-shift
13.0%
Per paid day.
Hours on the queue per shift
6.42
Shift × (1 − on-shift).
Agents to roster
18
Needed ÷ (1 − shrinkage), rounded up.
FTE for the week
25.8
Needed × hours open ÷ contract hours ÷ (1 − shrinkage).
Workload (Erlang)
—
Contacts × AHT ÷ 3,600.
Occupancy
—
Workload ÷ agents (chat: ÷ chat slots).
Answered within threshold
—
Erlang C.
Average speed of answer (s)
—
Occupancy
—
Handle ÷ (handle + available).
Utilisation
—
Handle ÷ paid.
Neither handling nor available
—
Breaks, meetings, away states.
Shrinkage by item
Share of all paid time. With "multiply", on-shift items are scaled by the days agents actually attend.
| Item | Type | Entered as | Share of paid time |
|---|---|---|---|
| Annual leave | Off-shift | 8% | 8.0% |
| Sick leave | Off-shift | 3% | 3.0% |
| Public holidays | Off-shift | 2% | 2.0% |
| Breaks | On-shift | 30 min | 5.4% |
| Training | On-shift | 20 min | 3.6% |
| Team meeting | On-shift | 15 min | 2.7% |
| Coaching | On-shift | 15 min | 2.7% |
| Admin and email | On-shift | 10 min | 1.8% |
| System downtime | On-shift | 5 min | 0.9% |
| Total shrinkage | 30.2% |
Agents vs. occupancy and service
Fewer agents push occupancy up and service level down.
Share these inputs: the values go after the # in the link, so they never reach a server.
https://tapcub.com/tools/occupancy-shrinkage-calculator
Version v1.0Updated Update history
Three ratios that are easy to mix up
Occupancy, utilisation and shrinkage all divide hours by hours, but over different denominators.
Occupancy
Of the time agents are on the queue, the share spent handling contacts. It is a result of workload and headcount, not a target you can set: Erlang C decides it once you choose a service level.
Utilisation
Handling time as a share of paid (or logged-in) time. It is always lower than occupancy, because breaks, training and meetings are in the denominator.
Shrinkage
Paid time that is not available for contacts: on-shift items such as breaks and meetings, off-shift items such as leave and sickness. It turns "agents on the queue" into "agents on the roster".
Rostered agents
Needed ÷ (1 − shrinkage). With 30% shrinkage, 12 on the queue needs 17.2 on the roster, not 15.6.
High occupancy is not free: the table shows how fast waits grow as the last few agents go. There is no universal right number; set an upper limit with your team leads and check it against service level and attrition, not against a figure from elsewhere.
From queue agents to a roster
Use the three modes in order.
-
1
Planned occupancy
Enter contacts per hour, handle time and agents. Check that the occupancy and service level you get are ones your team can live with.
-
2
List shrinkage
In "Shrinkage", list every regular on-shift activity in minutes per shift and every absence type as a percent of paid time. Use your own records for the last few months.
-
3
Roster
Enter agents needed on the queue (from Erlang C) to get agents to roster per interval, and hours open per week to get weekly FTE.
-
4
Check actuals
Each week, enter handle, available and paid hours from your report in "Actual occupancy" and compare with the plan.
Occupancy, utilisation and shrinkage
Definitions as used in workforce management. The service level column uses Erlang C, the same function as the Erlang C calculator on this site.
- Planned occupancy = workload (Erlang) ÷ agents on the queue; for chat, ÷ (agents × concurrent chats)
- Actual occupancy = handle time ÷ (handle time + available time)
- Utilisation = handle time ÷ paid time
- Shrinkage (multiply) = 1 − (1 − off-shift) × (1 − on-shift); (add) = off-shift + on-shift, when both are shares of the same paid hours
- Agents to roster = ⌈needed ÷ (1 − shrinkage)⌉; FTE = needed × hours open ÷ contract hours ÷ (1 − shrinkage)
On-shift shrinkage
minutes per shift ÷ shift minutes
95 ÷ 480 = 19.8%
Total shrinkage (multiply)
1 − (1 − off-shift) × (1 − on-shift)
1 − 0.87 × 0.802 = 30.2%
Agents to roster
⌈needed ÷ (1 − shrinkage)⌉
⌈12 ÷ 0.698⌉ = 18
FTE for the week
needed × hours open ÷ contract hours ÷ (1 − shrinkage)
12 × 60 ÷ 40 ÷ 0.698 = 25.8
Planned occupancy
workload ÷ agents
10 Erlang ÷ 14 = 71.4%
Squeezing occupancy on the same queue
200 calls an hour at a 3-minute handle time is 10 Erlang of work. Service level threshold 20 seconds. Sample figures.
| Agents | Occupancy | Answered within 20 s | Average speed of answer |
|---|---|---|---|
| 11 | 90.9% | 39.0% | 2 min 03 s |
| 12 | 83.3% | 64.0% | 40.4 s |
| 13 | 76.9% | 79.6% | 17.1 s |
| 14 | 71.4% | 88.8% | 7.8 s |
| 15 | 66.7% | 94.1% | 3.7 s |
Going from 14 to 11 agents raises occupancy by under 20 points but makes the average caller wait 16 times longer. The 11- to 14-agent rows match the Call Centre Helper Erlang C worked example (100 calls per 30 minutes).
Where rosters come out short
The arithmetic is simple. Most errors are about what goes into it.
Multiplying by (1 + shrinkage)
12 × 1.30 = 15.6 leaves you short. 30% of the rostered agents are away, so divide: 12 ÷ 0.70 = 17.2.
Only counting breaks
Training, coaching, meetings, system problems, sickness and leave are all shrinkage. Keep a list and update it from real records.
Setting occupancy as a target
Occupancy follows from workload and headcount. Pushing it up means fewer agents and longer waits, as the table shows.
Treating chat like phone
A chat agent with three chats open has three slots. Occupancy is measured on slots, and handle time must be measured at that concurrency.
Concurrency and hours, set in the inbox
TapCub live chat has the settings that decide chat occupancy:
Concurrent chat limit and auto-assign
Set how many chats an agent handles at once; new chats are assigned round-robin or to the agent with the lowest load.
Learn moreWorking hours per agent
Each agent has their own hours and online status, so the inbox matches your roster.
Learn moreChat report
First response, resolution rate, satisfaction, AI hit rate and handoffs per agent and per day.
Learn moreOccupancy and shrinkage FAQ
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
How do you calculate agent occupancy?
Occupancy = time handling contacts ÷ (time handling + time available and waiting). For planning: workload in Erlang ÷ agents on the queue. 10 Erlang on 14 agents is 71.4%.
What is the difference between occupancy and utilisation?
Occupancy only looks at time on the queue. Utilisation divides handling time by all paid (or logged-in) time, so breaks, training and meetings lower it. An agent can be 85% occupied and 60% utilised on the same day.
What goes into shrinkage?
Everything paid that is not available for contacts. On-shift: breaks, training, team meetings, coaching, quality reviews, admin, system downtime. Off-shift: annual leave, sickness, other absence, paid public holidays when you are open. Unpaid lunch is not shrinkage.
How do I apply shrinkage to staffing?
Divide, do not multiply: rostered = needed ÷ (1 − shrinkage). 12 needed with 30% shrinkage is 17.2 rostered, so round up to 18.
Should on-shift and off-shift shrinkage be added or multiplied?
If on-shift items are measured per attended shift (minutes per day at work), multiply: 1 − (1 − off) × (1 − on), because nobody takes a break on a day off. If both are already percentages of all paid hours, add them.
What is a good occupancy rate?
There is no single right number. The higher it goes, the longer customers wait and the less recovery time agents get. Look at the agents table for your own volumes and pick the point where service level and workload are both acceptable.
How does occupancy work for live chat?
Count chat slots: agents × concurrent chats. Workload = chats per hour × average chat length ÷ 3,600. The share of time an agent has at least one chat open is higher than slot occupancy, so talk about which one you mean.
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
Plan the volume, then the people
Forecast how many contacts are coming, size the queue with Erlang C, then roster with shrinkage.