How to find and reclaim unused Salesforce licenses
Unused Salesforce licenses hide in five places: people who stopped logging in, frozen accounts, integrations sitting on full seats, add-on and app seats held by people who left, and seats nobody was ever given. Here's how to find each one, and what reclaiming them does (and doesn't do) to your bill.
1. Active users who don't log in
Start with active users who have no recent login: leavers nobody deactivated, people who moved teams, pilot users who never adopted. Query active users whose last login is older than your threshold, or blank:
SELECT Id, Name, Username, Profile.UserLicense.Name, LastLoginDate, CreatedDate
FROM User
WHERE IsActive = true
AND (LastLoginDate < LAST_N_DAYS:90 OR LastLoginDate = null)
Pick one threshold (60 or 90 days are common choices) and apply it to everyone. Then remove people on leave and anyone created in the last few weeks before you act.
Look at how people logged in, too. Salesforce's login history covers the past 6 months and includes logins through the API. A user whose only recent logins are API calls from one application is not a person using Salesforce; it's an integration, which leads to the next bucket. Our license audit guide has the LoginHistory query.
2. Integration users on full Salesforce seats
Integrations (your ERP sync, marketing tool, data warehouse loader) often run as a regular user with a full Salesforce license, because that's how they were set up years ago. Salesforce now has a license built for this. Its documentation describes the Salesforce Integration license as one that "grants access to Salesforce data and features only through the API" and is "designed for system-to-system integrations." It can't be used by people who need the user interface.
Salesforce's license table says five Salesforce Integration user licenses are included in each Enterprise, Unlimited and Performance Edition org (one in Developer Edition), and more can be bought. If you have integrations on full seats and unused Integration licenses, moving them can free full seats. Test each integration in a sandbox first: the integration profile restricts the user to API access and you'll need to grant it the object permissions it actually uses.
3. Frozen users
Freezing is designed for the gap between "this person can't log in any more" and "we've finished cleaning up their account", for example when the user is referenced in a custom hierarchy field and can't be deactivated yet. The catch is in Salesforce's own words: "Freezing user accounts doesn't make their user licenses available for use in your organization. To make their user licenses available, deactivate the accounts."
SELECT UserId, IsFrozen FROM UserLogin WHERE IsFrozen = true
Reading UserLogin needs the Manage Users permission. Every active user on that list still holds a paid seat.
Freezing vs deactivating, side by side
| Freeze | Deactivate | |
|---|---|---|
| User can log in | No | No |
| User license becomes available | No | Yes: a deactivated user doesn't count against available user licenses |
| Your bill goes down | No | No, not by itself. You're billed for the licenses on your contract |
| Records and history | Unchanged | Kept; ownership stays until you transfer it |
| Managed package seats | Still assigned | Still assigned until you remove them |
| Can be undone | Yes (Unfreeze) | Yes (reactivate), if a license is free |
You can't delete Salesforce users at all. Salesforce explains that deleting could orphan records, so deactivation is the end state.
4. Package and add-on seats held by the wrong people
AppExchange apps you license per seat, and add-ons sold as permission set licenses, have their own counts separate from the main user license.
- Managed package seats. Salesforce documents that a deactivated user "will continue to count against the available licenses associated to managed packages that were previously assigned to the user." To free the seat, go to Setup › Installed Packages, click Manage Licenses next to the package, and click Remove next to the inactive user.
- Permission set licenses. Check
PermissionSetLicense(Total vs Used) and who holds each one. Salesforce recommends removing permission set and permission set group assignments after you deactivate users. One exception worth knowing: since August 2026, Salesforce says permission set licenses for Salesforce CPQ, Salesforce Billing and Advanced Approvals are released automatically when the user is deactivated.
5. Seats nobody holds
On Setup › Company Information, any license with Remaining greater than zero is paid for and unassigned (allow up to 24 hours for counts to refresh after changes). The same check applies to permission set licenses and to PackageLicense (AllowedLicenses minus UsedLicenses).
A safe reclaim process
- Confirm. Send each manager the list of their people and ask for a yes or no. Silence isn't a yes.
- Freeze first if you need time. It blocks login immediately and is easy to undo.
- Transfer ownership of records, reports, dashboards and scheduled jobs the person owns. Salesforce recommends transferring ownership before deactivating a user who owns more than 10,000 records of an object.
- Deactivate. This frees the user license for someone else.
- Remove leftovers: package seats, permission set licenses, permission sets and groups.
- Reuse the seat for your next hire instead of buying a new one.
What reclaiming does to the bill
Be clear with finance about timing. Salesforce's standard Main Services Agreement says that, unless your order form says otherwise, "quantities purchased cannot be decreased during the relevant subscription term." Salesforce's help also notes that deactivating a user "doesn't reduce the number of licenses for which your organization is billed."
So reclaiming seats saves money in two ways: you stop buying new seats mid-term because you can reuse freed ones, and you go into renewal with evidence for a lower count. The renewal itself has its own catches, including re-pricing when volume drops. See our renewal negotiation guide.
Some "unused" seats are really "overpowered" seats: people who only use custom apps, accounts, contacts and reports may fit a cheaper license. See Sales Cloud vs Platform license.
Find every unused seat in one pass
RenewalReady reads users, login history, user licenses, permission set licenses, package seats and frozen users, read-only, and lists each unused seat by name with a monthly and yearly cost. It recommends; you decide what to change.
Run a free scanFAQ
What counts as an unused Salesforce license?
A paid seat that isn't delivering value: assigned to someone with no human login in your chosen window, assigned to a frozen user, held by an integration that could use a Salesforce Integration license, an add-on or package seat held by an inactive user, or a license nobody is assigned to.
Should I freeze or deactivate a user who left?
Freeze straight away to block access if you need time to clean up, then deactivate. Only deactivation makes the user license available again.
Will deactivating users lower my Salesforce invoice?
Not by itself. Salesforce bills for the licenses on your contract, and standard terms don't allow reducing quantities mid-term. Freed seats can be reused, and the evidence supports a lower count at renewal.
Can I delete a Salesforce user?
No. Salesforce only allows deactivation, which removes login access but keeps the user's records and history.
Sources
- Salesforce Help, Standard User Licenses (Salesforce Integration license)
- Salesforce Help, Give Integration Users API Only Access
- Salesforce Help, Freeze or Unfreeze User Accounts
- Salesforce Help, Deactivate Users
- Salesforce Help, Considerations for Deactivating Users
- Salesforce Help, Delete Users
- Salesforce Help, Inactive users assigned package licenses (000386472)
- Salesforce Help, Revenue Cloud permission set licenses on deactivation (000394412)
- Salesforce Help, Manage Licenses for Installed Packages
- Salesforce Help, Monitor Login History
- Salesforce Main Services Agreement (October 15, 2026), section 5.1