Aller au contenu

Le paywall

Le paywall est l’écran qui propose l’abonnement. Il utilise le template géré dans RevenueCat (son visuel se change sans mise à jour de l’app).

Titre « Continue ton parcours », sous-titre « Tout ce dont tu as besoin pour te libérer du tabac ». Même en-tête sur le paywall plein tarif et sur l’offre de retour.

Jusqu’au 22/10/26, le haut affichait l’icône de l’app et « Kaiho Premium ». Retirés sur le conseil de Rayan (régie pub) : le mot « Premium » et les icônes premium freinent la conversion, l’écran doit se lire comme la suite du parcours et non comme un achat. Le titre fait écho au bouton « Commencer mon parcours » de l’écran d’accueil. Le changement a été publié avant le test d’essai gratuit de 3 jours, pour que ce test parte d’une base stable : pendant le test, on ne touche plus au paywall. Contenu des chiffres et des avis : voir Preuve sociale.

Juste au-dessus des deux formules, le paywall affiche une phrase qui reprend les chiffres de la personne : « <Prénom>, le tabac te coûte 182 € par mois. » Le prix de Kaiho n’y est pas répété — les deux cartes juste en dessous l’affichent déjà, le contraste se fait tout seul.

L’emplacement n’est pas décoratif. Le sous-titre, en haut de l’écran, est lu avant que le prix existe dans la tête de la personne, et il en est séparé par les 3 statistiques, la preuve sociale et tout le carrousel d’avis. La ligne est donc posée dans le bandeau bas figé du template (celui qui contient les formules, le bouton et la mention « Annule à tout moment ») : il reste à l’écran quel que soit l’appareil et quel que soit le scroll.

Comment ça marche. L’app envoie la phrase à RevenueCat au moment d’ouvrir le paywall, via une variable de template ({{ custom.paywall_anchor }}). Le template, lui, est distant et servi d’un coup à tout le parc : la variable a donc une valeur par défaut vide. Une version de l’app qui n’envoie rien, et une personne pour qui on n’a pas de chiffre, retrouvent exactement le paywall d’avant.

Quand la ligne ne s’affiche pas (par construction, jamais par accident) :

  • pas de prénom, pas de consommation, ou pas de prix de paquet connus ;
  • la devise du compte n’est pas celle du store. Le prix des formules vient du storefront, le prix du paquet de la devise du compte figée au signup depuis la région de l’appareil. Quand les deux divergent (expatrié, compte store ouvert dans un autre pays), mettre « 182 € » à côté de « $9,99 » ne compare rien : on se tait. Le détail du calcul du coût est dans Suivi.

Ce qu’on ne saura pas. Il n’y a pas de groupe témoin : tous ceux qui ont un chiffre voient la ligne. Impossible, donc, d’isoler son effet sur la conversion, et le volume d’achats ne permettrait de toute façon pas de trancher avant plusieurs mois. C’est un jugement de voix, assumé comme tel.

Chaque affichage du paywall porte une source : d’où l’utilisateur vient. C’est ce qui permet de savoir quelle entrée convertit le mieux. Les sources sont identiques sur iOS et Android :

Source Quand
onboarding_end Présenté en plein écran juste après la création de compte, pour un utilisateur non premium. Fermable — ce n’est pas un mur : la croix du template RevenueCat le referme et on entre dans l’app. Pas de trigger. Voir Onboarding.
key_locked Tap sur une clé verrouillée (clés 1 à 7, clé secrète). Porte aussi le key_id.
craving_locked Tap sur un déclencheur d’envie verrouillé (4 à 10).
craving_session_end Écran « Tu as tenu » à la fin d’un exercice anti-envie gratuit (non premium, 1×/jour) : on félicite, puis on propose Premium. Le CTA « Découvrir Premium » ouvre le paywall.
moment_locked Tap sur un moment d’accompagnement (tous premium).
book_locked Tap sur un livre du coach verrouillé.
see_all_moments Inatteignable par construction, et c’est voulu. Le bouton « Voir tous les moments » vit dans le carrousel des moments, qui n’est rendu qu’aux premium ; un non-premium bute avant sur moment_locked. Le renvoi vers le paywall dans le code des deux apps est défensif et n’a jamais été exécuté : zéro affichage depuis le début du tracking (vérifié le 18/8/26). Ne pas la compter comme une source vivante.
notification_moment Tap sur une notification renvoyant vers un moment verrouillé. Depuis la 1.10.0 : si la personne est éligible au comeback (compte ≥ 7 j), le tap ouvre l’offre réduite (source = comeback, trigger = moment_notification) au lieu de cette source. Motif : 531 vues pour 5 abonnements (0,9 %) contre 6,3 % pour le même contenu tapé dans l’app. Source retirée en 1.13.0 (ios#105 / android#114 ; publié le 2/10/26 sur Android et iOS) : un non-premium non éligible au comeback qui tape la notif reste sur l’accueil Coach, sans paywall. Motif : sur 90 jours, 684 personnes l’ont vue pour 4 achats faits sur cet écran (0,6 %), alors que 24 ont acheté dans les 24 h qui suivent, ailleurs dans l’app. C’est le retour dans l’app qui fait vendre, pas le paywall.
relapse_locked Tap sur une vidéo de rechute verrouillée (3 à 8).
profile Tap sur « Débloquer tout Kaiho » (ex-« Passer premium ») dans le profil. Meilleur taux (15,5 %) mais quasi invisible : <5 % des non-acheteurs vont dans le Profil. C’est ce constat qui a motivé home_premium.
home_premium Tap sur la carte « Débloquer tout Kaiho » (ex-« Découvrir Premium ») permanente sur l’accueil Coach, sous le carrousel des clés, pour les non-premium (publiée en 1.10.0 : iOS le 25/8/26, Android le 27/8/26). Même destination que profile (paywall plein tarif), mais posée là où les gens sont déjà — 278 personnes seulement trouvaient profile en 90 j. Ne s’affiche pas si une carte comeback ou fin d’abonnement occupe déjà le sujet premium. Voir le raisonnement ci-dessous.
quiz_result Bouton du résultat d’un quiz (dépendance ou motivation), pour tout non-premium, même si sa prochaine étape est une vidéo gratuite de la clé 0. Plein tarif. Fermé sans achat, on reste sur le résultat ; après achat, l’app ouvre la clé où il reste quelque chose à faire (voir Programme du coach). Depuis ios#124 / android#128.
comeback Promo « comeback » (voir la page dédiée). Porte un trigger : auto ou card.
app_open Paywall au retour : un non-premium qui revient dans l’app voit le paywall plein tarif, sans rien avoir tapé. Fermable comme les autres. Porte un trigger : cold (l’app avait été fermée) ou warm (elle tournait encore en arrière-plan). Voir la règle ci-dessous.
promo_ending Tap sur la carte « Ton accès offert se termine le… » (accès offert par un code conférence ou une carte cadeau, 7 derniers jours). Plein tarif. En PR au 14/10/26 (ios#122, android#126). Voir Codes promo.
promo_ended Paywall de fin d’accès offert : au premier retour après la fin d’un accès offert, une seule fois, si la personne n’a jamais acheté. Plein tarif, fermable. Passe avant le comeback et app_open, qui ne tirent pas sur ce retour. En PR au 14/10/26.

Deux events accompagnent le paywall : paywall_viewed et paywall_dismissed, avec la source, le key_id et le trigger éventuels, et la durée d’affichage. Les achats ne sont pas mesurés côté app : ils viennent de RevenueCat (rc_*). Détail dans Tracking.

Un non-premium qui revient dans l’app voit le paywall plein tarif. Le but est d’être plus agressif sur la conversion : jusqu’ici, la plupart des non-acheteurs ne voyaient que le paywall de fin d’onboarding.

Ce qui compte, c’est le temps passé hors de l’app, pas le fait d’ouvrir l’app. Sur Android, balayer l’app dans les récents ne la ferme pas vraiment, et une réouverture sur trois arrive moins de 5 minutes après la précédente (le temps d’aller dans les réglages ou de choisir un compte Google). Compter chaque ouverture ferait donc apparaître le paywall à tout bout de champ sur Android et beaucoup moins sur iPhone. Avec une règle basée sur le temps d’absence, les deux apps se comportent pareil.

Le paywall s’affiche quand tout est vrai :

  • la personne n’est pas premium et a fini l’onboarding ;
  • elle a quitté l’app depuis au moins 30 minutes (que l’app ait été fermée ou non) ;
  • aucun paywall, quelle que soit sa source, ne lui a été montré depuis 4 heures. C’est aussi ce qui évite d’en remettre un juste après celui de fin d’onboarding ;
  • elle n’arrive pas en tapant une notification (la notification a sa propre destination) ;
  • rien d’autre n’est déjà à l’écran (demande de suivi publicitaire ou de notifications, autre paywall). Dans ce cas on attend simplement le retour suivant.

Priorités. Si la personne est éligible à l’offre comeback et ne l’a jamais vue, c’est le comeback qui s’affiche ce jour-là, pas app_open. Ensuite, app_open montre toujours le plein tarif, jamais le -30 % (choix d’Arthur).

Volume attendu. Mesuré sur 30 jours avant la sortie : un non-premium revient en moyenne 1,8 (Android) à 2,1 (iOS) fois par mois après 30 minutes d’absence. Les 10 % qui reviennent le plus, environ 4 fois. Ce n’est donc pas un paywall « à chaque ouverture » dans les faits.

À surveiller après publication. La conversion app_open, et surtout la rétention des gens qui reviennent (D1, D7, retour des personnes installées depuis ≥ 14 jours), en comparant avant et après la sortie comme d’habitude. Un paywall à chaque retour peut décourager une partie de ceux qui reviennent, et la rétention Android baisse déjà. L’expérience RevenueCat paywall_v2 compte ces affichages dans ses « exposés » : la conversion par vue va mécaniquement baisser, dans les deux bras.

Pour tester : menu debug → Paywall au retour (seuils courts de 30 s / 1 min, forcer au prochain retour, expirer le cooldown).

Le diagnostic qui a lancé ce chantier : sur 90 jours, 67,5 % des non-acheteurs n’ont jamais vu un seul paywall in-app — uniquement celui de fin d’onboarding. En creusant, ce n’est pas un problème de rétention : les non-acheteurs engagés (3,6 jours actifs en moyenne) reviennent, mais restent en surface — un tiers ouvre une leçon, 1 % finit la Clé 0. Or les murs qui convertissent bien (key_locked, moment_locked…) sont derrière cette profondeur. Les gens ne les bumpent jamais.

Le seul mur rentable indépendant de la profondeur était profile (15,5 %), mais il faut aller dans l’onglet Profil pour le trouver : 278 personnes en 90 j. home_premium pose la même porte, en carte permanente sur l’accueil Coach, là où les non-premium sont déjà.

Deux garde-fous inscrits dans le code :

  • Un seul point d’entrée premium à la fois. La carte ne s’affiche que si aucune carte comeback ni fin d’abonnement n’occupe déjà le sujet premium (priorité : fin d’abonnement > comeback > découvrir premium). L’offre réduite gagne toujours son slot.
  • Source distincte de profile. On mesure le nouveau placement sans polluer le taux du Profil. Attendu : plus bas que 15,5 % (l’audience de l’accueil est moins intentionnelle que celle qui va chercher « Passer premium »), mais sur bien plus de monde. À juger en cohorte, filtre FR.