The $10K SaaS Purge (in 7 days)

The $10K SaaS Purge (in 7 days)

Most companies leak 20–30% of their SaaS spend, zombie seats, duplicate tools, and “we’ll cancel later” renewals. The $10K SaaS Purge is a 7-day sprint to inventory everything, surface what’s unused, decide Kill/Keep/Clone fast, and send the scripts that actually get credits back.

7-Day Plan — What to Do Each Day

D1
Inventory pull. Export card/ACH transactions (12 months), SSO last-login logs, admin seat rosters, and invoices. Tag each line with Owner/Team.
D2
Heatmap. Join seats → users → last-seen. Flag idle (>60 days), cold (31–60), and active (≤30).
D3
Redundancy scan. Cluster tools by function (chat, PM, design, storage, analytics). Identify overlap & “same job” pairs.
D4
Kill/Keep/Clone matrix. Decide by adoption, criticality, renewal proximity, and $/active user. Prep terms to downgrade or cancel.
D5
Outreach wave #1. Send cancel/downgrade/price-match scripts. Ask for back-dated credits on idle seats.
D6
Follow-ups + escalations. Nudge vendors, capture approvals, update the renewal clock.
D7
Lock savings. Reduce seats in admin, cancel duplicates, add renewal alerts & owner accountability.

What to export

  • Finance: Card & ACH CSV (merchant, amount, memo, date, last 12–18 months).
  • SSO/IdP: Last-login report by app (user email, app name, last seen).
  • Vendors: Admin seat rosters, invoices, renewal dates, plan tiers.
Join keys: normalize on email and vendor/app. Create a simple map for brand names → vendor IDs (e.g., “Adobe CC” → “Adobe”).

CSV Columns (master sheet)

ColumnExampleNotes
Vendor / AppFigmaNormalize brand vs. legal entity
User Emailsam@company.comPrimary join key
Seat TypeEditorRole/plan tier
Last Seen2025-08-22From SSO or vendor admin
Monthly $24.00Per-seat, net of discounts
Billing OwnerDesignTeam or person
Renewal Date2025-11-01Annuals matter most
StatusActive/Cold/IdleAuto-filled (see heatmap)
Privacy tip: restrict sheet sharing to Finance/Ops + tool owners. Remove PII for archived exports.
Active ≤30 days Cold 31–60 days Idle >60 days
UserVendorSeatLast SeenStatus$ / mo
sam@company.comFigmaEditor2025-09-02Active$24
jane@company.comFigmaEditor2025-07-12Cold$24
dev@company.comFigmaViewer2025-05-01Idle$0
ops@company.comAsanaBusiness2025-08-18Active$25
sales@company.comAsanaBusiness2025-06-10Idle$25
Rule of thumb: convert all Idle to cancel/downgrade; Cold to justify or pause; Active to keep/price-match.
VendorOverlap?AdoptionCriticality$ / ActiveRenewal ProximityDecisionAction
FigmaNoneHighCore$24120 days KeepAsk for annual prepay discount; freeze Editors to active list only
AsanaJiraMixedImportant$2530 days Clone → ConsolidateMove Sales tasks to Jira; reduce Asana seats by 40%
MiroFigma whiteboardsLowNon-core$1215 days KillCancel now; export boards → Figma
ZoomGoogle MeetMediumNon-core$15200 days Clone → Price-matchCut to power-users; ask vendor to match Meet pricing
Overlap test: If two tools share ≥70% use cases for the same team, consolidate to one (or segment by function with clear boundaries).

Cancel (idle seats / duplicate tool)

Subject: Cancel seats & credit request — [Account #]

Hi [Vendor],
We reviewed usage and found [X] seats with no activity since [date] (attached export).
Please cancel those seats effective today and credit from [last renewal/billing date] if possible.
We’ll keep [Y] active seats for [team].
Thanks,
[Name]

Downgrade (role/plan pruning)

Subject: Downgrade plan & reduce seat count — [Account #]

Hi [Vendor],
Please downgrade from [Plan] to [Plan] and reduce seats from [N] to [N’].
Only users in the attached “Active list” should remain paid.
Confirm new MRR and effective date.
Best,
[Name]

Price-Match (retain but pay less)

Subject: Renewal pricing review — [Account #]

Hi [Vendor],
We’re consolidating tools and considering alternatives at $[X]/user.
If you can match that rate and include [term: e.g., 2 months free/annual prepay], we’ll renew today for [N] seats.
Let me know what’s possible.
Thanks,
[Name]

Back-dated credit (zombie licenses)

Subject: Credit for inactive seats — [Account #]

Hi [Vendor],
Audit shows [X] seats billed but inactive since [date] (SSO logs attached).
Please credit the unused portion back to [date] and adjust our license count to [Y].
Regards,
[Name]
VendorOwnerRenewal DateNotice WindowSeats → New SeatsStatusNext Action
AsanaOps2025-10-3030 days60 → 36Vendor reviewingFollow up 9/22; confirm credit note
FigmaDesign2026-01-1545 days25 → 18PlannedLock editor list; request annual prepay discount
MiroPMO2025-09-2815 days20 → 0CancelledArchive boards; export completed
Never miss a window: create calendar reminders at T-60 and T-30 days for every vendor with auto-renew clauses.
MoveSeats$ / seat / moAnnual Impact
Kill Miro (dup)20$12$2,880
Prune Asana (idle)24$25$7,200
Figma price-match (-15%)18$24 → $20.40$777
Estimated Year-1 total$10,857
Tip: count both refunds (one-time credits) and run-rate cuts (12-month savings).

CSV Template — Inventory

vendor,user_email,seat_type,last_seen,monthly_usd,team_owner,renewal_date,status
Figma,sam@company.com,Editor,2025-09-02,24,Design,2026-01-15,Active
Figma,jane@company.com,Editor,2025-07-12,24,Design,2026-01-15,Cold
Asana,ops@company.com,Business,2025-08-18,25,Ops,2025-10-30,Active
Asana,sales@company.com,Business,2025-06-10,25,Sales,2025-10-30,Idle

Import to Sheets/Excel and add formulas for status thresholds.

Cancellation Script (copy/paste)

Hi [Vendor], please cancel [X] idle seats effective today and credit from [date] where possible (logs attached). Keep [Y] active seats. — [Name]
Attach: SSO last-login export highlighting idle users by vendor.

Renewal-Clock Tracker — Columns

  • Vendor, Owner, Renewal Date, Notice Window, Seats → New Seats
  • Status (Planned / Vendor reviewing / Approved / Credited / Cancelled)
  • Next Action + Due
Automation idea: add a weekly reminder: “Any renewals inside T-45 days?”

Seat Ownership

Every vendor has a named owner who approves additions and runs a quarterly seat audit.

Consolidation Rule

One tool per job per team unless an exception is approved with a sunset date.

No Auto-Renew Without Alert

Renewals require T-60/T-30 reminders and a price check; otherwise, do not increase seats or upgrade tiers.

Deprovisioning Workflow

  • Offboarding checklist triggers: remove SSO group, reclaim seat, archive/export user data.
  • Seat is reassigned from a pool—no net-new purchase without owner approval.
  • Monthly report: seats reclaimed vs. purchased.

SSO + Least Privilege

All paid apps behind SSO; default new users to viewer roles. Editors/admins require business justification with an expiry date.

Quarterly Seat Audit

Ops emails each owner their heatmap. Anything idle >60 days becomes cancel/downgrade by default unless an exception is filed.

Day 30

  • Finish first-pass purges & credits.
  • Standardize plan tiers across teams.
  • Create vendor owner list + inbox rules.

Day 60

  • Migrate “clone” tools to the primary system.
  • Turn on SSO enforcement for all paid apps.
  • Add renewal tracker to Finance calendar.

Day 90

  • Benchmark $/active-user vs. market; re-negotiate.
  • Run a new heatmap; compare to baseline.
  • Publish policy: one tool per job per team.
Remember: Savings = credits recovered + run-rate cuts. Track both, and celebrate the reclaimed budget publicly to reinforce the habit.

The $10K SaaS Purge isn’t about cutting to the bone, it’s about trimming the waste so every dollar has a job. In just seven days, you’ve pulled the data, mapped reality, pushed vendors, and locked in real savings. From here forward, your renewal clock is visible, your seat counts are lean, and your budget is back in your hands.