Downgrade Churn: The Contraction Revenue Leak That Never Touches Your Cancellation Flow
Most plan downgrades happen in account settings, not on your cancel page — so the revenue leak never shows up in your cancellation-flow data at all.
Open your billing settings page right now and find the "change plan" link. Chances are it sits completely outside whatever cancellation flow you've built — a plain dropdown, a couple of tier cards, maybe a confirm button. No reason capture. No offer. No event fired to whatever tool tracks your saves. A customer can go from your $199 plan to your $49 plan in four clicks and nothing you built for the cancel page ever sees it happen.
That number climbs as a business ages. Early on, almost all of your lost revenue comes from cancellations — customers who never really landed. As the base matures and the easy-to-lose customers have already left, downgrades take up a bigger share of what's left to lose. By the time a company is established, ChartMogul's data puts contraction at roughly three in every ten dollars of MRR lost. Most teams still run their retention program as if that number were zero, because the only leak they built anything to catch is the one with a cancel button attached.
Three different ways a customer shrinks their spend
"Downgrade" gets used loosely enough that it's worth separating what's actually three distinct events, each with its own trigger and its own blind spot.
| Event | Where it happens | Who initiates it | Typically captured by |
|---|---|---|---|
| Self-serve plan downgrade | Account or billing settings, outside the cancel flow | The customer, unprompted | Nothing — usually just a webhook that updates MRR |
| Downgrade offered at cancellation | The cancel flow itself, as a save attempt | You, in response to a cancel click | The cancellation flow and its offer-acceptance tracking |
| Seat or license contraction | A renewal or an admin console, on a team account | An account admin doing a usage review | Sometimes — only if you track per-seat activity |
Our pause vs discount vs downgrade comparison covers the second row — downgrade as a retention offer you present at the moment someone's trying to leave. Our seat-based churn piece covers the third — team accounts quietly shrinking at renewal as unused licenses get cut. This is about the first row, and it's the one almost nobody instruments: a customer who never clicked cancel, never saw a save offer, and never told you why. They just moved themselves to a cheaper tier and kept using the product.
Why the self-serve path stays invisible
It's not negligence, usually — it's an artifact of how billing pages get built. The cancellation flow gets product investment because it's the moment you're about to lose the customer entirely, so someone eventually sits down and designs it properly: reason capture, a matched offer, analytics on what saves and what doesn't. The plan-change page gets built once, early, by whoever was wiring up Stripe Checkout, and then nobody touches it again because nothing about it looks broken. It processes the plan change correctly. It just doesn't ask anything.
That asymmetry means your two most economically similar behaviors — "I want to pay less" expressed by clicking cancel, and "I want to pay less" expressed by picking a cheaper tier in settings — get radically different treatment. One gets a retention offer and a logged reason. The other gets a Stripe webhook and a smaller invoice next month, with no record of why.
The formula most dashboards get slightly wrong
Baremetrics and Chargebee both define contraction MRR the same way:
That's the correct definition for measuring total revenue lost, and it's the one that feeds directly into gross revenue retention. The mistake is treating that combined number as the end of the analysis instead of the start of it. A dashboard that reports "$8,400 in contraction this month" tells you almost nothing actionable — you need the split. If $7,000 of that is cancellations and $1,400 is downgrades, you have a churn problem. If it's the other way around, you have a packaging or pricing problem, and throwing more retention-offer budget at the cancel page won't touch it, because the customers driving that number never went near the cancel page.
Source: ChartMogul, MRR movements benchmarking data
Early-stage companies see the inverse of that split — almost all of it churn, because there aren't enough tenured customers yet for downgrades to be a meaningful category. The 70/30 split shows up once a business has been running long enough for its base to mature, which is exactly the point where most founders have stopped paying close attention to contraction because the cancellation number already looks fine.
What a downgrade is actually telling you
A cancellation and a downgrade can share a root cause but point at different fixes. Someone who cancels because a plan is too expensive has decided the whole relationship isn't worth it. Someone who downgrades because a plan is too expensive has decided the opposite — the product is worth keeping, just not at that price or that scope. That's a customer telling you your packaging doesn't match how they actually use the product, which is a much more useful, much more fixable signal than a straight cancellation, provided you're set up to hear it.
| Downgrade pattern | What it usually means | What to check |
|---|---|---|
| Concentrated in one tier | That tier is mispriced or overscoped relative to what it delivers | Feature usage data for accounts on that tier before they downgraded |
| Concentrated in a signup cohort | Onboarding oversold the top tier at signup rather than a genuine fit | Whether sales or the pricing page nudges new signups toward a tier above their real usage |
| Repeated downgrades from the same account | The account is on a slow path to zero, not a stable lower tier | Whether the next event for that account is usually a cancellation within 60–90 days |
That last row matters more than it looks. A downgrade isn't always a stable landing spot — for a meaningful slice of accounts, it's a stop on the way to cancelling, not an alternative to it. If you're only measuring downgrade rate as its own number, you'll miss that a chunk of your "successfully retained at a lower tier" customers are actually mid-churn, just on a slower clock than a straight cancellation.
Closing the gap without rebuilding your billing page
You don't need to turn your plan-change page into a full replica of your cancellation flow. Three changes cover most of the gap:
Ask one question on the way down, not up
You don't need a reason survey every time someone upgrades — nobody's confused about why revenue is going up. Downgrades are the direction worth a single, short prompt: a dropdown with four or five reasons ("not using enough of the top tier," "budget," "team got smaller," "found what I needed on the cheaper plan") takes one extra screen and turns a silent MRR loss into a segmented one.
Route repeat downgraders into your cancellation flow's offer logic
If an account has downgraded more than once, treat the next attempt as functionally equivalent to a cancel click. Show the same kind of matched offer you'd use on the cancel page — a pause if usage has dropped rather than the value dropping, a different tier shape rather than just "less" — instead of letting the change process silently a second time.
Feed downgrade events into the same reporting as cancellations
If your MRR churn dashboard already breaks out gross and net churn, add a downgrade line next to it, split from straight cancellations. The retention rate calculator models this directly — plug in your downgrade MRR and your cancellation MRR as separate contraction inputs instead of one combined number, and you can see immediately which one is doing more damage to your GRR this quarter.
Why this is worth fixing before your next pricing change
Teams that see a rising downgrade rate often respond by tightening tier boundaries or raising the price of the tier below the one people are downgrading to — treating it as a pricing-page problem. Sometimes that's right. Just as often, the downgrade rate is a symptom of a plan-fit problem that a pricing tweak won't fix, because the customer already told you what was wrong on the way down and nobody was listening. Read the reason data before you touch the price. It's the cheapest diagnostic you have, and it's sitting in a page you probably haven't updated since launch.
The customers behind this number were never going to show up in your cancellation analytics, because they never cancelled — they just quietly decided your product was worth less to them than it used to be. A cancellation flow like CancelFlow is built to catch the moment someone's about to leave outright, but the same instinct — ask why, respond with something specific — belongs on the plan-change page too. It's the same revenue, leaking through a different door.
Frequently asked questions
What is contraction MRR?+
Contraction MRR is the total monthly recurring revenue lost from existing customers who reduce their spend without leaving entirely — mainly plan downgrades, plus dropped add-ons or reduced seat counts. Baremetrics and Chargebee both define it the same way: Contraction MRR = Downgrade MRR + Cancellation MRR is the wrong formula most dashboards imply by lumping the two together, when the useful version keeps them apart — contraction MRR should track downgrades specifically, separate from the cancellation MRR that comes from a customer leaving outright.
Is a downgrade the same thing as churn?+
No. Cancellation is the customer leaving; a downgrade is the customer staying at a lower price. Gross revenue retention (GRR) counts both against you because both represent revenue you no longer have, but they are different behaviors with different causes and need different fixes — a downgrade is a signal the plan-to-usage fit broke, not that the relationship ended.
How do I calculate my downgrade rate?+
Downgrade rate = customers who moved to a lower-priced plan in a period ÷ total customers at the start of that period × 100. Track it separately from your cancellation rate, and segment by which plan they downgraded from — a downgrade rate concentrated in one tier usually means that tier is priced or scoped wrong, not that your whole customer base is dissatisfied.
Should my cancellation flow also catch self-serve downgrades?+
Yes, if a subscriber can lower their plan without going through the same flow that intercepts a cancellation, you are missing half the story. A subscriber changing from Pro to Starter in account settings is making almost the same economic decision as one who clicks cancel and gets offered a downgrade — the only difference is which button they found first. Routing both paths through the same reason-capture and offer logic closes that gap.
Stop losing subscribers today
One script tag. One function call. A live cancellation flow in under 10 minutes.
Start free trial →