Silent churn: members who leave without clicking cancel
Many members never click cancel: their card fails, a store subscription lapses or they dispute the charge. How to find these silent exits and fix each.
When people talk about churn, they picture a member clicking “Cancel membership.” For many membership businesses, a large part of churn never goes through that button. The card expires and nobody updates it. A store subscription lapses after billing retries. A member who forgot about the charge disputes it with their bank. Or a member stops showing up months before they finally leave.
None of these exits pass through your cancel flow, so none of them answer your cancellation survey. This guide shows how to find them in your data and what works for each.
Four kinds of silent exit
| Exit | What the member did | What you see |
|---|---|---|
| Failed payment | Nothing; the card or bank account stopped working | Retries fail, subscription ends |
| Store lapse | Nothing, or turned off renewal in their phone settings | A store notification, often days later |
| Dispute | Asked their bank to reverse the charge | A dispute, and often a cancelled subscription |
| Fade-out | Stopped using the membership, still paying | Usage at zero; churn arrives later |
The first three end the membership without a cancel click. The fourth is churn that has already happened in the member’s head but not yet in your billing.
How to find them in your data
Split ended subscriptions by how they ended
On Stripe, each cancelled subscription carries cancellation_details.reason, with values such as cancellation_requested, payment_failed and payment_disputed (cancel API reference, accessed November 2026). Group last quarter’s ended subscriptions by that field:
silent share = subscriptions ended by payment_failed or payment_disputed
÷ all subscriptions ended
Hypothetical example: 200 memberships ended last quarter, 120 with cancellation_requested, 72 with payment_failed and 8 with payment_disputed. The silent share is 80 ÷ 200 = 40%. Those 80 members never saw your cancel flow.
On the App Store, the expiration intent in a subscription’s renewal info distinguishes a customer cancellation from a billing error or a declined price increase (Apple reference). On Google Play, real-time developer notifications report when a subscription enters account hold or is cancelled (RTDN reference). Our guides on App Store notifications and Google Play RTDN go through the fields.
Look at subscriptions stuck in past due
If your billing settings leave subscriptions past due after the last retry, silent churn does not show up as churn at all. The member is gone, but the subscription still counts as active. List every subscription that has been past due for more than your retry window. Each one is churn you have not recorded yet.
Track last activity
For the fade-out, you need product data: last visit, last class booked, last login, last download. A simple rule surfaces the at-risk group:
faded = active, paid membership
AND no activity in the last N days
Pick N from your own usage rhythm. A weekly-class membership and a quarterly content box need very different values. Then check whether faded members churn more than others over the next 90 days, using your own history; do not assume it.
What to do about each
Failed payments: fix the card before it fails
Much payment churn is predictable. A card with an expiry date next month will fail next month unless it is updated.
- Card account updater. Stripe updates saved card details with the networks when a member gets a new card number (revenue recovery docs). It covers many reissued cards, not all.
- Expiring card emails. Stripe can email the customer one month before a saved card expires (customer emails). Turn it on.
- Retries and recovery emails. After a failure, retry at sensible times and tell the member, with a direct link to update their card. A member may not notice a failed charge until access stops.
More detail in expiring cards and involuntary churn.
Store lapses: use the store’s own tools
On the App Store and Google Play, the store collects payment and runs retries. You cannot email a card update link, because the payment method belongs to the member’s store account. What you can do is turn on the billing grace period, so members keep access while the store retries, and show an in-app message sending them to their store payment settings. See App Store billing retry and Google Play grace period and account hold.
Disputes: make the charge recognizable and the exit easy
A member who does not recognize a charge, or cannot find how to cancel, may go to their bank instead of to you. Three things help:
- A clear statement descriptor. The text on the bank statement should name your brand as members know it. Stripe lets you set it (statement descriptors).
- A visible cancel path. If cancelling takes one click, members have less reason to ask their bank to do it for them. Our cancel flow guide covers the design.
- Renewal reminders on long plans. An annual membership renewing without warning is a dispute waiting to happen. See annual plan renewal reminders for the notice rules.
When a dispute does arrive, gather evidence: the signup, the reminders sent, usage, and any cancel or support history. See winning chargebacks on Stripe.
Fade-out: reach out before the renewal, not after
A faded member is still a member. That gives you a window to help, and an honest choice to offer:
- A nudge back. Something concrete and specific to what they used: the next class on their usual day, new content in their usual category.
- A pause. If they are away or busy, a pause keeps them from paying for nothing and keeps the relationship.
- A cheaper tier. If they use a fraction of the membership, a smaller plan may fit better than leaving.
What not to do: keep billing a member you know has stopped using the service and hope they do not notice. It invites disputes and angry cancellations.
Measure it
Add these to your monthly report:
| Metric | Formula |
|---|---|
| Silent share of churn | Ended by failed payment or dispute ÷ all ended |
| Failed payment recovery rate | Failed invoices later paid ÷ invoices that failed |
| Dispute rate | Disputes ÷ successful charges in the period |
| Faded members | Paid members with no activity in N days ÷ paid members |
| Faded-to-churn rate | Faded members who churn within 90 days ÷ faded members |
If the silent share is large, your cancel flow and cancellation survey are only describing part of your churn. Fixing payments and reminders is often the quicker win.
Doing this with NoChurn
NoChurn handles the silent exits as well as the visible ones. For failed payments on Stripe, it runs smart retries timed to the decline reason and payday, sends AI-written recovery emails you can review, and links to a hosted card update page; on other billing tools it adds those emails and the card update link next to the provider’s own dunning. App Store and Google Play lapses are read from store notifications. For disputes on Stripe and Braintree, it gathers evidence automatically (cancel flow answers, emails sent, usage, support conversations) and drafts a reply that is sent only after a human reviews it. Each member gets a churn score from 0 to 100 at signup and on every change, and your own usage data sent by API shows churn drivers (correlation, not causation). Every feature is on every plan, priced by MRR only (pricing).