After several years of advocating for a data-driven approach to SaaS expenditure, particularly concerning seat-based licensing models, I have finally operationalized a personal project aimed at demystifying our actual CRM utilization. The impetus for this was the recurring, and frankly opaque, annual negotiation cycle where our vendor's account executive would present utilization statistics that invariably justified an expansion of licenses. I hypothesized a significant discrepancy between provisioned seats and actively engaged users, a common artifact of incremental hiring and role changes that IT provisioning rarely accounts for.
The core methodology involves querying our CRM's audit log APIs (most modern platforms offer these) to track user login frequency and key activity events over a rolling 90-day period. This is then cross-referenced with our internal HRIS system to filter out inactive employees, providing a clear picture of "active" versus "paid-for" licenses. The script itself is a Python application that runs weekly, but the more critical component is the analysis framework. I categorize users into tiers:
* **Core Users (Weekly Activity):** Individuals who log in and perform substantive actions (create/update records, log activities) multiple times per week.
* **Peripheral Users (Monthly Activity):** Those who log in perhaps once per month for report viewing or record lookup.
* **Inactive/Provisional Seats:** No meaningful activity in 90 days, often including departed employees, contractors, or roles for which the CRM was provisioned but never adopted.
The initial findings from our 220-seat enterprise contract were revealing. We identified 47 truly "Core Users," 89 "Peripheral Users," and a staggering 84 seats (38% of our total commitment) that showed no meaningful activity in the quarter. This 84 comprised both genuine inactive users and a pool of "shelfware" licenses kept in reserve. The financial implication, at our negotiated rate of $85 per user per month, translated to an annualized waste of over $85,000 on unused licenses alone.
This analysis directly informed our last renewal negotiation. Instead of accepting the proposed 10% increase for "added value features," we presented the data and successfully:
* Converted 60 of the "Peripheral User" seats to a lower-cost "View-Only" tier the vendor offered but rarely advertised, saving approximately $35 per seat monthly.
* Formally removed 40 inactive seats, banking them as a contractual right to re-add at the historical rate within 12 months, effectively pausing that cost.
* Avoided the price increase on our core user base by committing to a three-year term, using the uncovered waste as leverage.
The tool has now evolved to also monitor API call volumes against our contracted limits, providing early warnings for potential overage fees. I am interested in discussing the metrics others find valuable in such analyses. Specifically, how do you differentiate between a "login" and a "productive session"? What weight do you give to admin console activity versus standard user workflows? Furthermore, has anyone successfully negotiated blended-rate contracts based on demonstrable usage bands rather than binary active/inactive seat counts? The potential for shifting from a pure seat model toward a hybrid consumption-based model seems the next frontier in optimizing CRM TCO.
null
We run a 120-person B2B shop. We ditched Salesforce two years back, went self-hosted with a Postgres core and Metabase for analytics. All CRM logic is just schemas and API hooks now.
**Real cost:** Salesforce was ~$180/user/month for the Sales Cloud tier we needed. Our current stack costs ~$14/user/month averaged across infra, support, and tools. The hidden cost is 2-3 engineers who understand the stack.
**Integration effort:** Plugging into audit logs for a commercial CRM is a weekend project. Replacing the entire CRM with your own data model is a 6-9 month migration, mostly data mapping and user training.
**Where it breaks:** Self-hosted fails at vendor compliance requirements (like SOC2) unless you build the audit trail yourself. It also lacks the out-of-box marketing automation the big platforms ship.
**Where it wins:** You own the seat definition. We define an active user as someone who triggers a specific workflow event in the last 30 days, not just a login. License counting is trivial.
If you just want to audit your current vendor for contract negotiations, stick with your script. If you're ready to burn the whole thing down and have engineering bandwidth, I'd recommend the Postgres route. Tell us your team's tolerance for in-house support and whether marketing needs integrated tools.
Your vendor is not your friend.