{"id":45,"date":"2026-11-01T15:17:32","date_gmt":"2026-11-01T20:17:32","guid":{"rendered":"https:\/\/stackkite.com\/blog\/?p=45"},"modified":"2026-11-01T15:17:32","modified_gmt":"2026-11-01T20:17:32","slug":"saas-license-utilization","status":"publish","type":"post","link":"https:\/\/stackkite.com\/blog\/saas-license-utilization\/","title":{"rendered":"SaaS License Utilization: How to Measure, Audit and Improve It"},"content":{"rendered":"\n<div class=\"ok-byline\"><div class=\"ok-who\"><span class=\"ok-avatar\" aria-hidden=\"true\">MB<\/span><div><strong>Written by Max Benz<\/strong><span>Updated <time datetime=\"2026-11-01\">November 1, 2026<\/time> \u00b7 17 min read<\/span><\/div><\/div><ul class=ok-chips><li class=\"ok-chip ok-chip--ok\">Core formulas from FinOps Foundation<\/li><li class=\"ok-chip ok-chip--ok\">Sources checked November 2026<\/li><li class=\"ok-chip ok-chip--ok\">Illustrative example numbers<\/li><\/ul><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">SaaS license utilization tells you whether the software seats you buy are assigned to people who need them and whether those people actually use the product. That distinction matters. A company can assign every purchased license and still pay for accounts that haven't performed useful work in months. The practical goal is to separate purchased capacity, assigned access, meaningful activity, and contract rights before changing a subscription.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A reliable review needs four inputs: the contract, the vendor's license roster, evidence of recent activity, and a named business owner. This guide shows how to calculate the different utilization rates, audit questionable seats without disrupting work, and convert findings into renewal decisions. The worked numbers are illustrations. They aren't industry benchmarks, and they don't describe your company.<\/p>\n\n\n\n<div class=\"ok-tldr\"><strong class=\"ok-tldr__h\">SaaS license utilization at a glance<\/strong><ul><li>Assigned over purchased is the FinOps license utilization rate. Active over provisioned is a separate ratio.<\/li><li>Define activity per app before you count anyone as inactive. A login isn't always real work.<\/li><li>Treat every unused-seat number as potential exposure until the vendor confirms a lower invoice.<\/li><li>Get an owner decision before any access change, and check the reduction window first.<\/li><li>Review the scorecard monthly and begin renewal prep well before the notice deadline.<\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-saas-license-utilization\">What is SaaS license utilization?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SaaS license utilization measures how effectively a company uses the software entitlements it purchases. There are two useful views. <strong>Assignment utilization<\/strong> compares assigned licenses with purchased licenses. <strong>Active-use utilization<\/strong> compares users who performed a defined activity with either assigned or purchased seats. These answer different questions, so the dashboard shouldn't collapse them into one percentage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/www.finops.org\/framework\/capabilities\/licensing-saas\/\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">FinOps Foundation's Licensing &amp; SaaS capability<\/a> defines <em>License Utilisation Rate<\/em> as assigned licenses divided by purchased licenses, multiplied by 100. It separately defines an <em>Active-to-Provisioned User Ratio<\/em> as active users divided by provisioned users, multiplied by 100. This distinction prevents an apparently full license pool from hiding unused accounts.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Question<\/th><th>Formula<\/th><th>What it tells you<\/th><\/tr><\/thead><tbody><tr><td>How much purchased capacity is allocated?<\/td><td>Assigned licenses \/ Purchased licenses \u00d7 100<\/td><td>Assignment utilization<\/td><\/tr><tr><td>How many assigned accounts are active?<\/td><td>Active users \/ Provisioned users \u00d7 100<\/td><td>Active-to-provisioned ratio<\/td><\/tr><tr><td>How much purchased capacity produces activity?<\/td><td>Active licensed users \/ Purchased licenses \u00d7 100<\/td><td>Active-use coverage of purchased capacity, an internal management metric<\/td><\/tr><tr><td>Are premium features used?<\/td><td>Users using premium features \/ Premium licenses assigned \u00d7 100<\/td><td>Feature adoption rate<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The fourth formula's from the <a href=\"https:\/\/www.finops.org\/framework\/technology-categories\/saas\/\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">FinOps for SaaS framework<\/a>. It's what separates a legitimate basic user from someone who's paying for a premium tier and never touches a premium feature.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"a-worked-example-with-100-purchased-seats\">A worked example with 100 purchased seats<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine a design platform with 100 purchased licenses, 86 assigned licenses, and 57 people who performed a meaningful action in the last 30 days. Its assignment utilization is 86%, while its active-to-provisioned ratio is approximately 66.3%. Active-use coverage of purchased seats is 57%. All three figures are correct. They don't conflict, because each one has its own denominator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose the contract costs $30 per purchased seat per month. The current committed bill is $3,000 per month, or $36,000 per year before tax and extras. There are 14 unassigned seats and 29 assigned accounts without observed activity. Multiplying all 43 by $30 gives a <strong>$1,290 monthly review opportunity<\/strong>, not guaranteed savings. If the contract can't be reduced until renewal, the current bill remains unchanged even after removing access. If five inactive users have a legitimate quarterly workflow, removing their access would create an operational problem. The number isn't an action until an owner confirms it, and it's the owner who knows whether a quiet seat is still needed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/stackkite.com\/blog\/wp-content\/uploads\/2026\/11\/saas-license-utilization-100-seat-example.png\" alt=\"Bar chart of an example app with 100 purchased, 86 assigned and 57 active seats.\" loading=\"lazy\"\/><figcaption class=\"wp-element-caption\">Each rate has its own denominator, so one percentage never tells the whole story.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-you-calculate-license-utilization-correctly\">How do you calculate license utilization correctly?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">First decide what counts as a license. A named-user subscription, concurrent-user entitlement, API usage bundle, and enterprise-wide site license aren't interchangeable. The seat formulas above are appropriate for a contract with a fixed number of paid named-user licenses. For usage-based contracts, calculate consumption against the committed allowance instead of pretending requests are seats.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next set the observation window and the activity definition. A login's a useful signal for an identity audit, but it doesn't always prove that a CRM salesperson worked a deal or that a design user edited a file. Define an action that matches the tool's purpose. There's no point counting logins for a tool people open to approve things. For a support desk, this could be tickets updated; for a project tool, tasks edited; for a business intelligence platform, reports run. Keep the last sign-in as a secondary indicator, since it's only a proxy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use the same date window for every user in the same app. A 30-day window is a practical first pass for daily and weekly workflows. It shouldn't be an automatic removal rule for monthly, quarterly, seasonal, leave-of-absence, or emergency-use accounts. For those, use a longer window and ask the business owner to validate the exception. Microsoft notes that many organizations use 90 to 180 days when evaluating inactive identity accounts, but that guidance concerns account inactivity and doesn't establish a universal SaaS license-reclamation threshold.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"a-simple-spreadsheet-formula\">A simple spreadsheet formula<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Create columns for application, purchased seats, assigned seats, active users, measurement window, unit cost, contract end, and owner. With purchased seats in <code>B2<\/code>, assigned seats in <code>C2<\/code>, and active users in <code>D2<\/code>, use <code>=IFERROR(C2\/B2,0)<\/code> for assignment utilization and <code>=IFERROR(D2\/C2,0)<\/code> for the active-to-provisioned ratio. Format the cells as percentages. The zero handling prevents division errors, but a product with zero purchased seats should be flagged for review rather than reported as a healthy zero-percent utilization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>potential unused-seat amount<\/strong> is a screening calculation: <code>MAX(0, Purchased seats - Active licensed users) \u00d7 Contracted monthly price per seat<\/code>. Label it as <em>potential exposure<\/em>. It isn't realized savings, because a seat may be bundled, committed, non-reducible, or essential for a low-frequency user. Record actual savings only after the vendor confirms a lower invoice or a credit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The same three formulas work in a spreadsheet row. Keep the raw export on another sheet so every percentage can be traced.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Metric<\/th><th>Formula in row 2<\/th><th>Example result<\/th><\/tr><\/thead><tbody><tr><td>Assignment utilization<\/td><td><code>=IFERROR(C2\/B2,0)<\/code><\/td><td>86%<\/td><\/tr><tr><td>Active-to-provisioned ratio<\/td><td><code>=IFERROR(D2\/C2,0)<\/code><\/td><td>66.3%<\/td><\/tr><tr><td>Potential exposure per month<\/td><td><code>=MAX(0,B2-D2)*F2<\/code> with the seat price in <code>F2<\/code><\/td><td>$1,290<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-data-do-you-need-for-a-reliable-saas-license-audit\">What data do you need for a reliable SaaS license audit?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A license review fails when the numbers come from different systems and nobody reconciles them. The contract says what the company must pay for. The vendor admin portal says which licenses are assigned. The identity provider shows who can sign in. Product activity reports show what people actually do. Finance supplies the invoiced amount. They're related, but they aren't identical datasets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start with the signed order form and the latest invoice, since that's where the real numbers live. Record the legal entity, vendor, SKU, term, currency, seat minimum, payment frequency, notice period, true-down rights, and renewal date. If a reseller manages the subscription, note that party too. The contract may aggregate several SKUs or business units. Never infer the price of a premium seat by dividing a bundled invoice by all users without documenting the allocation method.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then export the current user roster from the vendor. Keep the user identifier, email or stable account ID, license tier, assignment status, and role. Normalize email aliases and service accounts carefully. A person with two aliases isn't necessarily two paid seats, and one service account may be necessary for an integration. Mark duplicates as investigation candidates rather than deleting them automatically.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For activity, prefer the vendor's in-app audit or usage report when it captures the work the software is intended to support. Use identity-provider last sign-in when app-level activity is unavailable, but label that evidence as a proxy. Microsoft cautions that <code>lastSignInDateTime<\/code> may include failed attempts, while <code>lastSuccessfulSignInDateTime<\/code> is a different property. Its displayed last-sign-in information can also lag by up to 24 hours. That's a good reason not to treat a single timestamp as proof of value.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"a-reconciliation-table-to-keep\">A reconciliation table to keep<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Field<\/th><th>Primary source<\/th><th>Owner<\/th><th>Common mismatch<\/th><\/tr><\/thead><tbody><tr><td>Purchased quantity and term<\/td><td>Signed contract and invoice<\/td><td>Procurement<\/td><td>Old order form versus current amendment<\/td><\/tr><tr><td>Assigned seats by tier<\/td><td>Vendor admin export<\/td><td>IT or app admin<\/td><td>Suspended users still holding licenses<\/td><\/tr><tr><td>Identity and employment status<\/td><td>HRIS and identity provider<\/td><td>IT and HR<\/td><td>Departed employee or alias still provisioned<\/td><\/tr><tr><td>Meaningful activity<\/td><td>Vendor audit or product usage export<\/td><td>Application owner<\/td><td>Login without meaningful product use<\/td><\/tr><tr><td>Price and renewal rights<\/td><td>Contract plus billing record<\/td><td>Finance and procurement<\/td><td>Committed minimum cannot be reduced midterm<\/td><\/tr><tr><td>Exception approval<\/td><td>Owner-reviewed ticket<\/td><td>Business owner<\/td><td>Seasonal, accessibility, leave, or break-glass need<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"ok-check\"><strong class=\"ok-check__h\">License audit evidence checklist<\/strong><ul><li>Collect signed contract, amendments and latest invoice<\/li><li>Export purchased and assigned seats by SKU<\/li><li>Join vendor users to identity and employment records<\/li><li>Choose a consistent 30\/90\/180-day activity window<\/li><li>Validate meaningful actions with the application owner<\/li><li>Identify service accounts, leave and seasonal exceptions<\/li><li>Record renewal date, notice period and true-down rights<\/li><li>Keep evidence and approval before any access change<\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"how-do-you-find-unused-saas-licenses-without-false-positives\">How do you find unused SaaS licenses without false positives?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Treat unused-seat detection as a queue of hypotheses, because a timestamp alone can't tell you whether the seat is needed. A user who hasn't logged in for 30 days may be inactive, on leave, using an integration, or simply working in a role that needs the application once per quarter. The tool can't make that judgment from a timestamp alone. Use three layers of evidence. Don't expect them to agree on the first pass.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer one: entitlement.<\/strong> Check whether the person has a paid license, what tier it's, and whether it's included in a fixed contract. Unassigned purchased seats are often the easiest quantity to discuss at renewal, but they aren't necessarily refundable now.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer two: activity.<\/strong> Look for product-specific actions over the relevant window. Compare logins, edits, exports, tickets or transactions, and note missing telemetry. A lack of events may indicate a broken integration or insufficient audit retention. Don't turn missing data into a zero-use assertion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Layer three: business need.<\/strong> Ask the manager or application owner to classify the seat as retain, downgrade, reclaim, transfer, or investigate. A read-only stakeholder might need access without creating records. A compliance officer may need a quarterly report. A departing employee may require preservation of files before the license is removed. Capture the reason and the approver.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple status scheme keeps decisions honest: <code>REVIEW_CANDIDATE<\/code>, <code>OWNER_APPROVED_RECLAIM<\/code>, <code>EXCEPTION_RETAIN<\/code>, <code>DOWNGRADE_CANDIDATE<\/code>, <code>CONTRACT_BLOCKED<\/code>, and <code>CLOSED_VERIFIED<\/code>. Only the second status authorizes an administrator to start a controlled removal process, and even then the administrator must confirm data and dependency safeguards.<\/p>\n\n\n\n<ul class=\"ok-rows\"><li><span>No assignment, purchased seat remains<\/span><strong class=\"ok-go\">Check whether contract can be reduced or seat can be reassigned (Procurement)<\/strong><\/li><li><span>Assigned, no meaningful activity in chosen window<\/span><strong class=\"ok-go\">Ask owner to validate need and telemetry (App owner)<\/strong><\/li><li><span>Active basic use on premium tier<\/span><strong class=\"ok-go\">Review downgrade eligibility and feature need (App owner + finance)<\/strong><\/li><li><span>Service account or integration<\/span><strong class=\"ok-go\">Check dependencies and avoid automatic removal (IT)<\/strong><\/li><li><span>Quarterly or seasonal user<\/span><strong class=\"ok-go\">Document exception and longer review window (Business owner)<\/strong><\/li><li><span>Confirmed leaver<\/span><strong class=\"ok-go\">Follow offboarding, data retention and access procedure (IT + HR)<\/strong><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-does-a-safe-license-reclamation-process-look-like\">What does a safe license-reclamation process look like?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">License reclamation is the controlled removal or reassignment of an entitlement after the business confirms it's no longer needed. It isn't the same as canceling a subscription. The sequence matters because access removal can affect files, integrations, shared mailboxes, approvals and audit obligations.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Open a review record.<\/strong> Include the application, user ID, tier, observed activity, contract, and reason for review.<\/li><li><strong>Get an owner decision.<\/strong> The manager or app owner confirms whether to retain, downgrade, transfer or reclaim the seat. Don't infer consent from silence.<\/li><li><strong>Check dependencies.<\/strong> Review ownership of shared resources, service connections, scheduled reports, delegated permissions, and retention requirements.<\/li><li><strong>Protect data.<\/strong> Follow the vendor's documented transfer and retention procedures before removing a license or deleting an account.<\/li><li><strong>Change the entitlement.<\/strong> Use the vendor's supported admin workflow, ideally under a change ticket with a rollback plan.<\/li><li><strong>Verify the result.<\/strong> Confirm the seat returned to the available pool, the intended user lost only the approved access, and business-critical processes still run.<\/li><li><strong>Update the commercial forecast.<\/strong> Mark the seat as reassigned, reclaimable at renewal, or financially reduced only after the billing consequence is confirmed.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft's license-assignment instructions distinguish unassigning a license from other user-management operations. For Microsoft 365, the admin center supports assignment and removal through the Licenses and Active users pages. It also warns that some services and self-service purchases follow different controls. An organization using group-based licensing must consider group membership as well as direct assignment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Don't promise that the next invoice will fall when a license is unassigned. Microsoft documents that a company generally must unassign seats before reducing the purchased subscription quantity, and some subscription types have a limited reduction window after purchase or renewal. Microsoft's buy-or-remove-license documentation shows why contract and admin actions have to be tracked separately.<\/p>\n\n\n\n<ol class=\"ok-steps\"><li><h3 class=\"wp-block-heading\" id=\"detect\">Detect<\/h3><p>Review candidate with evidence.<\/p><div class=\"ok-steps__meta\">Owner: IT or SaaS owner<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"approve\">Approve<\/h3><p>Retain, reclaim, transfer or downgrade decision.<\/p><div class=\"ok-steps__meta\">Owner: Business owner<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"safeguard\">Safeguard<\/h3><p>Data, integration and rollback check.<\/p><div class=\"ok-steps__meta\">Owner: IT and compliance<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"execute\">Execute<\/h3><p>Entitlement changed and verified.<\/p><div class=\"ok-steps__meta\">Owner: Vendor administrator<\/div><\/li><li><h3 class=\"wp-block-heading\" id=\"reconcile\">Reconcile<\/h3><p>Billing status and renewal forecast updated.<\/p><div class=\"ok-steps__meta\">Owner: Finance and procurement<\/div><\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"when-do-reclaimed-seats-actually-save-money\">When do reclaimed seats actually save money?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A seat can be technically reclaimed without reducing the contract. That's the most important distinction in the business case. If a company has paid for 100 annual seats and reclaims 20 in November, it'll have 20 licenses to reassign while still owing the full annual amount. The commercial benefit becomes real only if the vendor permits a midterm reduction, a credit, a smaller renewal, or a different plan that lowers the invoice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Separate four outcomes in the savings ledger. <strong>Reassignment<\/strong> avoids buying another seat for a new employee. <strong>Downgrade<\/strong> replaces an expensive tier with a cheaper one when the contract allows it. <strong>True-down<\/strong> reduces committed quantity at an allowed contract date. <strong>Cancellation<\/strong> ends a product or subscription under its terms. Each has a different effective date and evidence requirement, and they aren't interchangeable in a report.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, a team identifies 12 reclaimable seats at $40 per month. That represents $480 per month of <em>potential<\/em> spend exposure. If six are immediately reassigned to new employees, the benefit's an avoided purchase, not a $240 invoice reduction. If the other six can't be removed until an annual renewal in four months, the estimated future reduction is $240 per month starting after renewal, subject to the actual signed order. Realized savings for the current period stay at zero. This accounting prevents the same reclaimed seat from being counted as both avoided spend and a lower vendor bill. That's a double count, and it inflates the savings story.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A renewal review should begin well before the notice deadline. The FinOps Foundation notes that SaaS and license agreements often restrict midterm reductions and can require substantial advance planning. Ask procurement to confirm the actual notice and true-down language rather than applying a universal 30-day rule. It's the contract that decides, and procurement's the team that has it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The schedule below is an illustrative example, not a rule. Your contract's notice terms decide the real dates.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/stackkite.com\/blog\/wp-content\/uploads\/2026\/11\/saas-license-renewal-review-timeline.png\" alt=\"Process graphic of five renewal review steps from 120 days before renewal to 30 days after.\" loading=\"lazy\"\/><figcaption class=\"wp-element-caption\">Reconcile the first invoice 30 days after renewal before you book any saving.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"which-utilization-metrics-should-you-review-every-month\">Which utilization metrics should you review every month?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A useful monthly scorecard does more than report a single percentage. Start with purchased, assigned, and active users by SKU. Add license cost, a clear activity window, a data-confidence label, the owner, and the next commercial decision date. This makes it possible to distinguish a measurement problem from a contract problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Track assignment utilization and active-to-provisioned ratio separately. Add premium-feature adoption when the vendor supplies reliable feature-level usage. Track unassigned seats, owner-approved reclaim candidates, seats actually reassigned, and confirmed invoice reductions. Show the number of decisions waiting on a manager and the number waiting on a vendor's renewal terms. It's easy to bury these exceptions, so keep them visible. These operational counts explain why a seemingly obvious opportunity hasn't become savings.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a portfolio, group results by vendor, business unit and cost owner. A company-wide average can hide one expensive app with a low active-use ratio. Weighting utilization by dollars can help prioritize reviews, but don't confuse it with the FinOps license-utilization formula. A dashboard should show its denominator beside every percentage. It's tempting to chase one headline number, but the denominators are what keep it honest.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Monthly metric<\/th><th>Recommended evidence<\/th><th>Decision enabled<\/th><\/tr><\/thead><tbody><tr><td>Purchased versus assigned seats<\/td><td>Contract and admin export<\/td><td>Reassignment or true-down candidate<\/td><\/tr><tr><td>Active-to-provisioned ratio<\/td><td>Product activity and roster<\/td><td>Owner review queue<\/td><\/tr><tr><td>Premium-feature adoption<\/td><td>Feature-level usage<\/td><td>Tier downgrade discussion<\/td><\/tr><tr><td>Potential unused-seat exposure<\/td><td>Seat counts and contracted unit price<\/td><td>Prioritization only<\/td><\/tr><tr><td>Confirmed invoice reduction<\/td><td>New invoice or vendor credit<\/td><td>Realized savings<\/td><\/tr><tr><td>Upcoming notice deadlines<\/td><td>Signed contract<\/td><td>Timely renewal action<\/td><\/tr><tr><td>Data-confidence flag<\/td><td>Source timestamp and coverage<\/td><td>Whether the number is safe to act on<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"can-a-spreadsheet-manage-saas-license-utilization\">Can a spreadsheet manage SaaS license utilization?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A spreadsheet can manage SaaS license utilization as long as the inventory is modest and the owners keep it current. A spreadsheet's often enough to start because it forces the organization to define what a seat, an active user, and a renewal mean. Its weakness is freshness, and that's easy to underestimate. A CSV export's a snapshot, not a live connection, and people forget to refresh it. The control is a named owner, a review date, and an evidence link for every number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start with one row per vendor SKU, not one row per marketing brand. Record contract quantity, assigned seats, active seats, unit cost, billing cycle, owner, renewal, notice deadline, and last evidence date. Add a second sheet for user-level review candidates, but restrict access because activity and employment information can be sensitive. A third sheet can record approvals and actual savings with dates. It doesn't need to be fancy. Keep formulas separate from raw exports so they can be audited. You'll thank yourself at the next renewal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our own tool, <a href=\"https:\/\/stackkite.com\/features\">StackKite<\/a>, can store an application inventory, owner, purchased and active seats, costs, and renewal deadlines, with CSV import and export. One limitation matters: StackKite doesn't automatically discover applications, connect to an identity provider, measure live vendor usage, or cancel contracts. You'll have to enter or import the seat numbers yourself and verify them at the source. For teams that need automatic discovery and usage integrations, compare products in the <a href=\"https:\/\/stackkite.com\/categories\/saas-license-management\">SaaS license management software directory<\/a> rather than assuming an inventory does discovery for you. It doesn't.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/stackkite.com\/categories\/saas-spend-management\">SaaS spend management directory<\/a> is useful when the problem extends beyond seat counts to contracts, payment methods, renewals, and overlapping tools. The categories are related but not identical. License utilization asks whether entitlements are used; spend management asks how the organization buys and controls the wider software portfolio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"what-mistakes-make-license-utilization-reports-misleading\">What mistakes make license utilization reports misleading?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The first mistake is calling an assigned seat an active seat. It's the most common one. Assignment proves access, not use, and that's the whole point of splitting the two rates. The second is using an identity login as the only activity signal for every application. A user can authenticate without completing meaningful work, while some legitimate integrations and low-frequency workflows won't generate the login you expect. The third is treating missing telemetry as inactivity. An incomplete export must carry an explicit unknown status.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The fourth mistake is comparing unlike contract models. A product billed per request can't be fairly benchmarked against a fixed seat pool without a normalized annual cost model. The fifth is ignoring premium tiers. A person who uses a tool every day might still be on an unnecessarily expensive tier. The sixth is calculating savings from list price rather than the contracted net price, including discounts and minimums.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The seventh is forgetting the notice period. It's an easy mistake, and it can lock in another term. A team can find dozens of unused seats and still miss the one date the vendor will accept a reduction. The eighth is deleting access before protecting data or reviewing integration dependencies. The ninth is counting reassigned seats as invoice savings. The tenth is publishing a universal utilization benchmark. Activity patterns differ across collaboration, finance, design, analytics, and emergency-access tools. The useful baseline is your own application, measured consistently over time. Don't treat this list as exhaustive, because it's a starting point.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"a-30-day-license-utilization-improvement-plan\">A 30-day license-utilization improvement plan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Week 1: Establish the ledger.<\/strong> Inventory the highest-cost subscriptions, confirm contracts and invoices, and assign owners. Select five to ten products where seat counts and renewal dates are available. Agree on activity definitions for each category and mark data gaps. Don't try to cover every app at once, or you'll lose momentum.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Week 2: Reconcile access and activity.<\/strong> Export vendor rosters and identity records. Join on stable user IDs, not display names, since they're easy to duplicate or change. Produce candidate lists for unassigned, inactive, and premium-tier seats. Ask owners to review the exceptions rather than executing a bulk removal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Week 3: Run controlled changes.<\/strong> Complete approved transfers, downgrades and deprovisioning through vendor-supported workflows. Record the original and new assignment state, the person who approved it, and any data-retention action. Recheck shared workflows and report access.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Week 4: Negotiate and institutionalize.<\/strong> Build a revised seat forecast by SKU and renewal date. Ask vendors for written terms, including when a quantity change can affect billing. Reconcile the next invoice and schedule the next monthly scorecard. Document which tools need automatic integrations later and which can remain on a maintained CSV process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The outcome isn't a target percentage. It's an auditable record of entitlements, actual use, approved access decisions, and commercial results. That makes software spending easier to manage without sacrificing access or creating false savings claims.<\/p>\n\n\n\n<aside class=\"ok-product ok-wide\" id=\"stackkite\"><span class=\"ok-fav ok-fav--md ok-fav--ours\"><img src=\"\/blog\/wp-content\/uploads\/opskit\/fav\/skt.svg\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\"><\/span><div><p class=\"ok-product__eyebrow\">What spend platforms cost you<\/p><p class=\"ok-product__head\">Every subscription. One line of sight.<\/p><p>StackKite keeps your apps, owners, costs, seats and renewal dates in one place, so you catch the notice period before the contract renews itself.<\/p><\/div><a class=\"ok-product__cta\" href=\"https:\/\/stackkite.com\/\">See how it works<\/a><\/aside>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"frequently-asked-questions\">Frequently asked questions<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What is a good SaaS license utilization rate?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>A good SaaS license utilization rate depends on the application, and no single target is defensible for all of them. Daily collaboration tools, quarterly reporting software, and emergency-use products have different activity patterns. Set a baseline by product and role, then improve unnecessary idle capacity while retaining justified exceptions.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Is license utilization the same as active users divided by purchased seats?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>No, license utilization isn't the same as active users divided by purchased seats. The FinOps Foundation's license-utilization KPI uses assigned divided by purchased licenses. Active-to-provisioned is a separate KPI. Active divided by purchased is a useful additional management metric if you label it clearly and use a consistent activity definition.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can I save money immediately by unassigning a SaaS license?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>You can sometimes save money by unassigning a SaaS license, but not always. Unassigning access may free a seat for reassignment while the subscription charge doesn't change. Check the signed contract, billing model and permitted reduction window before counting savings.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-4\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How often should we review SaaS license utilization?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>A monthly operational review is a reasonable starting cadence for important subscriptions. Add event-driven checks when employees join or leave, when a team changes tools, and well before a renewal notice deadline. Choose longer observation windows for infrequent legitimate use.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-5\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">What is the difference between license management and SaaS spend management?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>License management focuses on entitlements, assignments, tiers and use. SaaS spend management also covers invoices, contract terms, vendors, renewals, overlapping applications and overall cost ownership. A small team can track both in one inventory if it maintains reliable inputs.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-6\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Should inactive users be removed automatically?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Inactive users shouldn't be removed automatically based on a timestamp alone. Require owner validation, check service-account and data dependencies, follow the vendor's retention process, and verify the result. Automation isn't appropriate until those safeguards are encoded in an approved policy.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<ul class=\"ok-related ok-wide\"><li><a href=\"\/blog\/saas-license-management\/\"><span>Guide<\/span>SaaS license management: process, costs and controls<\/a><\/li><li><a href=\"\/blog\/saas-inventory-management\/\"><span>Guide<\/span>SaaS inventory management: build an app register you can trust<\/a><\/li><li><a href=\"\/blog\/saas-spend-audit-checklist\/\"><span>Worksheet<\/span>SaaS spend audit checklist<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Calculate SaaS license utilization with the FinOps formulas, audit unused seats safely and turn approved reclamation into real renewal savings.<\/p>\n","protected":false},"author":1,"featured_media":46,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-45","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides"],"_links":{"self":[{"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/posts\/45","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/comments?post=45"}],"version-history":[{"count":1,"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions"}],"predecessor-version":[{"id":47,"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions\/47"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/media\/46"}],"wp:attachment":[{"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/media?parent=45"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/categories?post=45"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stackkite.com\/blog\/wp-json\/wp\/v2\/tags?post=45"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}