How to handle app subscription churn (and when to stop worrying about it)
You shipped subscriptions. Revenue is growing. Then you open your analytics dashboard and notice that 8% of your subscribers disappeared last month. Nobody emailed you. Nobody left a review. They just quietly stopped paying. This is churn, and it's two completely different problems disguised as one number.
The math that actually matters
Monthly churn rates get thrown around a lot, but the number that determines whether your app survives is the compounding effect. At 5% monthly churn, you lose 46% of subscribers in a year. At 8%, you lose 63%. At 10%, you lose 72%.
That means at 8% monthly churn, you need to acquire almost two new subscribers for every one you retain just to keep revenue flat. If your marketing budget is zero and you're relying on organic discovery, that math gets grim fast.
Benchmarks for context: consumer subscription apps typically see 6-12% monthly churn. Productivity tools tend toward the lower end. Entertainment and fitness apps toward the higher end. If you're below 5%, you're doing well. Below 3% and you have a genuinely sticky product.
But the aggregate number hides the real story. You need to split it.
Voluntary vs involuntary: two different problems
Voluntary churn is someone actively deciding to cancel. They went into Settings, tapped Manage Subscriptions, and turned off auto-renew. They made a choice.
Involuntary churn is a payment failing. Expired credit card, insufficient funds, bank flagging the transaction, a billing address that changed. The subscriber didn't decide to leave. Their payment method broke.
In most indie apps, involuntary churn accounts for 20-40% of total churn. That's significant because the fixes are completely different. Involuntary churn is a technical problem. Voluntary churn is a product problem.
If you're not tracking them separately, you're trying to solve two problems with the same tool. RevenueCat splits these automatically in its dashboard. If you're using StoreKit directly, you'll need to track renewal failures separately from active cancellations.
Fixing involuntary churn (the easy wins)
Apple and Google both have billing retry logic, but it's not aggressive enough on its own. Here's what you can actually control.
Grace periods. Apple offers a 6 or 16 day billing grace period. During this window, the subscription stays active while Apple retries the payment. Enable this in App Store Connect under Subscriptions > Billing Grace Period. It's free and recovers 10-15% of failed payments with zero effort on your part. If you haven't turned this on, do it now. Seriously. Close this article, go enable it, then come back.
In-app messaging for billing issues. When you detect a billing retry state (via StoreKit 2's Transaction.currentEntitlement or RevenueCat's subscriber info), show a gentle banner: “There was an issue with your subscription payment. Please check your payment method in Settings.” Keep it informational, not alarming. A lot of people don't even know their card expired.
Push notifications. If someone's payment fails and they haven't opened the app in a few days, a push notification about the billing issue can recover them before the grace period ends. Don't be spammy about it. One notification is enough.
Don't immediately cut access. Some developers lock features the instant a payment fails. This creates a terrible experience for someone whose card just expired. Give them the grace period. Keep access active. The goodwill is worth more than whatever you lose from a few days of “free” access.
These four things together typically recover 20-30% of involuntary churn. For an app with 1,000 subscribers at $5/month, that's roughly $300-450/month in revenue you were losing for no reason.
Why people actually cancel (it's rarely what you think)
Ask indie developers why users cancel and they usually guess “price.” Sometimes they're right, but not in the way they think. In most consumer apps, the top cancellation reasons look like this:
1. They stopped using the app. This is the biggest one, and it's uncomfortable because it means the product didn't earn a spot in their routine. They downloaded it, subscribed during the trial, used it for a week, and drifted away. The subscription renewal email is what reminds them to cancel.
2. They got what they needed. Some apps solve a temporary problem. Someone uses a meal planning app to learn a few recipes, then stops. A budgeting app helps them get out of debt, then they don't need it anymore. This churn is natural, and trying to prevent it often leads to dark patterns.
3. Price relative to usage. Notice it's not “price is too high” in absolute terms. It's “I'm paying $7/month and I opened this app twice last month.” The perception of value collapses when usage drops. The fix isn't lowering the price. It's increasing usage.
4. A competitor did it better. They found something else. Our downgrade rage scanner finds apps where users are leaving specifically because a better alternative showed up. If you're reading competitor reviews and people keep mentioning your app as the thing they switched from, that's a problem.
5. A bad update. This one is fixable and also frustrating. You shipped what you thought was an improvement, and a subset of users hated it. Check your churn by cohort around release dates. If cancellations spike 2-5 days after an update, the update broke something in their experience.
Price is usually reason #3 or lower. The instinct to discount your way out of churn almost never works because the underlying issue is usage, not cost.
Cancellation surveys (and why most are useless)
Apple added cancellation reason reporting in App Store Connect. The problem is the options are so generic (“Too expensive,” “I don't use it enough”) that they don't give you actionable information. People also tend to pick the first reasonable option and move on.
If you want useful data, build a lightweight in-app cancellation flow. When someone navigates to cancel (or when you detect the cancellation via StoreKit), show a one-screen survey with 4-5 specific options tailored to your app. Not “too expensive” but “I don't use [specific feature] enough to justify the cost.” Not “found an alternative” but “I switched to [competitor name].”
Keep it to one tap. No text fields unless optional. Response rates for one-tap surveys run 30-40%. Text field surveys drop to under 10%.
The data from 50 specific cancellation reasons is worth more than 500 generic ones.
The first 7 days decide everything
Most subscription churn happens at the first renewal. The user signed up for a free trial, poked around, and either integrated the app into their life or didn't. By the time the trial ends, the decision is already made.
This means your day-1 and day-7 retention numbers predict churn more than almost anything else. If people aren't coming back within the first week, no amount of win-back emails will save you.
What actually helps during trial:
Get them to the value moment fast. For a habit tracker, that's logging their first habit. For a budgeting app, that's seeing their first weekly summary. Whatever the thing is that makes someone go “oh, this is useful,” your onboarding should remove every obstacle between signup and that moment.
Don't gate too much behind the paywall during trial. If someone can't experience the premium features during their trial, they have no reason to pay when it ends. Let them taste the full product. The trial exists to create dependence, not to tease.
Send useful notifications during the first week. Not promotional ones. Useful ones. “Your first weekly report is ready” or “You hit your goal 3 days in a row.” The app should feel alive and paying attention.
The annual plan trick
Annual subscribers churn at roughly 50-60% less than monthly subscribers. The reasons are partly psychological (bigger commitment = more invested) and partly mechanical (they only get one decision point per year instead of twelve).
The conventional wisdom is to price your annual plan at a 30-40% discount to monthly. So if monthly is $7, annual is $49/year ($4.08/month). The discount needs to feel significant enough to justify the commitment.
Where most indie devs go wrong: they show the annual plan as a small option beneath the monthly plan. Flip it. Make annual the default. Show the monthly plan as the “flexible” option. The framing matters more than the discount percentage.
Some apps go further and only offer annual after a monthly subscriber has been active for 2-3 months. The thinking: someone who's already proven they use the product is much more likely to commit to a year. The conversion rate on these targeted annual offers is 2-3x higher than showing it at signup.
One caution: annual plans help your churn number look better, but they can mask product problems. If annual subscribers aren't renewing after year one, you just delayed the reckoning. Track annual renewal rates separately.
Win-back: getting cancelled subscribers to return
Apple offers a win-back mechanism through offer codes and promotional offers. You can send a discounted re-subscription offer to people who cancelled. The question is whether it's worth the effort for a small indie app.
The honest answer: usually marginally. Win-back conversion rates typically run 2-8% depending on the offer and timing. If you have 100 cancelled subscribers and win back 5 at a 50% discount, you've recovered $17.50/month (at a $7/month price). It adds up over time, but it's not transformative.
Where win-back actually works: after a major update. If someone left because the app lacked a feature, and you shipped that feature, a targeted message saying “hey, we added the thing you asked for” converts at 3-5x the generic win-back rate. This requires tracking cancellation reasons (see the survey section above).
Timing matters too. Win-back within the first 30 days after cancellation converts 2-3x better than after 90 days. After six months, the subscriber has probably forgotten your app exists.
Don't offer steep discounts. A 30% discount for the first return month is enough. If someone needs 70% off to come back, they're going to churn again anyway.
Engagement is the only real churn prevention
Every tactic above is damage control. The actual way to reduce churn is to build something people use regularly. That sounds obvious, but the implications are specific.
Track your usage-before-cancellation pattern. Look at the last 30 days of activity for subscribers who cancelled. You'll almost certainly find that usage dropped to near zero 2-3 weeks before they actually hit cancel. The decision to leave happened long before the action.
This means you have a window. If you can detect dropping engagement (opened the app 0 times in the last 10 days after averaging 4 times/week), that's your intervention point. A push notification, an email, a new feature highlight. Not a “we miss you” message. Something useful: “Your weekly summary has some interesting changes” or “We added [feature] this week.”
Build hooks into daily routines. The stickiest apps attach themselves to something people already do. Checking finances in the morning. Logging meals at lunch. Reviewing the day before bed. If your app requires the user to remember to open it with no external trigger, you're fighting human nature.
Subscription models work best when the app delivers ongoing, visible value. A one-time purchase might actually be more honest for tools people use intermittently.
Cohort analysis: finding what you broke and what you fixed
Aggregate churn is nearly useless for decision-making. You need to see churn by acquisition cohort.
Group subscribers by the week or month they signed up. Then track what percentage of each cohort is still active at month 1, month 3, month 6. This tells you whether your product is getting better or worse over time.
If your March cohort retains better than your January cohort at the same timeframe, something you changed is working. If it's getting worse, something you changed isn't.
RevenueCat provides cohort charts. App Store Connect has some version of this in the retention reports. If you're building your own analytics, a simple spreadsheet with cohort rows and month columns works fine when you're small.
The most useful cohort split: by acquisition source. If you got subscribers from a Product Hunt launch, a Reddit post, and organic App Store search, compare their retention. You'll often find that one source brings in curious browsers (high churn) and another brings in people with actual intent (low churn). Spend more time on the second source.
When churn is actually fine
Not all churn is bad. Some of it is the market telling you useful things.
If people who cancel are consistently outside your target audience, that's healthy filtering. A focus timer app losing subscribers who wanted a full project management suite isn't a product problem. It's a positioning problem. Fix your App Store listing to set clearer expectations, and that churn will drop because you'll attract fewer wrong-fit users.
If seasonal churn is predictable (fitness apps in February, tax apps in May), that's the category, not your product. Build for it instead of fighting it. Offer seasonal plans. Accept that some categories have natural cycles.
If someone used your app for six months and then outgrew it, that's a success story even though it shows up as churn. The long-term business question is whether enough new users are entering the top of the funnel to replace the ones naturally graduating out.
Zero churn is suspicious. It usually means your user base is stagnant, not that your product is perfect.
A 30-minute churn audit you can do right now
Open RevenueCat (or your subscription dashboard of choice). Look at the last 90 days.
Step 1: Split voluntary vs involuntary. What percentage of churn is payment failures? If it's above 25%, you have low-hanging fruit. Enable grace periods, add billing failure messaging.
Step 2: Check trial-to-paid conversion. If fewer than 40% of trial users convert to paid, the trial experience needs work. They're not reaching the value moment. If conversion is fine but month-2 churn is high, the problem is post-trial engagement.
Step 3: Look at churn by plan type. Monthly vs annual. If monthly churn is 3x annual, consider defaulting new users to the annual option or offering a mid-lifecycle upgrade prompt.
Step 4: Overlay churn on release dates. Did a specific update cause a cancellation spike? Pull up your release history and compare. If version 2.3 shows a correlation with higher churn, go read the reviews from that period. Users will tell you exactly what went wrong.
Step 5: Calculate your payback period. How many months does the average subscriber stay before churning? Multiply by your monthly price. That's your subscriber lifetime value (LTV). If LTV is $28 (4 months at $7), any acquisition channel that costs less than $28 per subscriber is worth pursuing.
Specific things that reduce churn, ranked by effort
Low effort, big impact:
Enable Apple billing grace period (5 minutes, recovers 10-15% of involuntary churn). Add in-app billing failure banner (a few hours). Default to annual plan on the paywall (30 minutes). Send a push notification on day 3 of the trial with a useful tip (1 hour).
Medium effort, solid impact:
Build a one-tap cancellation survey (1-2 days). Create an onboarding sequence that reaches the value moment in under 2 minutes (1-2 days). Add engagement-based push notifications for inactive users (1 day). Build a monthly-to-annual upgrade offer after 3 active months (1 day).
Higher effort, long-term impact:
Implement feature-specific win-back campaigns tied to cancellation reasons (3-5 days). Build cohort analysis into your analytics pipeline (2-3 days). Create a weekly value digest email or notification that summarizes what the app did for the user that week (2-3 days).
For a solo developer, start with the low-effort column. All four of those changes can ship in a single day and will collectively reduce churn by 15-25%.
What scanner data tells us about churn
When we built our six scanners, churn patterns showed up everywhere in the data.
The downgrade rage scanner specifically looks for apps where users are vocal about price increases or feature removals that drove them away. These are apps with high voluntary churn from a specific, identifiable cause. For an indie developer, each of these is a potential acquisition opportunity: a group of paying users actively looking for an alternative.
The zombie scanner finds abandoned apps still pulling users. Many of these are subscription apps where the developer stopped updating but users keep paying because switching costs feel high. Eventually those users will leave. If you're building in the same space, those subscribers are pre-qualified for your product.
The pattern across our data: the apps with the lowest churn aren't necessarily the best apps. They're the ones that embedded themselves deepest into a daily routine. Data lock-in helps too. An app with months of your data is harder to leave than one you could replace tomorrow with zero loss.
The honest truth about churn
You're not going to get churn to zero. Even the best consumer subscription apps run at 3-5% monthly. The goal isn't elimination. It's understanding which churn is preventable and which is the cost of doing business.
Fix involuntary churn first. It's the easiest, highest-ROI work. Then focus on the first-week experience, because that's where most voluntary churn gets decided. After that, it's a product question. Build something that people reach for every day, and the churn number takes care of itself.
If you're earlier in the journey and still figuring out your pricing model or validating whether the idea has legs, churn optimization is premature. Get to 100 paying subscribers first. Then worry about keeping them.
For the broader picture of why users leave (not just subscribers), including onboarding friction, bad updates, and the 72-hour retention window, see the guide on what makes users delete apps.