MondayKeep

MondayKeep › Guide

Churn early warning signals for B2B SaaS: what to watch every week

Most cancellations do not come out of nowhere. Weeks before, the account usually looks different from its own normal: fewer people log in, seats get removed, a card fails. This guide covers the signals worth checking every week, how to tell a real signal from noise, and how to compute them in a spreadsheet.

By SaaSCron · Updated November 9, 2026

Leading vs lagging signals

A cancellation, a non-renewal or a downgrade is a lagging signal: by the time you see it, the decision is made. Leading signals show up earlier and give you time to act. In B2B SaaS the most useful ones come from three places you already have: product usage, seat counts and billing events.

1. Usage below the account's own normal

The strongest everyday signal is an account using the product less than it usually does. The key word is usually. Comparing every account with your average customer does not work: a 4-person agency will always look “low” next to a 200-seat customer, and a large account sliding from 180 to 140 weekly users still looks “high”.

Compare each account with itself instead:

  • Baseline: the median of the account's weekly active users over its previous 8 weeks. The median ignores one odd week; the average does not.
  • Normal swing: how much the account moves in ordinary weeks. A robust way is the median absolute deviation (MAD): take each week's distance from the median, then the median of those distances. Multiplying by 1.4826 puts it on the same scale as a standard deviation.
  • Flag: this week is well below the baseline in percent and below the normal range (for example, median minus 2 × the robust spread) and by more than one or two people.

Worked example: an account had 38, 41, 39, 40, 42, 37, 39 and 40 weekly active users. The median is 39.5. The distances from it are 1.5, 1.5, 0.5, 0.5, 2.5, 2.5, 0.5 and 0.5, so the MAD is 1 and the robust spread is about 1.5. This week it had 20 users: 49% below its baseline and far below its normal range of roughly 36.5 to 42.5. That is a real signal. Another account that swings between 22 and 38 every week and lands on 25 is not.

Two weeks in a row below the normal range is stronger than one: a single quiet week is often a holiday or a release freeze.

2. Seats removed

When a customer removes seats, someone decided the product is worth less to them. Always look at it as a number and a percent together. “-2 seats” means little at a 200-seat customer and a lot at a 5-seat one, where it is 40% of the account. Percent alone hides scale; the number alone hides proportion.

Seat removals also often mean a person left. If that person was your champion, the one who chose and defended your product, the account can drift without anyone noticing. When seats drop, ask the account admin who left and whether you have a new main contact.

3. Payment friction: failed payments and expiring cards

Some churn is not a decision at all. A card expires or a payment fails, retries run out and the subscription ends. This is usually called involuntary churn, and it is the most fixable kind:

  • Cards expiring this month or next: remind the billing contact before the expiry date, with a direct link to update the card.
  • Failed payments this week: reach a human at the customer, not just the automated retry email. Billing inboxes are often unread.
  • Repeated failures: two failures in a row deserve a personal email or call the same day.

4. Downgrades

A drop in an account's monthly recurring revenue against its own recent median, whether from a plan downgrade or fewer paid seats, often comes before a full cancellation. Ask what changed. Sometimes the answer is budget, and sometimes it is a missing feature you can point them to.

5. Paying but silent

An account that pays every month but has had no active users for weeks is at risk at renewal, even if nothing else looks wrong. Offer onboarding help while there is still time.

Signals that are usually noise

  • Whole-base dips. When most of your customers drop in the same week (end-of-year holidays, regional holidays), individual dips are not news. Compare each account's change with the typical account's change that week.
  • Tiny teams. In a 2-person account, one vacation is a 50% drop. Require a minimum absolute change before you flag a small account.
  • Seasonal businesses. Schools, tax firms and retailers have their own calendars. A long baseline and a note on the account help.
  • Normal variance. Some accounts swing every week. If this week is inside the range the account usually moves in, it is not a signal.

Labeling each flag as “fixable risk” or “noise” keeps the weekly review short. You spend time on what you can change and stop worrying about weeks that look scary but are ordinary.

A 30-minute Monday routine

  1. Export last week's numbers per account: active users, seats, MRR, card expiry and failed payments.
  2. Compute each account's baseline and normal range, and flag the signals above.
  3. Pick the five accounts with the most serious fixable signals.
  4. For each one, write down the evidence (the numbers) and one action for this week.
  5. Next Monday, check whether the actions worked.

Doing it in a spreadsheet

With one row per account per week, these formulas get you most of the way (Google Sheets or Excel):

Baseline (median of previous 8 weeks):   =MEDIAN(B2:B9)
Change vs baseline:                      =(B10-MEDIAN(B2:B9))/MEDIAN(B2:B9)
MAD (enter as an array formula in Excel): =MEDIAN(ABS(B2:B9-MEDIAN(B2:B9)))
Low end of normal range:                 =MEDIAN(B2:B9)-2*1.4826*MAD

It works, but it gets tedious with many accounts, and the hard part is doing it every single Monday.

Where MondayKeep fits

MondayKeep does exactly this routine for you. Upload a CSV with one row per account per week, and every Monday you get an email with the 5 accounts most likely to churn: each compared with its own baseline, seats as a number and a percent, a Fixable risk or Noise tag, and the raw evidence behind every reason. US$ 29/month.

Start · US$ 29/monthSee a sample report