SaaSClerk Blog · SaaS spend audits

SaaS Subscription Audit Checklist: The 12-Month Mailbox Sweep

A SaaS subscription audit is a nine-step sweep that ends with a list where every line has an amount, a billing interval, a renewal date and a named owner. Do it from three sources — billing email, card statements and your password manager — because each one finds subscriptions the other two cannot see. Budget one hour for a team under thirty people.

The checklist below is the order I use. It is deliberately boring. The interesting part is not the searching, it is step seven: an inventory without an owner column produces findings nobody acts on before the charge lands.

Before you start: pick the boundary

Decide what counts as a subscription for this audit. The useful boundary is any recurring charge for software — that includes the design tool seat bought with a personal card and expensed later, and excludes one-off licences and hardware. Write the boundary down, because two people who audit without agreeing on it will produce two lists that both look complete.

Steps 1 to 3: the three sources

  1. Billing email, twelve months back. Search for invoice, receipt, subscription, renewal, payment confirmed, then repeat the search filtered by sender domains you already know. Twelve months is not a preference: annual plans bill once, so anything shorter misses them and reports a falsely clean result.
  2. Card and bank statements, same window. Export and look for small recurring amounts. Charges below ten a month survive every memory-based audit, and they are the ones that add up quietly.
  3. Password manager. Search it for each vendor name you collected, plus generic terms like work and billing. Every saved login is a subscription candidate; every candidate without a matching charge is a trial that never converted or a seat you already lost.

Step 4: the sources that never appear in email

Three categories are structurally invisible to a mailbox sweep, so check them separately: purchases billed through an app store or play store (the receipt comes from Apple or Google, not the vendor), team seats someone bought on the company card, and marketplace or add-on charges inside a tool you already pay for. Ask each person on the team for their expensed software rather than assuming the card statement covers it.

Step 5: normalise to a monthly number

Once per month, once per year and once per seat are not comparable as written. Convert everything to a monthly equivalent — an annual charge divided by twelve — before you sort. This is the step that turns a list of line items into a spend figure you can actually reason about, and it is where annual plans stop looking cheap.

Step 6: deduplicate on service, not on email

The same tool usually shows up three times: a personal plan, a team plan, and a receipt from a workshop sign-up. Merge on the service name, keep the highest surviving amount, and note how many seats each line covers. A duplicate plan is the easiest saving in the whole audit and it is invisible while the list still looks like different products.

Step 7: the two columns that decide the outcome

Add these to every line, and do not leave them blank:

Step 8: sort by annual cost and make three piles

  1. Cancel. Anything the owner cannot show using in the last sixty days.
  2. Downgrade or merge. Duplicate plans and tiers above real usage.
  3. Keep and calendar. The rest. For annual charges, put the renewal date thirty days earlier in the calendar — that window is when the decision is still yours.

Step 9: decide how you will know next time

An audit is a snapshot, and the list starts drifting the day you finish it. Two habits hold: re-run the sweep twice a year, and re-run it after any hiring round, because new seats are where new subscriptions come from. If nobody will own the recurring habit, the audit quietly becomes a one-off document about last year.

Where a tool helps and where it does not

The searching is the mechanical part. SaaSClerk connects to your mailbox read-only (the gmail.readonly OAuth scope, or an IMAP authorization code), reads twelve months of billing email, and returns the service, amount, billing interval and next renewal date for each subscription, normalised to a monthly equivalent — which is steps one to six without the hour. It does not read your card statement or your password manager, and it cannot cancel anything on your behalf: the owner column and the cancel click stay with you. Tokens are encrypted at rest with AES-256-GCM and no email content is stored; paid plans send a renewal reminder fourteen days before the date on the line.

FAQ

How far back should a SaaS subscription audit go?

Twelve months, because annual plans bill once a year and a shorter window reports a falsely clean result.

Where do subscriptions hide besides email?

App-store receipts billed through Apple or Google, seats bought on someone else's card, and free accounts that converted after a trial.

What columns should the inventory have?

Service, amount, billing interval, next renewal date, owner. The owner column is the one that decides whether anyone acts before the charge.

How often should a small team re-run it?

Twice a year, plus once after every hiring round.

Related reading

If step 1 is the part you were not going to do: plans and prices are on the pricing page, and the mailbox scan runs free for twelve months of history.