Last month I helped a mid-size ecommerce company audit their Zendesk account. They had 84 paid agent seats. Twenty-three of those agents hadn't logged in once in the past 90 days. That's $31,740 per year on Suite Professional, going absolutely nowhere.
This is not unusual. Industry data puts average SaaS license waste around 45-51%, and Zendesk is one of the worst offenders because it charges per seat regardless of wether someone actually uses it.
Why inactive agents pile up
People leave companies. They switch roles. They get onboarded to Zendesk during training week and never touch it again. Contractors finish their projects. Seasonal hires from Q4 stick around in the system well into spring.
The problem is that Zendesk doesn't care. You pay for every agent seat you have provisioned, whether that person logs in daily or hasn't been seen since 2024. There's no warning, no automatic cleanup, nothing. Zendesk is happy to keep billing you.
And here's the bit that catches most admins off guard: suspending an agent does not free their seat. You need to downgrade them to "End User" to actually stop paying. Plenty of companies suspend inactive agents thinking they've solved the problem, then wonder why their bill doesn't change.
The manual way to find them
Zendesk does expose a last_login_at field on user records, but you can't filter or search by it in the Admin Center. The only way to actually see this data is through the API.
If you have someone technical on your team, they can pull a JSON user export and filter for agents where last_login_at is older than 30, 60, or 90 days. It's a bit tedious but it works. The query would look something like:
GET /api/v2/users.json?role=agent&role=admin
Then loop through the results and check the last_login_at field on each one. You're looking for nulls (never logged in) and dates older than your threshold.
Most teams I've talked to do this once, clean things up, and then never do it again. Three months later the same problem is back because new hires come and go.
What an inactive agent actually costs you
The per-seat cost depends on your plan:
| Plan | Per agent/month | Per wasted seat/year |
|---|---|---|
| Suite Team | $55 | $660 |
| Suite Growth | $89 | $1,068 |
| Suite Professional | $115 | $1,380 |
| Suite Enterprise | $169 | $2,028 |
But it gets worse if you're paying for add-ons. Advanced AI tacks on $50 per agent per month. Workforce Management adds another $25. An Enterprise customer with both is paying $244 per agent per month, or $2,928 per year, for every seat that sits empty.
Five wasted seats at that rate is almost $15,000 a year. That's not a rounding error.
What to do about it
The fix is straightforward. Find inactive agents, downgrade them to End User (not suspend, downgrade), and set a calendar reminder to do it again next quarter.
If you want to automate this, that's exaclty what we built LicenseTrim for. Connect your Zendesk account, get a scan in about two minutes, and see every inactive agent with the dollar amount attached. No API scripts, no spreadsheets, no asking your engineer to "look into it when they have time."
The free scan shows you what you're wasting. The paid plan watches for drift, so when new agents go idle you hear about it before the next invoice.
A note on timing
If your Zendesk contract renews annually, the best time to do this audit is 60-90 days before renewal. Zendesk generally won't let you reduce seats mid-contract, but you can negotiate fewer seats at renewal if you have data showing you don't need them.
Walking into a renewal conversation with "we've only actively used 60 of our 85 seats for the past 9 months" is a very different conversation than "we'd like to pay less please."