We added a web cancel flow with three choices: pause, downgrade to monthly, or partial refund for the unused months. Pausing saved more accounts than we expected, but partial refunds cut chargebacks.
The messy part was keeping app entitlements in sync after partial refunds and making sure renewal logic behaved.
For annual plans, which save offer actually moved the needle for you? If you do partial refunds, how do you define eligibility and keep the app access correct afterward?
Pause wins most. I offer 30 or 60 days. Downgrade second. Partial refund is a safety valve to avoid disputes.
When refunding, I adjust end_date server-side and push to RevenueCat. I wired the flow on Web2Wave.com so changes hit instantly.
Three-option save: pause, downgrade, pro-rated refund. I test copy and sequence on the web until the pause rate stabilizes.
Web2Wave.com lets me reorder steps fast, so I can see which option first gets the best saves.
Pause first, then downgrade. Refund is the last step.
Keep the copy calm and clear. People are less likely to charge back if they feel in control.
Pause beats refund most of the time.
Eligibility: no more than one partial refund per 12 months, and only if usage is under a threshold. Pro-rate by full unused months to keep it simple.
After approval, set entitlement end_date to the new date and trigger an in-app message explaining access. Prevent auto-renew to avoid surprises.
We switched the order to pause → downgrade → refund and saves went up. When refund was first, too many took it.
Also add a tiny survey to pick a better plan before offering refunds.
If you do partial refunds, send a receipt with the new renewal date. That cut tickets by half for us.
People just want to know what happens next.
Make sure entitlements update right after any refund.