Blog/SaaS Management
SaaS ManagementApril 27, 2026·7 min read

SaaS License Audit Checklist: Everything to Review Before Your Next Renewal

Every year the renewal arrives and someone approves it without checking whether you actually need all those seats. Running an audit 60–90 days out changes that — you come to the conversation with real numbers, not guesses.

When to run this

Ideally 60–90 days before any annual renewal. That gives you enough time to clean up unused seats, reduce your committed count, and come to the renewal conversation with actual data instead of guessing. If you're doing this reactively — right before renewal, or after — it's still worth doing, you'll just have less negotiating room.

For month-to-month subscriptions, once a quarter is plenty. For annual contracts, before each renewal.

Part 1: Get your inventory right

1

List every SaaS subscription the company is paying for — IT-managed, Finance-approved, and department-level tools.

2

For each, note: vendor, monthly/annual cost, contract renewal date, seat count committed, and seat count currently assigned.

3

Flag any subscriptions where nobody in IT knew it existed until you found it on the credit card statement.

4

Note which subscriptions have multiple overlapping tools doing the same job (e.g. two project management tools, two video conferencing options).

Part 2: Check Microsoft 365

1

Go to admin.microsoft.com → Billing → Licenses. Note seats purchased vs. seats assigned for each subscription.

2

Go to Reports → Usage → Microsoft 365 active users. Export as CSV. Filter for zero activity in the last 30 days.

3

If you have Entra ID P1/P2 or Business Premium, query SignInActivity via PowerShell for actual last-login timestamps.

4

Check for users in disabled/blocked state who still have active license assignments.

5

Identify shared mailboxes and room mailboxes that have been incorrectly assigned user licenses (they shouldn't need them).

6

Cross-reference your committed seat count against actual users. Any gap is waste you can recover at renewal.

Part 3: Check Google Workspace

1

Go to admin.google.com → Reports → Users. Sort by last login. Export and flag anyone inactive 30+ days.

2

Check for suspended users — they still count as licensed seats in most Workspace editions.

3

Look for accounts with a lastLoginTime of 1970-01-01 (epoch zero) — these are accounts that were created but never used.

4

Review your Billing → Subscriptions page. Confirm your committed seat count matches your actual active user count.

5

Check if any users are on a higher-tier edition than they need (e.g. Business Plus when Business Standard would cover their usage).

Part 4: Check Slack

1

Go to slack.com/admin → Members. Sort by last active. Flag anyone inactive 30+ days.

2

On Business+ or Enterprise Grid: Settings & administration → Analytics → Members for more detailed activity data.

3

Deactivate members who are no longer with the company and haven't been deactivated yet.

4

Check your guest accounts (single-channel and multi-channel) — some plans charge separately for these.

5

Note: Slack auto-credits truly inactive members so the billing impact here is smaller, but access hygiene still matters.

Part 5: Check GitHub

1

Go to your Organization → People. Review members who haven't had recent commit/PR activity.

2

For GitHub Teams: Settings → Billing shows your seat count. Every org member counts as a paid seat on Teams — there's no automatic inactivity removal. GitHub Enterprise Cloud has active committer billing in some configurations; check your specific plan.

3

Check for outside collaborators — they may have access to repos but not appear in your main member count.

4

Review pending invitations that were never accepted — these may still count against your seat limit.

Part 6: Check Zoom and Jira

1

Zoom: Admin → User Management → Users. Filter by licensed users, sort by last sign-in. Inactive licensed users can be downgraded to Basic (free) rather than removed.

2

Jira/Confluence: Atlassian admin → Users. Check last active date. Change inactive users from licensed product access to Unlicensed.

3

For Jira Cloud specifically: billing is based on users with product access, not just accounts in the directory. Removing product access immediately reduces your seat count.

Part 7: Before you act

1

For any user you plan to remove or downgrade: confirm with their manager they're genuinely inactive (not on leave, part-time, or in a role that doesn't require frequent logins).

2

Check for service accounts, bot accounts, and shared mailboxes before removing — these often have zero human login activity but are actively used by systems.

3

Document what you're changing before you change it. A spreadsheet of before/after seat counts per tool takes 10 minutes and saves headaches later.

4

After cleanup, revisit your committed seat counts with each vendor before their next renewal date.

If you don't want to do this manually every quarter

The checklist above works well as a pre-renewal exercise. The problem is that stale accounts accumulate between audits and you only catch them when you go looking. If you want that check to run automatically — daily instead of quarterly — Reach Seats connects to all the tools above via OAuth and surfaces inactive seats in one dashboard, with the monthly cost per seat.

Run this checklist automatically, every day

Connect your providers once. Reach Seats handles the inactive seat check across M365, Google Workspace, Slack, GitHub, Zoom, and Jira on a 24-hour cycle.

Start 7-day free trial →No credit card. Full access from day one.