Skip to main content
All playbooks

Salesforce Playbook · Salesforce Cost Optimization

Salesforce License Audit Workflow (5-Day Playbook)

Step-by-step playbook for running a Salesforce license audit and turning findings into renewal-call leverage. From scan to seat reclamation to negotiation.

Clientell Team·May 20, 2026·08 sections
What's inside

Workflow

0steps
  • 5-day
  • 02Median
  • 03Includes
  • Built

Playbook·Read

Salesforce License Audit Workflow (5-Day Playbook)

Read by Salesforce teams at 500+ organizations

NotionSalesforceZuoraEventbriteRakutenPwC6sensePopmenutastytradeSlalomGlobantNotionSalesforceZuoraEventbriteRakutenPwC6sensePopmenutastytradeSlalomGlobantNotionSalesforceZuoraEventbriteRakutenPwC6sensePopmenutastytradeSlalomGlobantNotionSalesforceZuoraEventbriteRakutenPwC6sensePopmenutastytradeSlalomGlobant

The Salesforce renewal call is structured to maximize their ask, not your savings. Your AE walks in with a proposal based on contract seat counts. You walk in with whatever you remembered to ask your CIO. The conversation goes one way.

This playbook flips it. Five days of focused work before the renewal call gives you actual utilization data, a reclamation plan, and the data point that beats every AE objection: "show me the seat that has logged in this quarter".

Median Clientell-audited org reclaims 20-35% of Salesforce spend through this workflow. For a $500K/year contract, that is $100K-$175K back in your budget every year.

Day 1: Inventory (3 hours)

Goal: Complete map of every license type, total seats, assigned seats, last-login-date per user.

Steps:

  1. Run the free Salesforce License Audit or manually pull data from Setup. Setup > Users > Licenses lists every license type with total and used counts. Setup > Users > Users lists every user with last login date.

  2. Build the master spreadsheet. Columns: User Name, Email, Profile, License Type, Last Login, Active Days in Last 90, Manager, Department, Annual Cost (per Salesforce list pricing). One row per user.

  3. Run the math: Sum of Annual Cost = your annual license spend. Filter Last Login > 90 days ago = your idle seat count. Idle Annual Cost = waste.

Deliverable: Excel sheet with 200-500 rows (depending on org size), summing to your total annual spend.

Day 2: Triage (4 hours)

Goal: Categorize every user into one of four buckets: Active, Idle-Reclaimable, Idle-Justifiable, Unassigned.

Bucket A: Active (login within 30 days). Keep. These are real users.

Bucket B: Idle-Reclaimable (no login 60+ days, no seasonal justification). Deactivate. Examples: former employees not deactivated, contractors whose project ended, "test" users created during 2022 implementation.

Bucket C: Idle-Justifiable (no login 60+ days, but legitimate reason). Keep but flag. Examples: sales reps who use Salesforce only at quota close, executives who need login access for compliance reviews but rarely log in operationally.

Bucket D: Unassigned (license type with unused total seats). Cancel the unused seats at renewal.

Steps:

  1. For each Bucket B user, document the justification for deactivation (or lack thereof). Get manager approval if uncertain.
  2. For each Bucket C user, document the business reason for keeping the license despite low usage.
  3. For each Bucket D unused-seat block, note the original purchase reason and whether it still applies.

Deliverable: Annotated spreadsheet with bucket per user + total reclaimable count.

Day 3: Sandbox dry-run (4 hours)

Goal: Validate that deactivating Bucket B users does not break anything.

Why this matters: Users own records. Users are referenced in Apex code. Users are in role hierarchies. Deactivation can have ripple effects if not staged.

Steps:

  1. Reassign owned records. For every Bucket B user, identify the records they own (Accounts, Opportunities, Cases) and reassign to an active user. Use Mass Transfer or a Data Loader update.

  2. Check role hierarchy dependencies. If a Bucket B user is a Role parent, their direct reports lose visibility cascade. Move the role assignment to an active user before deactivation.

  3. Check Apex code for hardcoded user IDs. Salesforce best practice prohibits this, but legacy code often does it. Grep your custom Apex for the user IDs you plan to deactivate.

  4. Test in sandbox. Refresh sandbox from production, perform the deactivations, run the org's standard regression test suite. Confirm no breakage.

Deliverable: Sandbox validation log + record reassignment Excel + Apex grep results.

Day 4: Production reclamation (4 hours)

Goal: Execute the deactivations and license freeing in production.

Steps:

  1. Run reassignments first. Mass Transfer the records owned by Bucket B users to their replacement active users.

  2. Deactivate users (do NOT delete). Setup > Users > Users > Edit > uncheck Active. The user's records persist, their license is freed, their login is disabled.

  3. For unassigned seat blocks (Bucket D), the license type remains in your org with the seats unused. They will be reclaimed at renewal, not before.

  4. Run the License Audit again. Confirm the active user count dropped and the idle count is now zero (or matches your Bucket C exceptions).

Deliverable: Updated user roster + license utilization snapshot showing reclamation results.

Day 5: Renewal prep + negotiation (3 hours)

Goal: Walk into the renewal call with the data that beats every AE objection.

Renewal prep packet contents:

  1. Before/after utilization comparison. Sales Cloud: 122 assigned -> 78 active -> 78 needed at renewal. Service Cloud: 67 -> 52 -> 55 (slight buffer). Platform: 23 -> 18 -> 20.

  2. Annual savings calculation. Show the AE the dollar savings number, sourced to actual utilization data.

  3. The "show me" filter. Whenever the AE objects to a seat reduction, ask: "Show me a single user in that group who has logged in this quarter." If they cannot, the seat goes.

  4. Multi-year discount lever. Use the savings to negotiate a multi-year commitment at a lower per-seat rate, locking in the reduced footprint.

AE objection-handling cheatsheet:

  • "You will need those seats when you grow." Counter: "When we hire, we will provision then. Our headcount has dropped 8% since last year and we are not net-hiring." Or: "If we grow, we will buy seats at standard pricing then, not pre-commit now."

  • "Those idle users might come back." Counter: "We have data showing 90+ days of inactivity. If they return, we reactivate at standard pricing. The license is free to reassign."

  • "Identity licenses are nearly free, why cancel them?" Counter: "They are cheap individually but we have 6,519 unused at $5/month each. That is $390K/year for nothing. The default position should be need-based provisioning."

  • "This will affect your Salesforce relationship." Counter: "Right-sizing our footprint deepens the relationship because we will renew aligned to actual value. Over-paying for unused seats damages internal advocacy for Salesforce."

Deliverable: Negotiated renewal at 65-80% of original proposal. Multi-year discount locked in. Annual report on utilization for next renewal cycle.

Common pitfalls

  • Deactivating without record reassignment. Records owned by deactivated users do not become orphaned, but they become harder to access and report on. Always reassign first.

  • Cancelling Identity licenses too aggressively. Identity licenses are cheap and useful for SSO scenarios. Cancel only confirmed unused blocks, not all of them.

  • Letting the renewal go to default. The renewal proposal arrives with terms favorable to Salesforce. Counter-proposal must come from you with utilization data behind it.

  • Doing this once a year instead of continuously. License waste accumulates daily as employees leave, projects end, contractors finish. Continuous monitoring is the long-term answer.

Run it continuously

The 5-day workflow above is the pre-renewal sprint. For continuous license optimization, the Clientell agent monitors license utilization in real time and surfaces reclamation candidates as they appear. Pair with the broader Salesforce Health Check for org-wide optimization.

Stop reading. Start shipping.

The agent that does everything in this playbook, automatically.

Clientell AI builds flows, cleans data, and manages users inside your Salesforce org, using the same patterns this playbook teaches. Read the theory here. Hand the work to the agent.

What teams build with the agent

  • 40+hrs saved per week
  • <10min from idea to deployed flow
  • 100%production-safe by default
  • 0Apex prompts to copy/paste

Topics covered

From this playbook

Salesforce Cost OptimizationLeadersAdminsRevopsAgentforceAI AgentsFlow BuilderApexData CloudPermissionsBest PracticesProduction-Safe

Section index

Jump to any section.

Deep-link to a specific part of this playbook, or copy the URL to send the whole thing to a teammate.

Sections

08

in this playbook

  1. /01

    Day 1: Inventory (3 hours)

  2. /02

    Day 2: Triage (4 hours)

  3. /03

    Day 3: Sandbox dry-run (4 hours)

  4. /04

    Day 4: Production reclamation (4 hours)

  5. /05

    Day 5: Renewal prep + negotiation (3 hours)

  6. /06

    Common pitfalls

  7. /07

    Run it continuously

  8. /08

    Related resources

Share this playbook

Send the URL to your team. Anchors preserved.

Getting Started

Ready to transform your Salesforce?

Join hundreds of teams using Clientell AI to automate Salesforce workflows, clean data, and ship changes in minutes.

Unlimited messages  ·  No credit card required

SOC 2
HIPAA
GDPR
Salesforce Partner