When a subscriber taps cancel, you get one screen with their full attention.
The play this week:
Use that screen for a single message matched to why they are leaving
Price worries get a discount or a cheaper plan
Changed needs get a different plan
Low usage gets a reminder of what they will lose, or a quick win they can get today.
The evidence comes from RevenueCat, which published an analysis of 21,960,020 Apple Retention Messaging messages across 309 apps where they ran this program.
The idea and why it works
RevenueCat defines save rate as the share of subscribers who saw the retention message and took action.
Of the 309 apps studied, the median retention was 17%. For a quarter of the most used apps (roughly 75) retention was 27% . For the top 10% of apps retention stood at 42%.
The most useful finding is about the offers. Subscribers saw about 4.3 million promotional offers and 1.3 million plan-switch offers between March and September, and RevenueCat says that from June to September, when its tracking was complete, they "accepted only about 1.1% of promotional offers and 0.6% of plan-switch offers". So most of the recorded saves come from people who read the message and chose not to cancel.
The Learning? Lead with reason-matched message and treat discounts as a tool for a specific cohort
RevenueCat says 44% of apps making $1 million or more a month have tried Retention Messaging through its platform, showing a growing trend among app developers to try this form of a tactic to improve uninstall and unsub rates.
The caveats you need before acting:
The analysis "does not establish that messages alone caused subscribers to stay or renew." Some of those subscribers might have stayed anyway.
The sampe, size while ok for empiricial data, is small enough to not be used for large scale projections.
All of this is Apple iOS data. The same idea on a web cancel page (Stripe customer portal, Paddle, Lemon Squeezy, or a paid newsletter on Kit or beehiiv) has not been measured in this dataset.
Who is it for?
Indie iOS app makers with auto-renewing subscriptions.
Solo SaaS builders billing through Stripe or another web checkout.
Creators selling paid memberships, courses on a subscription, or paid newsletters.
It is worth the effort once you see roughly 30 or more cancellation starts a month. Below that, the effort is not worth the time.
What you need (tools, time, cost)
iOS: App Store Connect, optionally RevenueCat
Apple describes Retention Messaging in App Store Connect as "open to all", and says messages are "fully testable in sandbox". The real-time API version needs Apple's approval through an interest form.
Web: Stripe's customer portal, or a cancel survey page you build in front of your billing provider's cancel step.
Time: two to four hours to bucket reasons and write copy, make ads plus setup time.
Cost: The cost you control is any discount you give away. Hence discounts need to stay selective.
Step-by-step
Bucket your last 30 to 50 cancellations. Pull exit-survey answers, support tickets and usage data. Sort each into price, needs changed, or low usage. Note the share of each bucket; that tells you which message matters most.
Write two messages per bucket. Use templates. Keep each to two or three sentences and one clear button. Do A/B or incrementality
Set eligibility rules. Keep discounts away from free-trial users and anyone who has already redeemed an offer
iOS setup via App Store Connect. Create retention messages and map them to your subscriptions. Apple says each message must contain text, with an optional image or offer, and that when a customer is eligible for an offer, "the image will be replaced by an offer." Apple describes these messages as tied to specific subscriptions, and its session does not describe a step where the subscriber picks a reason, so on iOS you match on what you know: plan, tenure, trial status, and (through the real-time API) your own usage data.
iOS setup via RevenueCat. If you have real-time API access, RevenueCat's Retention Messaging setup walks you through connecting a sandbox URL, running Apple's performance test, creating a default fallback message, then per-product messages. Its targeting rules include "is in free trial" and "has not redeemed an offer in the last N days".
Web setup via Stripe. Stripe's portal can collect a cancellation reason from a fixed list, including "It's too expensive" and "I no longer need it". Stripe's retention rules let you target an offer by cancellation reason, months subscribed, spend and subscription status, and offer either a discount or a downgrade.
Web setup elsewhere. On Paddle, Lemon Squeezy, Kit or beehiiv, put a one-question survey page in front of your cancel link where you control that link. Show the matched message, then a clear "Continue to cancel" button. Where you cannot intercept the cancel step, send the matched message as an email the same day.
Measure for 60 days before you scale. Judge on renewals and revenue, as described under Metrics, before you add more offers.
Template copy
Price ("It's too expensive")
"Before you go: keep everything for 30% off your next three months. If money is tight, our Lite plan at $5 a month keeps your saved work and the core features. [Take 30% off] [Switch to Lite] [Continue to cancel]"
Needs changed ("I need more features" / "I no longer need it")
"Sounds like your needs have shifted. The Lite plan covers [the one feature they use most] for half the price, and you can switch back any time without losing anything. [Switch plan] [Continue to cancel]"
Low usage (few sessions in the last 30 days)
"If you cancel, you lose [your 14 saved projects / your streak / your archive] at the end of this billing period. Most people who come back start with [one 5-minute action]. Want to try that first? [Show me] [Continue to cancel]"
Always make cancelling one obvious click away.
Worked example
Take a $10-a-month product with 200 cancellation starts a month.
At RevenueCat's iOS median save rate of 17%: 200 × 0.17 = 34 saves, or $340 a month in revenue that would otherwise have left.
Assume a third of those saves re-churn within 60 days: 34 − 11 = 23 retained, or $230 a month.
Now the discount cost. Say 40% of starts cite price (80 people), and the price message saves the same 17% of them: about 14 people. If all 14 took 30% off for three months, that costs 14 × $3 × 3 = $126 over the quarter.
Net over three months, on those assumptions: 23 × $10 × 3 = $690 kept, minus $126 in discounts, which is $564.
On a web flow with no benchmark, plan around something closer to RevenueCat's bottom-quarter figure of 10%: 20 saves, $200 a month before re-churn. The re-churn share and the discount share are assumptions; replace them with your own data after the first 60 days.
Metrics to watch
Save rate = saved ÷ started cancel. Track it per message bucket.
30-day and 60-day re-churn of saved subscribers. A save that cancels four weeks later bought you one month.
Revenue per cancel start, net of discounts. This stops a generous offer from looking like a win.
Offer acceptance rate. If yours tracks RevenueCat's roughly 1%, your message is doing the work and you can shrink the discount.
Pitfalls
Discounting everyone teaches your base that cancelling pays. Keep offers for the price bucket and long-tenure customers.
Counting saves without a holdout overstates the effect. Leave 10% to 20% of cancel starts with no message if your tooling allows a random sample.
Making cancellation hard to find. Keep "Continue to cancel" visible on every screen of the flow.
Writing generic copy. "We'd hate to see you go" gives the reader nothing to act on.
Variations
Pause instead of cancel for seasonal products, offered in the needs-changed bucket.
Founder note for small products: a short personal message asking for one sentence of feedback, with a reply that offers help.
Pair it with an earlier nudge. The same reason data can trigger an offer before renewal, which links well with the 30-day upsell window play and the exit-intent lead magnet trigger.
Start small: three messages, one discount, 60 days of data. Then cut whatever does not keep revenue.

