Software license seat utilization calculator
Software license seat utilization shows how much of a purchased license allocation is actively assigned and how much capacity remains.
Run — free
Enter the number of assigned seats and the total number of licenses purchased to receive a utilization percentage and an exact available-seat count. The calculation is useful for renewals, access reviews, procurement planning, and routine software asset management. It provides a quick, consistent answer without requiring a spreadsheet, while clear validation prevents a zero-license total or contradictory seat counts from producing a misleading result.
Enter counts that describe the same license pool
Start with two whole-number counts taken from the same product, subscription, contract, and reporting moment. Assigned seats means licenses currently allocated to users, service accounts, devices, or other identities according to the vendor administration console. Total licenses means the purchased capacity available under that same agreement. Do not combine assignments from one edition with purchased licenses from another, and do not compare an end-of-month assignment export with a total that changed after a renewal. Both values must be non-negative integers because an individual seat is treated as one assignable item. The assigned count may be zero, which correctly represents an unused license pool. The purchased total must be greater than zero because utilization cannot be calculated with a zero denominator. Assigned seats also cannot exceed the purchased total in this calculator; if your source reports that condition, investigate synchronization delays, grace allocations, trial seats, or an inaccurate contract record before using the result for a decision. Keeping the scope and timestamp aligned makes the percentage meaningful rather than merely arithmetically valid.
Understand the utilization and availability results
The calculator divides assigned seats by total purchased licenses and multiplies the quotient by one hundred. It returns the utilization percentage rounded to two decimal places, which is precise enough for dashboards and procurement summaries while remaining easy to read. Available seats are calculated by subtracting assigned seats from total licenses, so that result remains a whole number. For example, utilization answers the proportional question, while available seats answers the operational question of how many additional assignments can be made immediately. Neither measure proves that every assigned license is actively used. A seat can be assigned to a former employee, a dormant account, or someone who has not opened the software recently. Conversely, an unassigned seat may be intentionally reserved for onboarding or seasonal demand. Treat the two outputs as allocation metrics, not activity metrics. If you need evidence of actual adoption, combine this result with sign-in, launch, or feature-usage data from the software vendor. The calculation is deterministic: identical inputs always produce identical output, making it suitable for repeatable reports and automated checks.
Use the result in renewal and access workflows
A single utilization reading is most useful when it leads to a clear follow-up action. Before a renewal, calculate each product or license tier separately, then review low-utilization pools for reclaimable assignments and high-utilization pools for capacity risk. During onboarding, available seats can help an access team decide whether a request can be fulfilled without procurement. During offboarding, recalculate after assignments are removed to confirm that capacity returned to the pool. For trend analysis, run the calculation on a consistent schedule and store the input counts alongside the output; preserving the raw counts prevents a rounded percentage from hiding changes in the size of the contract. Avoid using one universal target for every application. Business-critical tools may need spare capacity, whereas stable specialist tools may reasonably operate near full allocation. Establish thresholds that reflect lead times, expected hiring, contract minimums, and the consequences of running out. The API costs $0.002 per request and can support repeatable inventory jobs, while the browser calculator is convenient for individual checks. In either channel, investigate source-data anomalies before presenting the result as a savings estimate or purchase recommendation.
What you can do with it
Prepare for a software renewal
Measure allocated capacity for each subscription so procurement can identify spare seats and focus review effort before negotiating a renewal.
Check capacity before onboarding
Calculate how many seats remain before approving access for new employees, contractors, service accounts, or devices.
Monitor license inventory
Apply one consistent formula across periodic exports to track utilization changes and flag pools that are approaching full allocation.
FAQ
How is software license seat utilization calculated?
Assigned seats are divided by total purchased licenses and multiplied by 100. The returned percentage is rounded to two decimal places.
How are available seats calculated?
Available seats equal total purchased licenses minus assigned seats. The result is the number of additional seats that can be assigned within the stated pool.
What happens when total licenses is zero?
The calculation returns an invalid-input error because a utilization percentage cannot be calculated with zero as the denominator.
Can assigned seats exceed total licenses?
No. This calculator rejects that input because it would produce negative availability. Check whether trial seats, grace allocations, reporting delays, or mismatched license pools explain the discrepancy.
Does an assigned seat mean the software is actively used?
Not necessarily. Assignment measures allocation, not activity. Use vendor sign-in or usage records when you need to distinguish active users from dormant assignments.
What does the API request cost?
Each API request costs $0.002. The calculation can also be run in the browser for an individual check.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/biz/software-license-seat-utilization \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"assigned_seats":84,"total_licenses":120}'const res = await fetch("https://api.kit.forhosting.com/biz/software-license-seat-utilization", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"assigned_seats": 84,
"total_licenses": 120
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/software-license-seat-utilization",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"assigned_seats": 84,
"total_licenses": 120
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/software-license-seat-utilization", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"assigned_seats":84,"total_licenses":120}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"assigned_seats":84,"total_licenses":120}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/software-license-seat-utilization", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"assigned_seats": 84,
"total_licenses": 120
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.software_license_seat_utilization",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |