Métriques & funnels
Cette page définit ce que veulent dire nos chiffres et comment on les regarde. Sans définitions partagées, deux personnes lisent le même mot différemment.
Métriques clés (définitions)
Section intitulée « Métriques clés (définitions) »| Métrique | Définition |
|---|---|
| Inscrit | A terminé l’onboarding. C’est le chiffre qu’on communique et celui de la data-room. À ne pas confondre avec un compte créé : depuis le 10/8/26 la base crée la ligne de profil dès l’authentification, donc quelqu’un qui abandonne l’onboarding existe en base sans être un inscrit. Le cockpit HARU expose les deux séparément (« inscrits » d’un côté, « comptes créés » de l’autre). |
| Utilisateur activé | A terminé l’onboarding et a une date d’arrêt au passé ou aujourd’hui. C’est le vrai compteur d’utilisateurs, pas le nombre d’inscrits. |
| Conversion (abonnement) | Part des personnes ayant fini l’onboarding une semaine donnée qui ont payé dans les 7 jours (J7). On lit la dernière cohorte hebdomadaire entièrement mûre (chaque jour a eu ses 7 jours) — jamais une fenêtre glissante qui mélangerait des cohortes mûres et des cohortes récentes pas encore converties. Calculée depuis PostHog : onboarding_completed (trafic test exclu) → rc_initial_purchase_event. RevenueCat reste la source de vérité du revenu. Depuis le 16/8/26, HARU affiche trois fenêtres côte à côte — voir « Trois conversions » ci-dessous. |
| Acheteur de 1re session vs tardif | Achat dans les ~30 min suivant l’inscription = 1re session ; au-delà = acheteur tardif. Une part importante des achats sont tardifs. |
| Rétention D1 / D7 / D30 | Part des utilisateurs encore actifs (ouverture d’app) 1, 7, 30 jours après leur inscription, par cohorte hebdo. |
Trois conversions, trois usages (depuis le 16/8/26)
Section intitulée « Trois conversions, trois usages (depuis le 16/8/26) »La règle de maturité ci-dessus a un effet mécanique qu’il faut connaître : une semaine devient affichable quand son lundi + 13 jours est passé, donc la tuile J7 change de semaine tous les dimanches à 00:00 UTC. Concrètement, un changement livré dans l’app ne se voit dans ce chiffre que deux semaines plus tard. C’est trop lent pour piloter, et pas comparable à ce que publient les autres. HARU a donc une zone Conversion dédiée, avec trois fenêtres qui ne se lisent pas l’une contre l’autre :
| Tuile | Fenêtre | Dénominateur | Retard | Sert à |
|---|---|---|---|---|
| Conversion J1 | payé dans les 24 h, cumulé sur les 7 dernières cohortes journalières mûres | onboardés (PostHog) | ~2 jours | juger un changement d’app dans la semaine où il est livré |
| Conversion J7 | payé dans les 7 jours, dernière semaine mûre | onboardés (PostHog) | ~13 jours | la référence interne, la seule des trois qui déclenche une alerte |
| Conversion J30 | payé dans les 30 jours, dernier mois complet | nouveaux clients RevenueCat | ~1 mois | la comparaison externe (benchmark Santé & Fitness, docs investisseurs) |
Ce que la J1 rate. Mesuré sur cohortes mûres : la fenêtre 24 h ne capte que 77 % (Android) à 86 % (iOS) des achats que la fenêtre J7 finit par voir. Son niveau est donc structurellement bas, et c’est assumé — on y lit un mouvement, jamais un niveau. Pour la même raison, la J1 et la J30 sont sans seuil : elles n’allument pas le bandeau et ne réveillent personne sur Slack. La J7 reste la seule tuile de conversion qui alerte.
Historique des métriques HARU
Section intitulée « Historique des métriques HARU »Le cockpit HARU n’affiche que l’état du moment, et ses petites courbes ne couvrent qu’une dizaine d’heures. Depuis le 7 octobre 2026, il garde un historique quotidien de chaque chiffre affiché (MRR, abonnés actifs, conversions, DAU, note des stores, burn…) dans une base Cloudflare D1 : une valeur par chiffre et par jour, la dernière lue ce jour-là. Le jour est un jour UTC, comme les cohortes de RevenueCat : « Revenu du jour » d’une journée close est donc bien le revenu de toute la journée UTC.
Un jour où le board n’a rien pu lire n’a pas de valeur (jamais un zéro). L’historique commence le 7/10/26 : rien n’est reconstitué avant. Il se consulte via l’API du cockpit (/api/history, protégée comme le reste du board) ; aucune courbe longue n’est encore affichée sur l’écran.
Propriétés utilisateur (segmentation)
Section intitulée « Propriétés utilisateur (segmentation) »Posées sur le profil PostHog pour pouvoir filtrer tous les events.
| Propriété | Posée quand | Mise à jour |
|---|---|---|
auth_method |
Inscription (setOnce) | Jamais |
signup_date |
Inscription (setOnce) | Jamais |
initial_platform / initial_language |
Inscription (setOnce) | Jamais |
cigarettes_per_day |
Onboarding | Profil |
years_smoking, quit_timeline, previous_attempts, why_quit_reasons |
Onboarding | Selon |
motivation_level |
Plus posée — l’étape motivation a quitté l’onboarding en 1.6.1 (27/7/26) | Ré-émise à l’ouverture depuis le profil enregistré, donc présente uniquement sur les comptes créés avant cette date |
quit_date |
Onboarding / profil | À chaque changement |
onboarding_completed |
Onboarding | Jamais |
is_premium |
Inscription (false) | Auto via RevenueCat |
notification_permission_status |
À chaque ouverture d’app | À chaque ouverture |
att_status (iOS) |
Résolution ATT | À la résolution |
Propriétés « super » (rattachées à chaque event) : is_premium, notification_permission_status, days_since_quit. notification_permission_status et days_since_quit sont ré-enregistrées à chaque passage au premier plan ; is_premium suit désormais l’abonnement en continu — elle est posée dès l’ouverture (sans attendre le profil) et re-posée à chaque changement d’entitlement.
| Funnel | Étapes | Décision qu’il éclaire |
|---|---|---|
| F1 — Drop-off onboarding | onboarding_started → onboarding_step_completed (de first_name à signup) → onboarding_completed |
Quel step simplifier/supprimer s’il dépasse 15 % de perte. Filtrer social_signup ≠ true (les revenants via login social faussent le funnel). |
| F2 — Inscription → 1er engagement | onboarding_completed → quit_date_updated → lesson_started (clé 0) |
La clé 0 gratuite sert-elle de hook d’activation ? |
| F3 — Gratuit → payant | paywall_viewed → rc_initial_purchase_event |
Quel point d’entrée du paywall optimiser. Breakdown par source. |
| F4 — Aide à l’envie | craving_help_started → craving_trigger_submitted → craving_activity_started → craving_activity_completed |
Quelles activités mettre en avant vs retirer. |
| F5 — Progression programme | key_completed (clé 0) → … → key_completed (clé 7) |
Où les gens décrochent dans le programme. |
| F6 — Date d’arrêt → 30 jours | quit_date_updated → health_milestone_reached (24h → 30j) |
À quel moment les gens rechutent → caler les notifications locales de soutien sur cette fenêtre. |
| F7 — Quiz pré-arrêt (Suivi) | tracking_empty_state_viewed → quiz_started (source=tracking_empty_state) → onboarding_quiz_completed |
Chez les gens sans date d’arrêt : combien voient l’état vide de Suivi, ouvrent un quiz, le terminent. Breakdown par quiz_type. Le filtre source est obligatoire depuis l’ouverture de l’entrée permanente Profil → Quiz (source=profile_quizzes), sinon le funnel compte aussi des gens déjà arrêtés. Les deux premières étapes ne se peupleront qu’après la prochaine mise en production. |
| F8 — Relance quiz par notif | notification_opened (category quiz) → quiz_started (source=quiz_reminder) → onboarding_quiz_completed |
Efficacité de la notification de relance quiz à faire revenir les gens sans date d’arrêt : taux de tap, puis complétion. Breakdown par quiz_type. Se peuple après la prochaine mise en production. Sans dénominateur d’envoi depuis le retrait de notification_scheduled (5/8/26) : on mesure ce que le tap produit, pas le taux de tap sur les notifs programmées. |
Cohortes
Section intitulée « Cohortes »| Cohorte | Définition | Usage |
|---|---|---|
| Activés | onboarding_completed + date d’arrêt passée/aujourd’hui |
Le vrai nombre d’utilisateurs |
| Power users | 5+ ouvertures d’app en 7j + 3+ lesson_completed en 7j |
Le noyau dur |
| Combattants de l’envie | 3+ craving_activity_completed (à vie) |
Utilisent activement les outils |
| À risque | Pas d’ouverture depuis 3j et days_since_quit < 30 |
Cible de ré-engagement |
| En difficulté | relapse_video_started ou quit_date_updated avec source=profile |
Soutien renforcé |
| Acheteur impulsif / tardif | rc_initial_purchase dans / au-delà des 24h après onboarding_completed |
Comprendre ce qui déclenche l’achat |
| Gros fumeurs | cigarettes_per_day ≥ 20 |
Rétention et besoins différents |