How to Find and Remove Inactive Salesforce Users

Every Salesforce org accumulates dormant licenses: people who changed roles, contractors whose project ended, employees who left without an offboarding ticket ever reaching IT. None of them log in anymore, and all of them are still billed at full price until someone notices. This is the cleanup process, start to finish.
Step 1: Pull last-login data
Setup → Users gives you a Last Login column, and the Login History and Identity Verification History reports go deeper if you need date ranges. Export the full user list with last-login timestamps rather than eyeballing the UI — you want a spreadsheet you can sort and filter.
Step 2: Set a dormancy threshold and flag accounts
60–90 days with zero logins is a reasonable default for most orgs — long enough to not catch someone back from parental leave, short enough to catch role changes and departures promptly. Flag anything past that threshold, and cross-reference against your HR system if you have one; a name that’s already termed in HR but still active in Salesforce is the highest-priority fix.
Step 3: Don’t just delete — freeze first
Deactivating a user in Salesforce can break record ownership, approval chains, and automation tied to that user ID. Freeze the user first (Setup → Users → Freeze), which blocks login immediately without releasing the license or disturbing ownership. Confirm nothing breaks for a business cycle, then deactivate and reassign records as needed.
Step 4: Reclaim or downgrade the license
Once a seat is confirmed dormant, either remove the license entirely (if headcount actually shrank) or hold it in a pool for the next hire rather than buying a fresh one at renewal. Either way, get the freed seat off the active bill — this is the step that’s easy to skip and expensive to forget.
Step 5: Stop it from recurring
A one-time cleanup fixes today’s bill; it doesn’t stop the same drift happening again in six months. Two things prevent recurrence: tying Salesforce deactivation to your HR/identity offboarding workflow so it’s automatic, and running a scheduled scan instead of an annual fire drill. License Guard runs this scan continuously and flags dormant and duplicate seats as they appear, so cleanup stops being a quarterly project.
| Approach | Frequency | Effort |
|---|---|---|
| Manual export + review | Ad hoc / annual | Hours, repeated each time |
| Scheduled report + calendar reminder | Quarterly | Lower, still manual |
| Continuous automated scan (License Guard) | Ongoing | Set up once, runs itself |
What this doesn’t fix
Inactive-user cleanup recovers seats you’re already paying for and shouldn’t be — it’s a maintenance task, not a structural fix. If a large share of your licensed users are active but only doing a handful of narrow tasks (checking a status, submitting a form, pulling a report), the fix is different: move them to a flat-fee custom portal synced to Salesforce instead of a per-seat license. See the full breakdown in how to reduce CRM licensing costs, and pair this cleanup with a broader look at how to identify your light CRM users.
Frequently asked questions
Will freezing a user break their existing records or workflows?
No — freezing blocks login only. Ownership, record history, and automation tied to that user ID stay intact, which is why it’s the safer first step before deactivating.
How often should we run this cleanup?
Quarterly at minimum if done manually; continuously if automated. Seat drift happens between every hiring and departure cycle, so an annual review misses months of avoidable spend.
What if a “dormant” user turns out to still need access occasionally?
That’s usually a sign they need a lighter-weight tool, not a full seat — a custom portal for occasional access costs nothing extra per person and doesn’t require reactivating a full license for infrequent use.
Related articles
- Salesforce Government Cloud Plus: The Premium Explained
Government Cloud Plus adds a reported percentage surcharge on top of standard product spend, not a separate per-seat pri…
- Salesforce Net Zero Cloud: Edition Pricing Explained
Net Zero Cloud bills as a flat per-org edition fee with a bundled license count, not per-seat pricing. What that means p…
- Salesforce MuleSoft: How Integration Pricing Actually Works
MuleSoft doesn’t bill per seat — it bills per compute capacity. Why that changes the cost math for connecting your…
- Salesforce Voice: Where Per-Minute Costs Stack on Seats
Salesforce Voice (formerly Service Cloud Voice) bills a per-user seat plus metered telephony minutes on top. How the two…