App subscriptions
Failed payments
Involuntary churn

Gal Cegla
Apple and Google retry store-billed renewals for you, on their terms. Here is how to max out App Store and Google Play recovery settings, why the US shift to web billing moves recovery onto your stack, and how to recover failed web subscription payments with FlyCode.
The Best Failed Payment Solution for App Developers on Google Play and the App Store
The best failed payment solution for app developers is a two-part setup. Inside Google Play and the App Store, turn on every recovery lever the stores give you, because you cannot retry those charges yourself. Then move as many subscribers as you can to web billing, where you own the payment and can run real recovery on it.
That second part matters more every year. Apple and Google run their own retries on store-billed subscriptions, on their own schedule, with their own rules. You can't change the timing, you can't see the decline codes, and you can't route a retry to a backup card. When a renewal fails in the store, your main job is to keep the user in the app and nudge them to fix their payment.
On the web, it's a different game. Your subscription runs on Stripe or a similar billing stack, every failed charge is yours to recover, and the tools for doing it well are far more powerful. This guide covers both sides.

How Apple and Google Handle Failed Renewals Today
Both stores give a failed renewal up to 60 days of automatic retries, and both let you keep users in the app for part of that window. The levers are similar, but the defaults are not.
App Store | Google Play | |
|---|---|---|
Who retries the charge | Apple | |
Total recovery window | Up to 60 days of billing retry | Grace period plus account hold, 60 days by default |
Grace period (user keeps access) | Opt-in in App Store Connect: 3 or 6 days for weekly, 3, 16 or 28 days for monthly and longer | On by default, configurable: up to 30 days on monthly and longer plans |
After grace period | Access ends, retries continue until day 60 | Account hold: access blocked, retries continue |
Can you change retry timing? | No | No |
Payment fix link for users | Deep link to Manage Payments | In-app messaging API shows a Google prompt |
Two details are worth knowing. On the App Store, a recovery inside the grace period keeps the user on their original billing date and you are paid for the grace days. A recovery after it starts a new billing cycle from the recovery date (Apple).
On Google Play, account hold became auto-calculated on December 1, 2025, set to 60 days minus your grace period (Google Play Console Help). If any base plan still has a custom, shorter hold, you are cutting your own recovery window.
Where Store Billing Leaves Revenue on the Table
Store retries are a solid safety net, but they are built for every app on the platform, not for yours. Here is what you give up:
No control over retry timing. The store decides when to retry. You can't time attempts around your users' paydays or local time zones.
No decline-level data. You learn that a renewal failed, not why. Insufficient funds and a generic decline look the same from your side, so you can't treat them differently.
No backup payment routing. You can't retry on another card the user already has on file.
Access ends before recovery does. Once the grace period is over, the user is locked out while retries continue. Many of them stop opening the app and never come back, even if a later retry would have worked.
You pay commission on what is recovered. Every recovered store renewal still carries the store fee, so recovery is worth less per dollar than on the web.
That's why the strongest app businesses treat store billing as one channel, not the whole system.
The Shift to Web Billing Changes Who Owns Recovery
In the US, both stores now let apps send users to pay on the web. That moves subscriptions onto your own billing stack, and with them, every failed payment becomes yours to recover.
App Store. Court rulings in Epic v. Apple opened the door to in-app links to outside purchases in the US. In December 2025 the Ninth Circuit let Apple require parity in how those links look and allowed it to charge some commission on link-out purchases, with the details sent back to the district court. Apple has asked the Supreme Court to review (Apple Form 10-Q).
Google Play. For US users, Google no longer requires Play Billing and allows alternative billing and external content links through programs launched December 9, 2025. Fee reporting for those programs is being phased in, with the latest notice moving the external links deadline to December 1, 2026 (Google Play Console Help).
Fees and rules are still moving, so check current terms before you plan pricing. But the direction is clear. A growing share of app subscriptions will renew on Stripe and similar stacks, not inside the stores.
That is good news for recovery. On the web you see the decline code, you control retry timing, and you can use tools built to win failed charges back. It also means the stores' 60-day safety net no longer applies. If you move subscribers to the web without a recovery layer, your involuntary churn can go up, not down.
What the Best Solution Looks Like
The best setup runs two playbooks side by side: maximize the stores' own recovery for in-app subscribers, and run a real recovery engine for web subscribers.
Store-billed subscribers | Web-billed subscribers | |
|---|---|---|
Who retries | Apple or Google | You, through your billing stack and recovery layer |
Your main levers | Grace period, account hold, in-app prompts, payment fix deep links | Retry timing, decline-code logic, backup payment methods, dunning |
Decline data | Not visible | Full decline codes on every charge |
Retry timing | Fixed by the store | Can be tuned per customer |
Commission on recovered revenue | Store fee applies | Only what current link-out terms require |
Best tool | Correct store settings plus clear in-app messaging | A dedicated recovery engine like FlyCode on Stripe |
For store-billed subscribers, do the basics well. Turn on Billing Grace Period in App Store Connect at the longest length that fits your plans. On Google Play, keep the grace period on and account hold on the automatic setting. Listen for billing issue notifications on your server, and show a clear in-app message with a one-tap link to fix payment.
For web-billed subscribers, don't rely on default retries. Stripe Smart Retries is a reasonable baseline, but it is one model for every merchant on Stripe. App subscribers are often low-ticket, monthly or weekly, and spread across time zones. That pattern rewards retries tuned to your own users. For more on the baseline, see what Stripe Smart Retries recovers and what it misses.
Why App Developers Choose FlyCode for Web Subscriptions
FlyCode recovers the failed payments on your web subscriptions, the ones billed through Stripe and similar stacks. To be clear about the limit: renewals billed by Apple or Google stay with the stores, and no outside tool can retry those.
For everything you bill yourself, FlyCode is the revenue performance platform for payments:
Per-merchant ML retries. A model trained on your own users and on Visa and Mastercard network data decides when to retry each charge, instead of a fixed schedule.
Built for insufficient funds and generic declines. These drive most failed subscription payments, and they are exactly the declines that recover on a better-timed attempt.
Backup payment methods. When a user has another valid card on file, FlyCode can retry there with no action from them.
Coordinated outreach. Recovery emails go out at the user's local time and are sequenced with retries, so nobody gets a "payment failed" email for a charge that is about to succeed.
Plug-and-play on Stripe. Install it as a Stripe app and go live in minutes, with no changes to your app.
FlyCode is YC-backed, a Stripe design partner, a Mastercard network partner and a Visa Everything Award winner. Pricing is pay on recovery only: you pay on dollars recovered above your existing baseline.
A Checklist for App Teams
In the stores
Turn on Billing Grace Period in App Store Connect and pick the longest length that fits each plan.
Confirm every Google Play base plan has a grace period on and account hold on the automatic setting.
Handle billing issue notifications from both stores on your server.
Show an in-app message with a one-tap payment fix link during grace periods and holds.
On the web
Check which US users you can move to web billing under current Apple and Google terms.
Split last quarter's failed web renewals by decline code.
Make sure only one system is retrying each failed charge.
Add a recovery layer before web billing grows, not after.
Run a Free Payment Audit With FlyCode
Already billing on the web? FlyCode will show you, in dollars, how much of your failed-payment revenue is recoverable above your current baseline before you commit to anything. Run a free payment audit, then get started in minutes via the Stripe app.
Can I retry failed App Store or Google Play subscription payments myself?
No. Apple and Google run retries on store-billed renewals for up to 60 days. Your levers are grace periods, account hold settings and in-app prompts that send users to fix their payment.
Should I turn on Billing Grace Period on the App Store?
For most apps, yes. If Apple recovers the payment within the grace period, the user keeps their billing date and you are paid for the grace days. You must provide full access during the grace period.
What changed with Google Play account hold?
Since December 1, 2025, account hold defaults to an automatically calculated length, currently 60 days minus your grace period. Base plans with custom values were not changed.
Does moving subscribers to web billing reduce involuntary churn?
The pros are strategic redundancy: if one gateway fails because of a cyberattack, technical issue, or routine maintenance, another can take over so transactions can continue without interruption.
Global market penetration: each payment gateway supports different currencies, regions, and local payment methods.
Competitive routing: by employing advanced routing algorithms, businesses can dynamically select the most cost-effective gateway for each transaction based on real-time fee assessments.
Approval ratios: Different payment gateways have different relationships with financial institutions and their underlying technology, which affect transaction approval rates.
Consumer preferences: different consumers have divergent preferences and trust levels with various payment methods and gateways.
Risk mitigation and compliance: because different gateways often have varied security features and adhere to regional regulations, such as GDPR in Europe or CCPA in California, using multiple gateways allows businesses to diversify their risk and maintain continuous compliance with regulatory standards across borders.
Does FlyCode recover App Store or Google Play payments?
No. FlyCode recovers failed payments you bill yourself, such as web subscriptions on Stripe. Store-billed renewals are retried by Apple and Google.
How does FlyCode pricing work?
Pay on recovery only. You pay on dollars recovered above your existing baseline.


