iOS Auto-Renewable Subscription: ~70% of US free-trial conversions fail to charge and enter Billing Grace Period (DID_FAIL_TO_RENEW / GRACE_PERIOD)

Hi everyone, I’m an iOS developer and I’m seeing an unusually high billing failure rate at the free-trial → paid conversion point. I’d appreciate any guidance on whether this looks like expected App Store billing behavior, a configuration issue, or a common implementation pitfall.

What I’m seeing

My app offers an auto-renewable monthly subscription with a 3-day free trial. Around the moment the trial ends and the first paid renewal should occur:

  • ~70% of users hit billing failure and enter Billing Grace Period
  • Before I enabled Billing Grace Period, a similar percentage appeared to go from trial directly to Expired
  • Users are US storefront (USA / storefrontId 143441). The app is not released in China.

App Store Connect configuration (summary)

  • Product type: Auto-Renewable Subscription
  • Duration: 1 month
  • Product ID: monthly_trial
  • US price: $12.99 / month
  • Free trial: 3 days (P3D)
  • Environment: Production
  • Family Sharing: Off (if relevant)

Tech / integration

  • iOS client is currently StoreKit 1 (uses SKReceiptRefreshRequest)
  • I have a backend and I’m using App Store Server Notifications V2 to update subscription status
  • During Grace Period, I currently continue to grant entitlement and prompt users to update their Apple ID payment method

Redacted Server Notifications V2 example

Below is a typical sequence (IDs masked, only key fields shown). Timestamps are epoch milliseconds; my logs may show local time.

Event A — trial start

  • notificationType: SUBSCRIBED
  • subtype: INITIAL_BUY
  • offer: FREE_TRIAL (P3D)
  • price: 0
  • storefront: USA (143441)
  • productId: monthly_trial
  • originalTransactionId: 2000029926****436
  • purchaseDate (ms): 1768156450000
  • expiresDate (trial end, ms): 1768415650000

Event B — trial ends, first paid renewal attempt fails, grace period begins

  • notificationType: DID_FAIL_TO_RENEW
  • subtype: GRACE_PERIOD
  • expirationIntent: 2 (billing error)
  • isInBillingRetryPeriod: true
  • renewalPrice: 12990 (USD equivalent to $12.99)
  • renewalDate (ms): 1768415650000
  • gracePeriodExpiresDate (ms): 1769798050000
  • transaction expiresDate (ms): 1769798050000
  • appTransactionId: 7051882678****984
  • originalTransactionId: 2000029926****436

Questions

  1. Has anyone seen very high DID_FAIL_TO_RENEW / GRACE_PERIOD rates for US trial conversions? Is this ever normal (e.g., payment verification patterns), or does it usually indicate a problem?
  2. Are there known pitfalls with StoreKit 1 + receipt validation + Server Notifications V2 that could make this look worse than it is (e.g., entitlement misclassification, timing issues, relying on stale receipt data, etc.)?
  3. What’s the recommended user-facing flow during Billing Retry / Grace Period? (We currently grant access and ask users to update payment method.)
  4. Would migrating the client to StoreKit 2 improve reliability of detecting in-grace/in-retry states (even if it doesn’t affect billing success itself), or is the backend approach sufficient?

What I’ve checked

  • App Store Connect pricing and trial configuration appear correct
  • We do not revoke access during Grace Period
  • The rate remains unusually high (~70%)

Thanks in advance for any similar cases, diagnostic tips, or best practices. I can provide additional anonymized samples if helpful.

Posted on Jan 15, 2026 2:52 AM

Reply

Similar questions

3 replies

This thread has been closed by the system or the community team. You may vote for any posts you find helpful, or search the Community for additional answers.

iOS Auto-Renewable Subscription: ~70% of US free-trial conversions fail to charge and enter Billing Grace Period (DID_FAIL_TO_RENEW / GRACE_PERIOD)

Welcome to Apple Support Community
A forum where Apple customers help each other with their products. Get started with your Apple Account.