Glossary · Billing

What is billing retry?

Billing retry

Billing retry is the state a subscription enters when a renewal charge fails, such as an expired card. The App Store keeps trying to collect payment for up to 60 days, or until the customer fixes the problem or cancels. If a retry works, the new billing date is the day of recovery. If none works, the subscription expires.

Apple's retry runs in the background and does not depend on your app. You learn about it through server notifications: DID_FAIL_TO_RENEW when the charge first fails, DID_RENEW with the subtype BILLING_RECOVERY when a retry succeeds, and EXPIRED with the subtype BILLING_RETRY when the 60 days end without payment. In the subscription status you can read expirationIntent and the billing retry flag.

A billing grace period sits at the start of the retry. During the grace period the customer keeps access. After it ends, the retry continues but access stops. Apple resumes counting days of paid service from the recovery date if the renewal happens within 60 days. You can deep link customers to their payment settings and show an in-app message that asks them to update their billing details.

Google Play uses a different structure: a grace period, then an account hold, for a total that defaults to 60 days. RevenueDot shows a subscription whose access ended while the store still retries as in_billing_retry in REST API v2, and sends BILLING_ISSUE when the charge first fails.

Sources: Apple: Reducing involuntary subscriber churn · Apple: notificationType · Apple: Auto-renewable subscriptions

FAQ

Billing retry: questions people ask

How long does the App Store retry a failed renewal?

Up to 60 days, or until the customer fixes the billing problem or cancels, whichever comes first.

Does the customer keep access during billing retry?

Only during the billing grace period, if you enabled one. After that, access should stop until the payment succeeds.

How do I tell voluntary cancellation from a billing failure?

Apple's expirationIntent field and the EXPIRED notification subtype separate them. Subtype VOLUNTARY means the customer turned off renewal. Subtype BILLING_RETRY means retries ended without payment.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free