Réduire le churn involontaire sur l’App Store : billing retry et grace period
Billing retry et Billing Grace Period sur l’App Store : les notifications à traiter, ce que votre app peut faire ou non, et la place des offres de reconquête.
Sur l’App Store, Apple prélève le client, Apple relance le paiement et Apple détient le bouton d’annulation. Vous ne pouvez pas relancer un prélèvement, changer la carte d’un client ni voir son adresse email. Cela ne veut pas dire que vous ne pouvez rien faire : ce que vous maîtrisez, c’est combien de temps le client garde l’accès, ce que votre app lui dit et comment vous réagissez à chaque notification.
Ce guide couvre le billing retry, la Billing Grace Period, les App Store Server Notifications V2 qui vous disent ce qui s’est passé, ce que votre app a le droit de faire, les offres de reconquête (win-back offers) et les demandes de remboursement. Il s’en tient à la documentation d’Apple : Reducing involuntary subscriber churn, Enable Billing Grace Period, la référence notificationType, le message billingIssue, Supporting win-back offers in your app et Send Consumption Information (tous consultés en novembre 2026).
Ce que fait Apple quand un renouvellement échoue
Quand un renouvellement échoue à cause d’un problème de facturation, l’abonnement passe à l’état billing retry. La documentation d’Apple indique que l’App Store tente alors d’encaisser le paiement pendant 60 jours au plus.
- Si Apple récupère le paiement pendant le billing retry, l’abonnement est renouvelé. Sans grace period, la nouvelle date de facturation est la date de récupération, donc les renouvellements suivants se décalent.
- Si la période de billing retry se termine sans succès, l’abonnement expire.
Vous ne choisissez pas le calendrier des relances et vous ne pouvez pas en déclencher une. Apple précise en revanche que, quand le client met à jour ses informations de paiement, l’App Store tente immédiatement le renouvellement. La chose la plus utile que vous puissiez faire est donc d’amener le client à corriger son moyen de paiement.
Billing Grace Period
Par défaut, un client en billing retry perd l’accès. La Billing Grace Period lui permet de garder un accès complet pendant un temps, pendant qu’Apple essaie d’encaisser. Vous l’activez dans App Store Connect, dans la section Subscriptions de votre app. D’après la page d’aide d’Apple :
| Grace period choisie | Abonnements hebdomadaires | Abonnements mensuels et annuels |
|---|---|---|
| 3 jours | 3 jours | 3 jours |
| 16 jours | 6 jours | 16 jours |
| 28 jours | 6 jours | 28 jours |
Autres points de la même page :
- Le réglage s’applique à tous les abonnements auto-renouvelables de l’app ; il ne se règle pas par produit.
- Vous choisissez s’il s’applique à tous les renouvellements (y compris les essais gratuits et offres gratuites qui deviennent payants) ou seulement aux renouvellements payant vers payant.
- Vous pouvez l’activer d’abord en sandbox seulement, puis en production.
- Les changements peuvent prendre jusqu’à 24 heures et ne s’appliquent qu’aux renouvellements à venir.
- Il ne s’applique pas aux abonnements mensuels avec un engagement de 12 mois.
- Votre app doit quand même vérifier l’état du renouvellement et fournir le service complet pendant la grace period.
La différence compte pour le revenu : si Apple récupère le paiement pendant la grace period, les jours de service payé du client et votre revenu ne sont pas interrompus, et l’abonnement garde sa date de facturation d’origine. Une récupération après la grace period, mais encore pendant le billing retry, renouvelle à la date de récupération.
Les notifications à traiter
Les App Store Server Notifications V2 informent votre serveur de chaque étape. La référence notificationType liste ces événements de facturation :
| Événement | notificationType |
subtype |
|---|---|---|
| Le renouvellement échoue, l’abonnement passe en billing retry | DID_FAIL_TO_RENEW |
aucun |
| Le renouvellement échoue, billing retry avec Billing Grace Period | DID_FAIL_TO_RENEW |
GRACE_PERIOD |
| L’abonnement sort de la grace period (le billing retry continue) | GRACE_PERIOD_EXPIRED |
aucun |
| Le billing retry récupère l’abonnement | DID_RENEW |
BILLING_RECOVERY |
| Le billing retry se termine sans récupération | EXPIRED |
BILLING_RETRY |
| Le client désactive le renouvellement automatique | DID_CHANGE_RENEWAL_STATUS |
AUTO_RENEW_DISABLED |
| Le client réactive le renouvellement automatique | DID_CHANGE_RENEWAL_STATUS |
AUTO_RENEW_ENABLED |
| L’abonnement expire après une résiliation du client | EXPIRED |
VOLUNTARY |
Notez que GRACE_PERIOD_EXPIRED ne veut pas dire que le client est parti. Apple continue d’essayer ; vous arrêtez simplement de donner l’accès.
Vous pouvez aussi demander l’état actuel avec l’endpoint Get All Subscription Statuses de l’App Store Server API. Son champ status vaut 1 (actif), 2 (expiré), 3 (billing retry), 4 (Billing Grace Period) ou 5 (révoqué). Les informations de renouvellement contiennent aussi isInBillingRetryPeriod, gracePeriodExpiresDate et un expirationIntent, où 2 signifie une erreur de facturation et 1 que le client a résilié.
Traitez AUTO_RENEW_DISABLED comme un signal précoce
DID_CHANGE_RENEWAL_STATUS avec AUTO_RENEW_DISABLED est ce qui ressemble le plus à une résiliation sur l’App Store : le client garde l’accès jusqu’à la fin de la période, mais ne renouvellera pas. Ce n’est pas un échec de paiement, mais c’est le meilleur moment pour un message de rétention, car l’abonnement est encore actif.
Ce que votre app peut faire
Apple est explicite sur les outils dont vous disposez.
- Laissez StoreKit afficher le message de facturation. Quand un abonnement est en billing retry, l’App Store envoie un message
billingIssue. StoreKit affiche une feuille Billing Problem au lancement de votre app (ou quand vous le demandez), et le client peut corriger son moyen de paiement sans quitter votre app. Apple documente la fréquence : toutes les 24 heures les jours 1 à 3, toutes les 72 heures les jours 4 à 16, toutes les 96 heures les jours 17 à 30 et toutes les 120 heures les jours 31 à 60. Vous pouvez la retarder ou la supprimer, mais si vous n’avez pas de meilleur message, laissez-la s’afficher. - Affichez votre propre message dans l’app. Le guide d’Apple sur le churn involontaire indique que votre app peut dire aux utilisateurs qu’ils évitent de perdre l’accès en réglant leur erreur de facturation, et peut renvoyer par deep link vers la page Manage Payments de leur compte. Vérifiez d’abord
expirationIntent, pour ne pas montrer un message de facturation à quelqu’un qui a résilié. - Mettez un lien vers la gestion de l’abonnement.
showManageSubscriptions(in:)(oumanageSubscriptionsSheeten SwiftUI) ouvre la même feuille que Réglages, où le client peut voir, modifier ou résilier son abonnement. - Contactez le client par vos propres canaux. Si le client a un compte chez vous et vous a donné un email, vous pouvez lui écrire. Apple ne partage pas l’email du client, donc vous devez rattacher la transaction App Store à votre propre utilisateur, par exemple avec un
appAccountTokendéfini à l’achat. - Rétablissez l’accès vite. Après une récupération, StoreKit ajoute la transaction de renouvellement à la file. Apple note que si votre app tourne déjà, l’observateur peut ne pas être appelé et l’app l’apprend au lancement suivant. Votre serveur le saura généralement en premier grâce à
DID_RENEW.
Ce que vous ne pouvez pas faire : relancer le prélèvement, changer vous-même le moyen de paiement, prolonger le billing retry ou retirer l’option d’annulation d’Apple.
Les offres de reconquête
Une fois qu’un abonnement a churné (date d’expiration passée et renouvellement automatique désactivé), Apple vous permet de proposer une win-back offer : une période gratuite ou à prix réduit pour les anciens abonnés éligibles. D’après le guide d’Apple :
- Vous configurez les offres et les règles d’éligibilité dans App Store Connect : durée d’abonnement payé, temps écoulé depuis l’expiration et délai entre deux offres utilisées.
- Les clients peuvent les trouver dans l’App Store, dans les réglages d’abonnement de leur compte et dans votre app, où StoreKit peut afficher par défaut une feuille d’offre de reconquête.
- App Store Connect donne à chaque offre un lien direct que vous pouvez envoyer par vos propres canaux, comme l’email. Avant de l’envoyer, appelez Get All Subscription Statuses, vérifiez le tableau
eligibleWinBackOfferIdset n’envoyez le lien qu’aux clients éligibles. - Une utilisation après expiration produit
SUBSCRIBEDavec le subtypeRESUBSCRIBE; les transactions obtenues avec une win-back offer ont l’offerType4.
Pour les abonnés actifs, les promotional offers et les offer codes d’Apple sont les outils voisins (leur utilisation envoie OFFER_REDEEMED).
Les demandes de remboursement et CONSUMPTION_REQUEST
Les clients demandent un remboursement à Apple, pas à vous, et c’est Apple qui décide. Quand un client demande un remboursement, l’App Store envoie une notification CONSUMPTION_REQUEST. Si le client a accepté de partager ses données avec Apple, vous pouvez répondre avec l’endpoint Send Consumption Information sous 12 heures. Apple dit utiliser ces informations pour éclairer ses décisions de remboursement. C’est à vous d’obtenir un consentement valable, et Apple dit de ne pas utiliser la demande App Tracking Transparency pour cela. Si vous n’avez pas le consentement, ne répondez pas.
Quand Apple rembourse, vous recevez REFUND ; quand il refuse un remboursement demandé depuis votre app, REFUND_DECLINED ; et si un remboursement est annulé, REFUND_REVERSED.
Une checklist
- Les App Store Server Notifications V2 sont activées, et votre serveur traite les événements de facturation ci-dessus.
- La Billing Grace Period est activée, testée en sandbox, puis activée en production.
- Votre app donne l’accès pendant la grace period et le retire sur
GRACE_PERIOD_EXPIRED. - Le message de facturation StoreKit peut s’afficher, ou est remplacé par le vôtre.
- Votre écran de réglages renvoie vers la gestion de l’abonnement.
- Chaque achat porte un
appAccountToken, pour que vous puissiez joindre le client. - Les win-back offers sont configurées et envoyées seulement aux clients éligibles.
- Les demandes de consommation reçoivent une réponse sous 12 heures quand le client a donné son accord.
Le faire avec NoChurn
Apple garde les paiements, les relances, la grace period et le bouton d’annulation ; NoChurn n’y change rien. NoChurn lit vos App Store Server Notifications, rattache chaque abonnement à votre utilisateur grâce à l’appAccountToken, et place les problèmes de facturation, les changements de renouvellement automatique et les remboursements sur la chronologie du client et dans un score de churn de 0 à 100. Là où Apple le permet, il agit : messages dans votre app ou par email avec un lien vers les réglages d’abonnement d’Apple, un parcours d’annulation que votre app affiche via l’API headless avant de renvoyer vers Apple, des emails de reconquête à J30, J60 et J90 selon la raison de l’annulation, et des réponses aux demandes de consommation à partir de vos propres données d’usage. Voir NoChurn + App Store.