Most spend tools start and end with the invoice. Pull the charges, group them by vendor, sort by amount, draw a chart. It is useful, and it is also the easy half — because the invoice shows what you were billed, while the question of what you actually got lives in a different system.
I have been collecting the ways this gap gets described by people who live inside it. Five quotes, four different companies, one recurring shape: the number on the invoice and the number in the admin panel are two different numbers, and nobody's job is to compare them.
"It pays for access rather than use"
"It pays for access rather than use, so unused accounts still cost money and busy AI workloads are not reflected in the charge."
— exactreads, How AI Is Changing SaaS Pricing
That sentence is about seat-based pricing in general, and it is the whole problem in one line. A seat is purchased once and consumed every month. Between those two moments, three things can go wrong — and none of them are visible on the invoice.
Where it hides, part 1: the person left, the seat did not
"What happens when someone leaves the team mid-billing-cycle?"
— order_and_chaos_work, Why Per-Seat Pricing Is Way Harder Than It Looks
Deprovisioning and billing run on different clocks. Access is usually revoked the day someone leaves, because it is a security action with an owner. The seat is freed whenever someone remembers, because it is a finance action with no owner. In between, you pay for a mailbox that bounces.
Where it hides, part 2: buying a pool is not licensing people
"Suppose an enterprise purchases 400 Copilot seats for a workforce that includes 600 employees. The purchase creates a centrally managed pool of seats. It does not automatically license 400 unspecified people, nor does every developer receive a fraction of a license."
— softchris, Understanding GitHub Billing and management
This is the version that survives every spreadsheet: the purchase is correct, the headcount is correct, and the overlap between them is unmeasured. A pool of seats gets allocated once, informally, and then never re-examined — while the team underneath it changes shape every quarter.
Where it hides, part 3: renewal compares the wrong line
"At renewal, compare the whole contract value from year to year, rather than only the familiar seat line, and keep your own measures of volume, quality and cost."
— exactreads, same article
Renewal conversations default to the line item everyone recognizes. That is exactly the line where the number looks stable. The change is in the add-ons, the overage buckets, the second SKU for the same vendor, the tier you were upgraded into during a support call two quarters ago.
Why the receipt cannot save you
"That's also the limit: a receipt is not an audit, and calls that don't go through it don't exist to it."
— rinava, Nobody audits their OpenAI invoice
Substitute any vendor for OpenAI and the sentence still holds. A receipt proves money moved. An audit proves the money bought something. Only the second question ever produces a refund, a downgrade, or a renewal conversation worth having.
The cloud world learned this years ago, and named the leftovers:
"silent budget killers known as Zombie Resources bleed organizations 24/7"
— asifmuzammil, Your Cloud Bill Is Full of Zombies
SaaS has the same zombies. They just don't show up on a resource graph, because a seat is not a resource — it is a line in a contract.
A ten-minute version you can run today
You do not need a tool for the first pass. You need three lists, side by side, for one vendor:
- Billed seats — the quantity on the latest invoice, per product.
- Entitled seats — who currently holds a license in the admin panel.
- Active seats — who actually signed in during the last 30 days (every admin panel exports this; it is usually a CSV next to the user list).
Then look at the three differences rather than the three totals. Billed minus entitled is the seat you never allocated. Entitled minus active is the seat nobody uses. Whichever of those two numbers is larger tells you which conversation to have first — with finance, or with the team lead.
Repeat it quarterly, on the vendors where a single seat costs more than a coffee. Annual plans, where the seat count is fixed until renewal, are the ones worth doing first: that is where the gap compounds silently.
If you want the arithmetic done for you, I built a free calculator that takes per-tool seat counts and prices and prints what is paid for and not used. No account, no email, no card: unused seat calculator.
One caveat worth stating plainly: none of this works if the admin panel export is stale. Check the export date before you trust the difference — an out-of-date active list will manufacture waste that isn't there.
Top comments (0)