# Introductory offer App Store Connect : l'essai gratuit iOS

> Une introductory offer est l'essai gratuit ou le prix réduit du début d'un abonnement iOS, une seule fois par groupe et par compte Apple. Création et affichage.

Page originale : [Introductory offer App Store Connect : l'essai gratuit iOS](https://devoria.fr/blog/offre-introduction-essai-gratuit-app-store)
Auteur : [Mehdi Azizi](https://devoria.fr/mehdi-azizi)
Publication : 2026-11-04
Dernière révision du contenu : 2026-11-04


Une introductory offer, ou offre d'introduction, est le prix de départ d'un abonnement auto-renouvelable : un essai gratuit, un paiement à l'avance ou un paiement au fur et à mesure. **Chaque client n'y a droit qu'une fois par groupe d'abonnements**, donc ton app doit vérifier son éligibilité avant d'écrire « essai gratuit ». Tu la crées dans la page des prix de l'abonnement, et ton paywall doit afficher clairement la durée de l'offre et le prix facturé ensuite.

Sur Solys et TradaZen, l'essai gratuit de 7 jours est porté par l'abonnement annuel. La formule à la semaine n'en a pas. Voici les trois types d'offres, qui y a droit, la création, puis deux erreurs que j'ai faites à l'affichage. Le terme « offre de lancement » désigne souvent la même chose, y compris dans mon guide sur les [erreurs de paywall](https://devoria.fr/blog/paywall-ios-erreurs-debutant).

## Qu'est-ce qu'une introductory offer ?

L'[aide d'App Store Connect](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-introductory-offers-for-auto-renewable-subscriptions/) la définit comme un prix réduit ou un essai gratuit, limité dans le temps, pour la première période d'un abonnement. Elle ne concerne que les abonnements auto-renouvelables. À la fin de l'offre, l'abonnement se renouvelle au prix normal, sauf si la personne résilie avant.

L'offre s'affiche sur ta fiche App Store pour les personnes éligibles. À l'achat, **Apple l'applique automatiquement si la personne y a droit**. Ton travail, c'est de ne pas promettre à l'écran une offre qu'Apple n'accordera pas.

## Les trois types d'offres d'introduction

La [documentation StoreKit](https://developer.apple.com/documentation/storekit/implementing-introductory-offers-in-your-app) décrit trois modes de paiement. Voici chacun avec un exemple fictif : un annuel à 39,99 € et un mensuel à 6,99 €, qui ne sont les prix d'aucune de mes apps.

| Type                | Exemple fictif      | Payé au départ  | Ensuite     |
| ------------------- | ------------------- | --------------- | ----------- |
| Essai gratuit       | 7 jours offerts     | 0 €             | 39,99 €/an  |
| Paiement à l'avance | 3 mois pour 9,99 €  | 9,99 € une fois | 39,99 €/an  |
| Au fur et à mesure  | 2,99 €/mois, 3 mois | 2,99 € par mois | 6,99 €/mois |

Et voici ce que l'écran doit dire pour chacun, toujours avec ces prix fictifs :

- **Essai gratuit** : « 7 jours gratuits, puis 39,99 € par an. » Pendant l'essai, l'abonnement a déjà commencé, mais rien n'est débité avant la fin.
- **Paiement à l'avance** : « 9,99 € pour les 3 premiers mois, puis 39,99 € par an. » La personne paie une seule fois pour toute la période réduite.
- **Paiement au fur et à mesure** : « 2,99 € par mois pendant 3 mois, puis 6,99 € par mois. » Le prix réduit revient à chaque période.

**Dans les trois cas, la phrase contient le prix qui sera facturé après l'offre.**

## Qui a droit à l'offre d'introduction ?

L'aide d'Apple est claire : une offre possible par abonnement, mais une seule offre d'introduction par personne et par groupe d'abonnements. La documentation StoreKit précise les trois cas :

- **un nouvel abonné** y a toujours droit ;
- **un ancien abonné** qui revient y a droit s'il n'a jamais utilisé d'offre d'introduction dans ce groupe ;
- **un abonné actuel** n'y a pas droit, même s'il change de formule dans le même groupe.

Le droit suit le compte Apple qui paie, pas l'iPhone ni le compte créé dans ton app. Quelqu'un qui a fait l'essai, résilié puis réinstallé l'app n'y a plus droit. Pourtant, le produit continue d'annoncer son offre : c'est là que naît l'affichage trompeur.

Conséquence directe : **un essai sur la formule à la semaine consommerait le droit à l'essai sur l'annuel**, puisque les deux sont dans le même groupe. C'est pour ça que mes essais sont sur l'annuel seul.

Autre limite : tu peux avoir une offre d'introduction en cours et une offre future par pays. Si deux offres se chevauchent, la dernière créée remplace l'autre. En juillet 2026, sur TradaZen, je voulais à la fois un prix réduit et un essai gratuit sur l'annuel. Une seule offre à la fois : c'était l'un ou l'autre. J'ai fini par créer un second abonnement annuel, moins cher, qui porte l'essai.

## Créer l'offre dans App Store Connect

Il faut le rôle Account Holder, Admin, App Manager ou Marketing. Les libellés sont ceux de l'aide d'Apple :

1. Dans Apps, ouvre ton app, puis Subscriptions dans la barre latérale.
2. Choisis le groupe, puis l'abonnement.
3. Dans la section Subscription Prices, clique sur View all Subscription Pricing, puis sur Set up Introductory Offer.
4. Choisis les pays ou régions, puis les dates de début et de fin. Si tu commences aujourd'hui, l'offre démarre tout de suite.
5. Choisis Free, Pay up front ou Pay as you go, puis la durée et le prix.
6. App Store Connect propose des prix équivalents pour les 175 pays. Ajuste-les si besoin, puis confirme.

**Une offre créée ne se modifie plus** : pour changer sa durée ou son prix, supprime-la dans l'onglet Introductory Offers et recrée-la. Une modification peut mettre jusqu'à une heure à arriver en sandbox. La [documentation de RevenueCat](https://www.revenuecat.com/docs/subscription-guidance/subscription-offers) conseille aussi d'attendre jusqu'à 24 heures avant de conclure qu'une offre n'est pas appliquée.

## Les durées possibles

L'essai gratuit dure 3 jours, 1 ou 2 semaines, 1, 2, 3 ou 6 mois, ou 1 an, quelle que soit la durée de l'abonnement. Le paiement à l'avance couvre 1, 2, 3 ou 6 mois, ou 1 an. Le paiement au fur et à mesure dépend de la durée de l'abonnement :

| Abonnement | Au fur et à mesure |
| ---------- | ------------------ |
| 1 semaine  | 1 à 12 semaines    |
| 1 mois     | 1 à 12 mois        |
| 2 mois     | 2 à 12 mois, par 2 |
| 3 mois     | 3, 6, 9 ou 12 mois |
| 6 mois     | 6 ou 12 mois       |
| 1 an       | 1 an               |

Sur mes apps, j'ai choisi 7 jours, sur l'annuel. Ce n'est pas une règle d'Apple, c'est un choix de produit, à revoir avec tes propres mesures.

## Afficher l'essai seulement à ceux qui y ont droit

Apple le dit dans la même page d'aide : si tu montres l'offre dans ton app, vérifie que la personne peut vraiment en profiter. **Pose deux questions à ton code** : le produit porte-t-il un essai gratuit, et cette personne y a-t-elle encore droit ?

La première se lit sur le produit. Attention, une offre d'introduction n'est pas forcément gratuite. Sur TradaZen, l'annuel standard portait un paiement à l'avance, une première année moins chère, et l'essai vivait sur l'autre annuel. Les deux remontent comme « offre d'introduction ». Mon code lit donc le prix de l'offre : zéro, c'est un essai ; au-dessus, c'est une offre payante.

La seconde se pose au store. En Swift, StoreKit 2 fournit [isEligibleForIntroOffer](https://developer.apple.com/documentation/storekit/product/subscriptioninfo/iseligibleforintrooffer), à partir d'iOS 15. Apple précise que cette valeur peut être vraie même sans offre configurée : d'où la première question. Avec RevenueCat dans une app Expo, c'est `checkTrialOrIntroductoryPriceEligibility`, qui renvoie éligible, inéligible, pas d'offre, ou inconnu. Voici le principe en TypeScript :

```ts
import Purchases, {
  INTRO_ELIGIBILITY_STATUS as S,
  type PurchasesStoreProduct,
} from "react-native-purchases";

type Essai = "oui" | "non" | "doute";

export async function essaiGratuit(p: PurchasesStoreProduct): Promise<Essai> {
  if (!p.introPrice || p.introPrice.price > 0) return "non";
  try {
    const r = await Purchases.checkTrialOrIntroductoryPriceEligibility([
      p.identifier,
    ]);
    const statut = r[p.identifier]?.status;
    if (statut === S.INTRO_ELIGIBILITY_STATUS_ELIGIBLE) return "oui";
    if (statut === S.INTRO_ELIGIBILITY_STATUS_INELIGIBLE) return "non";
    if (statut === S.INTRO_ELIGIBILITY_STATUS_NO_INTRO_OFFER_EXISTS)
      return "non";
    return "doute";
  } catch {
    return "doute";
  }
}
```

Le cas « doute » est le vrai sujet. RevenueCat décrit sa vérification comme une estimation au mieux, et la feuille de paiement d'Apple affiche de toute façon les vraies conditions avant validation. Pour un statut inconnu, RevenueCat conseille d'afficher le prix normal, pour ne tromper personne.

J'ai appris l'autre face du problème sur TradaZen. La première version traitait une erreur de lecture comme un refus : des personnes qui avaient droit à l'essai ne le voyaient pas. Aujourd'hui, mes apps ne retirent l'essai que sur un refus net du store, inéligible ou pas d'offre. Le doute garde l'affichage du produit. **C'est un arbitrage, pas la recommandation de RevenueCat** : si tu préfères la prudence, suis la leur. Dans les deux cas, ne confonds jamais « je ne sais pas » avec « non ».

Si tu utilises les paywalls de RevenueCat, chaque texte peut avoir une version pour les personnes éligibles à l'offre, d'après leur [page sur les offres](https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/supporting-offers). Le reste du montage est dans mon guide [RevenueCat pour un abonnement iOS](https://devoria.fr/blog/revenuecat-abonnement-in-app-ios).

## Ce que la 3.1.2 exige à l'écran

La [guideline 3.1.2(a)](https://developer.apple.com/app-store/review/guidelines/#3.1.2a) autorise l'essai gratuit sur un abonnement, à condition de donner les informations prévues par App Store Connect. La [page d'Apple sur les abonnements](https://developer.apple.com/app-store/subscriptions/) précise : dans le parcours d'achat d'un essai, indique clairement sa durée et le prix facturé à la fin. Le montant facturé doit aussi être l'élément de prix le plus visible de l'écran.

Le refus reçu par Solys le 10 octobre 2026 le disait : l'essai gratuit, le prix de lancement et les prix calculés doivent rester subordonnés au montant facturé. **L'essai peut être annoncé, mais le prix facturé ensuite doit rester le prix le plus lisible de l'écran.** Les deux refus et leur correctif sont dans mon guide sur la [guideline 3.1.2](https://devoria.fr/blog/guideline-3-1-2-abonnement-app-store).

L'erreur inverse existe aussi : proposer un essai sans le dire. À une époque, les boutons de mes paywalls disaient « Continuer ». Sur Solys, « 7 jours offerts » n'existait même que dans l'étiquette VoiceOver, pas en texte visible.

## Tester l'offre en sandbox

Achète l'abonnement avec un compte sandbox : l'essai doit apparaître sur la feuille de paiement d'Apple. Pour rejouer le parcours d'un nouvel abonné, choisis Clear Purchase History dans les réglages du compte sandbox sur l'iPhone. D'après la [documentation sandbox d'Apple](https://developer.apple.com/documentation/storekit/testing-in-app-purchases-with-sandbox), le compte redevient alors éligible aux offres d'introduction.

Teste aussi un compte qui a déjà fait l'essai : ton paywall ne doit plus rien annoncer de gratuit. Si le produit ne se charge pas du tout, lis mon guide sur le statut [Missing Metadata](https://devoria.fr/blog/abonnement-missing-metadata-app-store-connect).

## Brancher ton essai gratuit sans erreur

Le [Kit iOS](https://devoria.fr/kits/ios) part du code de départ de mes apps : onboarding, paywall et abonnements sont déjà codés, et sa troisième étape, « brancher l'argent », te guide pour régler produits et essai. Toute la chaîne est décrite sur la page [abonnement in-app iOS](https://devoria.fr/expertise/abonnement-in-app-ios). Si tu hésites encore sur le modèle, commence par [abonnement ou achat unique](https://devoria.fr/blog/abonnement-ou-achat-unique-app-ios).

Si tu prépares ta première sortie, [fais ton diagnostic gratuit](https://devoria.fr/diagnostic) : il remet les étapes dans l'ordre et t'envoie ma checklist anti-refus Apple. Pour offrir un mois ou relancer un ancien abonné, la suite est dans mon guide sur les [codes d'offre](https://devoria.fr/blog/codes-offre-promo-app-store-connect).

## Questions fréquentes

### Qu'est-ce qu'une introductory offer sur l'App Store ?

C'est le prix de départ d'un abonnement auto-renouvelable : un essai gratuit, un paiement à l'avance ou un paiement au fur et à mesure. Elle se crée dans App Store Connect, et Apple l'applique automatiquement à l'achat aux personnes éligibles. Ensuite, l'abonnement passe au prix normal.

### Un utilisateur peut-il faire deux essais gratuits ?

Pas dans le même groupe d'abonnements : une seule offre d'introduction par groupe et par compte Apple. Réinstaller l'app ne rend pas le droit. S'il s'abonne dans un autre groupe de ton app, il peut en revanche profiter de l'offre de ce groupe.

### Peut-on cumuler un essai gratuit et une réduction ?

Pas sur le même abonnement au même moment : une seule offre d'introduction en cours par pays. Tu peux créer un second abonnement qui porte l'autre offre, ou utiliser un code d'offre, qui peut s'enchaîner après l'offre d'introduction selon tes réglages.

### Faut-il une nouvelle version de l'app pour ajouter un essai ?

Non pour l'offre elle-même : elle se règle dans App Store Connect et s'applique à l'achat. Mais si ton paywall écrit « 7 jours » en dur dans le code, il faudra le mettre à jour. Lis la durée sur le produit renvoyé par le store, et l'écran suivra.

### Un ancien abonné a-t-il droit à l'essai gratuit ?

Oui, s'il n'a jamais utilisé d'offre d'introduction dans ce groupe d'abonnements. S'il en a déjà profité, il n'y a plus droit, même des mois plus tard. Pour le faire revenir, Apple propose les offres de reconquête et les offres promotionnelles.


## Ton projet

[Kit iOS & Android Devoria](https://devoria.fr/kits/ios) : Le code de départ de mes apps, le parcours jusqu'à l'App Store et Google Play avec les messages à donner à Claude, et tous les kits. Claude part d'une app qui tourne déjà. 99 €, paiement unique. Inclus : Le code de départ de ton app ; Les styles visuels ; Le parcours pas à pas ; Kit Review ; Kit Captures ; Kit ASO ; Mises à jour à vie ; Bonus : la séance 1:1 à moitié prix. Prérequis : pour l'iPhone, un Mac avec Xcode 26 ou plus et un compte Apple Developer (99 $ par an) pour publier. Pour Android, Android Studio sur un Mac, un PC Windows ou Linux, et un compte Google Play Console (25 $, une fois). Et Claude Code (abonnement payant) ou Cursor. Téléchargement immédiat après le paiement.

[Diagnostic gratuit](https://devoria.fr/diagnostic) : quelques questions sur ton projet. Il dit ce qui te bloque vraiment, l'ordre des quatre étapes et le kit qui correspond. En laissant ton e-mail, tu reçois la checklist anti-refus Apple : les points vérifiés avant chaque envoi, tirés des refus reçus par les apps du studio.

[Une heure avec moi](https://devoria.fr/coaching) : On regarde ton app ou ton projet Claude, écran partagé : ce qui bloque, ce que je change en premier, et dans quel ordre. 100 € la séance d'une heure, en visio, paiement en une fois. Sujets : L'audit de ton app ; Ton travail avec Claude ; Ta fiche et ton paywall ; Un refus d'Apple.
