When an iOS subscription renewal payment fails, subscribers lose access to their premium features—even though they never intended to cancel. This involuntary churn accounts for up to 20% of all subscription payment attempts and can silently drain your app’s revenue.
Apple’s Billing Grace Period is your first line of defense against this revenue leak. By enabling it, you give subscribers continued access while Apple attempts to recover failed payments—and the data shows it works: apps with grace period enabled recover 15-20% more subscriptions than those without.
What is Apple’s Billing Grace Period?
Billing Grace Period is an App Store feature that maintains subscriber access to your app’s premium content when their renewal payment fails. Instead of immediately losing access, subscribers continue enjoying full service while Apple attempts to collect payment in the background.
Without Grace Period enabled:
When a subscription renewal fails, the subscriber immediately enters the billing retry state and loses access. They may not even realize there’s a problem until they open your app and find their premium features gone.
With Grace Period enabled:
When a renewal fails, the subscriber enters the grace period first. They retain full access to your app for the duration you’ve configured (3, 16, or 28 days) while Apple works to recover the payment. If successful within this window, there’s zero interruption to service—and zero lost revenue for you.

Grace period and billing retry: Complete timeline
| Phase | Duration | User access | What’s happening |
| Active subscription | Varies | ✅ Full | Normal subscription state |
| Grace period | 3, 16, or 28 days | ✅ Full | Payment failed; Apple retrying; user retains access |
| Billing retry | Up to 60 days | ❌ None | Grace period ended; Apple still retrying; access revoked |
| Expired | — | ❌ None | All retry attempts failed; subscription ended |
Why you should enable Grace Period
- Preserve revenue: If payment recovers within the grace period, you don’t lose any days of paid service.
- Protect user experience: Users who lose access unexpectedly are more likely to churn permanently.
- Accumulate paid service days: Grace period days count toward the 85% revenue share tier.
- Handle regional disruptions: Grace period gives time for users to update payment methods during policy changes.
Involuntary churn: Numbers you need to know
| Metric | Value |
| Subscription payments entering billing issue state | ~20% |
| Annual revenue lost to involuntary churn | ~10% |
| Recovery rate with grace period + proactive communication | 15-20% |
| Best-in-class recovery rate (full dunning strategy) | 70%+ |
| Subscription-based payment decline rates | 18-20% |
| Most common failure reason: Insufficient Funds | ~40% |
Common payment failure reasons
| Failure reason | Percentage | Type | Recovery likelihood |
| Insufficient funds | ~40% | Soft Decline | High (retry in 2-7 days) |
| Expired card | 10-12% | Hard Decline | Medium (requires user action) |
| Do not honor | ~7.5% | Soft Decline | High (retry with different timing) |
| Fraud | 15-20% | Hard Decline | Medium (user verification needed) |
| Credit limit exceeded | 6-8% | Soft Decline | High (wait for payment cycle) |
| Invalid card number | ~5% | Hard Decline | Low (card data error) |
How to enable Apple’s Billing Grace Period?
Enabling grace period takes just a few minutes in App Store Connect:
Step 1: Sign in to App Store Connect and select your app.
Step 2: In the sidebar, click Subscriptions under the Features section.
Step 3: Locate the Billing Grace Period section and click Set Up Billing Grace Period.
Step 4: Choose your grace period duration (3, 16, or 28 days).
Step 5: Select which renewals qualify (All Renewals or Only Paid to Paid).
Step 6: Choose deployment environment (start with Sandbox Only for testing).
Step 7: Click Turn On to activate.

Grace Period duration by subscription type
| Subscription Duration | Maximum Grace Period | Recommended |
| Weekly | 6 days (auto-capped) | 6 days |
| Monthly | 28 days | 16 days |
| 2-Month | 28 days | 16 days |
| 3-Month | 28 days | 28 days |
| 6-Month | 28 days | 28 days |
| Annual | 28 days | 28 days |

Implementing Grace Period with StoreKit 2
StoreKit 2 provides clean, modern APIs for detecting and handling grace period states. Here’s how to implement proper subscription status checking:
StoreKit 2 renewal states reference
| RenewalState | Value | Access level | Your action |
| .subscribed | 1 | ✅ Full | Normal service |
| .expired | 2 | ❌ None | Show resubscribe options |
| .inBillingRetryPeriod | 3 | ❌ None | Prompt payment update |
| .inGracePeriod | 4 | ✅ Full | Maintain access, optionally notify |
| .revoked | 5 | ❌ None | Handle refund case |
Swift code example: Checking subscription status
func checkSubscriptionStatus() async { guard let statuses = try? await Product.SubscriptionInfo.status( for: "your_subscription_group_id" ) else { return } for status in statuses { switch status.state { case .subscribed: grantFullAccess() case .inGracePeriod: grantFullAccess() // Maintain access! showPaymentUpdatePrompt() case .inBillingRetryPeriod: revokeAccess() showPaymentFailedScreen() case .expired, .revoked: revokeAccess() default: break } }}Server-side: App Store server notifications V2
For robust subscription management, implement server-side handling of Apple’s notifications. Version 2 notifications provide granular events for every stage of the grace period lifecycle.
Key notification types for Grace Period
| Notification type | Subtype | Meaning | Your action |
| DID_FAIL_TO_RENEW | GRACE_PERIOD | User entered grace period | Log event, send notification |
| DID_FAIL_TO_RENEW | (none) | Payment failed, no grace period | Restrict access |
| GRACE_PERIOD_EXPIRED | (none) | Grace period ended | Restrict access, send email |
| DID_RENEW | BILLING_RECOVERY | Payment recovered! | Restore access |
| EXPIRED | BILLING_RETRY | 60-day retry ended | Trigger win-back campaign |
Best practices for user communication
Proactive communication dramatically improves recovery rates.
Timing:
- Send first notification immediately upon grace period entry
- Send reminder at 50% of grace period elapsed
- Send urgent reminder 24-48 hours before expiration
Messaging tips:
- Be helpful, not alarming—the user didn’t do anything wrong
- Clearly explain the issue and how to fix it
- Include a direct link to payment settings
- Mention the deadline without being threatening
Sample push notification sequence
| Timing | Message |
| Day 1 | Quick heads up: There’s an issue with your subscription payment. Tap here to update your payment method and keep your premium features. |
| Day 8 (50%) | Reminder: Your subscription payment still needs attention. Update your payment method to avoid any interruption to your service. |
| Day 14 (2 days left) | Last chance: Update your payment method in the next 48 hours to keep your premium access. |
Testing Grace Period in development
Always test your grace period implementation before deploying to production.
Testing with Xcode StoreKit configuration
- Create or open your StoreKit Configuration file in Xcode
- Enable Billing Grace Period: Editor → Enable Billing Grace Period
- Enable Billing Retry: Editor → Enable Billing Retry
- Set subscription renewal rate for faster testing
- Make a test purchase in your app
- Open StoreKit Transaction Manager: Debug → StoreKit → Manage Transactions
- Observe lifecycle: Purchased → Grace Period → Billing Retry → Expired
- Test recovery: Click card icon to simulate resolving payment
Conclusion
Apple’s Billing Grace Period is a straightforward feature with significant revenue impact. By enabling it, you protect both your subscribers’ experience and your bottom line from the silent drain of involuntary churn.
To maximize your recovery rates:
- Enable grace period with an appropriate duration (16 or 28 days for most apps)
- Implement proper StoreKit 2 status checking to maintain access during grace period
- Set up App Store Server Notifications V2 for real-time event handling
- Communicate proactively with grace period users through push notifications
- Test thoroughly in sandbox before production deployment
The data is clear: most payment failures are recoverable. Billing Grace Period gives your subscribers the time they need to fix the issue—and keeps your revenue growing.




