Vous avez longtemps boudé l’app tracking, et qui pourrait vous en vouloir ? Maintenir une implé TagCo + Tarteaucitron sur un WordPress codé par un stagiaire en 2017, dont les 43 plugins attendent une mise à jour depuis la découverte de l’Amérique reste plus simple qu’un setup app tracking cohérent.
Mais voilà qu’un lundi matin, votre CMO, tout juste sorti d’un webinar intitulé « L’app, le canal de 2027 », vous demande de tracker une app pour demain parce que “Avec l’IA, ça doit bien être facile, non?”.
Bonne nouvelle quand même : c’est pour ça qu’on a inventé les MMP. Sans eux, il faudrait intégrer à la main le SDK de Meta, celui de Google, celui de TikTok et celui de la régie que Christian a découverte lors de son dernier salon, chacun avec sa doc, ses mises à jour et ses humeurs, puis expliquer à votre dev iOS pourquoi l’app pèse maintenant 340 Mo. Avec un MMP comme Adjust, un seul SDK attribue les installs et renvoie les conversions à tout ce petit monde : la charge baisse drastiquement. Reste à bien l’installer et à bien le configurer, et c’est précisément ce que je vous montre dans cet article.
Si vous avez déjà installé et configuré Adjust comme un pro (et je n’en doute pas) vous pouvez consulter la liste des articles Adjust réunis dans ce hub :
On va parler de choses un peu plus avancées là-bas.
Pour les autres, on attaque.
Sommaire :
Sommaire :Adjust, c’est quoi exactement ?Étape 0 - Les prérequis Étape 1 - Créer l’app dans AdjustRenseigner la plateforme de son appÉtape 2 - Intégrer le SDK dans l’app iOS AndroidLes trois réglages à suivre à la lettre qui font toute la différenceCe qui est suivi automatiquement par Adjust une fois le SDK implémentéÉtape 3 - Créer les events in-app et leurs tokensListe des paramètres d’événementExemple de specs pour vos devsÉtape 4 - Connecter les partnersMapper ses eventsLes custom links pour vos canaux ownedÉtape 5 - Tester et debug son appIntercepter les requêtes réseaux via ProxyUtiliser la Testing console d’AdjustVotre app est enfin trackée
Adjust, c’est quoi exactement ?
Je pars du principe que vous savez déjà plus ou moins ce que c’est donc je vais la faire courte : Adjust est un MMP (Mobile Measurement Partner). Son métier : répondre à une seule question, « d'où vient cet utilisateur ? », puis partager la réponse avec les régies. Rapports, anti-fraude, SKAN, alertes : tout le reste se construit autour.
Et je vais debunk tout de suite la question que vous vous posez :
NON. Bien sûr que non ! Évidemment que non.
Adjust ne remplacera pas votre outil Analytics. Au contraire il est complémentaire.
Le MMP dit d'où viennent vos utilisateurs, l'outil d'analytics ce qu'ils font dans l'app. Et comme vous êtes les meilleurs, vous faites un export de vos données Analytics dans un Data Warehouse. Comme ça, vous pouvez réconcilier la source Analytics et Adjust. Voici un récap de ce que les outils répondent en fonction de votre besoin :
Besoin | MMP (Adjust) | Outil d'analytics (GA4/Firebase, Piano, Amplitude…) |
Attribuer une install à une campagne Meta, TikTok, Apple Ads… | Oui, c'est son métier | Limité : hors de son écosystème, il s'appuie souvent sur un MMP |
Renvoyer installs et events aux régies | Oui, via les postbacks | Partiel (GA4 vers Google Ads, par exemple mais uniquement pour Google) |
Analyser les parcours et l'engagement in-app | Basique (sessions, rétention) | Oui, c'est son métier |
Modèle e-commerce structuré (items, funnel) | Non | Oui, le plus souvent |
Exporter la donnée brute | Callbacks en temps réel, exports cloud horaires | Selon l'outil (export BigQuery natif pour GA4) |
Maintenant que vous savez tout, on peut commencer à rentrer dans l’interface.
Étape 0 - Les prérequis
Une App prête à l’emploi : On ne fait pas d’app tracking sans app, comme on ne lance pas le barbecue du team building sans que Didier de la compta ait ramené les merguez.
Avoir un dev à côté de soi, consentant si possible (de toute façon si vous aviez fait un ticket il n’a pas d’excuse).
Avoir un compte Adjust : Choisissez votre plan qui vous convient le mieux ici : Choose your plan! | Adjust Pricing, Products & Features | Adjust
Un bon vieux LLM si vous avez des doutes sur votre setup ça sert toujours de nos jours..
Étape 1 - Créer l’app dans Adjust
Une fois dans l’interface, dans App View > New App
Vous renseignez le nom de votre app, la devise, et très important si votre app n’est pas commercialisée dans la zone européenne, il faut que vous cochiez cette case.
En faisant ça, Adjust va envoyer de la donnée Consent Mode Opt-in par défaut à Google.
Pour la suite de l’article, je vais considérer que votre app est commercialisée en Europe (je m’excuse donc aux milliers de bots singapouriens qui vont lire cet article). Donc pour vous, bien évidemment, vous laissez cette case décochée.
Renseigner la plateforme de son app
Là on rentre dans votre première décision à prendre : Une app par plateforme, ou une app multi-plateforme ? Elle conditionne tout le mapping d'events, de partner,…
Multi-plateforme : un seul app token, les mêmes tokens d'events et de liens pour iOS et Android, et des liens qui redirigent automatiquement vers le bon store.
Une app par plateforme : deux app tokens et deux jeux de tokens d'events.
Adjust recommande une app par plateforme mais moi je n’ai pas trop d’avis tranché là-dessus. Selon moi si vous êtes dans ces cas :
“Mes environnements sont cloisonnés (équipes iOS et Android séparées) et/ou l’app est différente sur iOS que sur Android” → Une app par plateforme
“L’app est la même partout (Flutter ou React Native), avec un seul plan de taggage, et on est trois dans l’équipe” → Multi-plateforme
“Je ne veux pas me compliquer la vie dans le setup” → Multi-plateforme
“Je veux les rapports les plus cohérents et les plus faciles à analyser” → Une app par plateforme
Une fois que la plateforme et le store correspondant sont connectés, il vous faut vous munir de votre cher dev parce que vous allez avoir besoin de son aide pour la suite.
Étape 2 - Intégrer le SDK dans l’app
Après trois relances Slack, deux tickets Jira passés en « critique » et un rougail payé de votre poche au food truck du coin, votre dev est à présent à vos côtés, vous pouvez donc lui faire installer le SDK Adjust.
Tous les SDK sont passés en v5 (5.8.0 pour iOS et Android au moment où j'écris ces lignes). Si vous héritez d'un projet en v4, vérifiez la version installée avant de copier-coller quoi que ce soit.
iOS
Fournissez-lui cette doc il saura parfaitement comment l’intégrer. (doc iOS).
Trois choses à savoir cependant sur le v5 :
- la version minimale supportée est iOS 12 ;
- le module s'appelle désormais
AdjustSdk(c'étaitAdjusten v4), d'où leimport AdjustSdk;
- la signature library est intégrée nativement : si vous migrez depuis le v4, la doc demande de désinstaller l'ancienne d'abord.
Ajoutez aussi les frameworks Apple, marqués en optionnel :
AdServices (attribution Apple Ads), AdSupport (accès à l'IDFA), AppTrackingTransparency (popup ATT) et StoreKit (SKAN).Android
Pareil, voici la doc à fournir pour Android (doc Android) :
Attention.
La deuxième dépendance est systématiquement oubliée.
Sans elle, Adjust ne peut pas lire le Google Play Install Referrer, et vous perdez des installs attribuées sans jamais voir d'erreur. La troisième donne accès au Google Advertising ID, exigé pour une app distribuée sur Google Play.
kotlindependencies { implementation("com.adjust.sdk:adjust-android:5.8.0") implementation("com.android.installreferrer:installreferrer:2.2") implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") }
Les trois réglages à suivre à la lettre qui font toute la différence
L'environnement.
SANDBOX en recette, PRODUCTION dans le build publié sur les stores. Un build de recette laissé en PRODUCTION injecte des achats de test dans vos chiffres de campagne, et ça ne se rattrape pas. J'ai vu une journée de production entière rendue inexploitable par une série de tests d'achat.Pilotez-le par configuration de build (Debug et Staging en
SANDBOX, Release en PRODUCTION) plutôt qu'à la main, et ne promouvez jamais un build de recette.Le niveau de log.
VERBOSE en dev, c'est ce qui vous permet de lire ce qui part réellement. En prod, on réduit au minimum. Mais pratique pour certains debug Le moment de l'initialisation. Le plus tôt possible au lancement. Une init placée après un écran d'onboarding, ou derrière une condition de consentement mal fichue, vous fait perdre des sessions et des events au démarrage.
Attention : ATT + CMP. Sur iOS, l'IDFA n'est accessible que si l'utilisateur accepte le prompt ATT. En Europe, le plus sûr est que votre CMP réponde avant le premier envoi du SDK : l'init ci-dessus ne suffit donc pas telle quelle.
Le SDK a les réglages prévus pour ça, je vous détaille bientôt comment faire dialoguer ATT, CMP et Adjust dans un article dédié promis ça arrive vite.
Sinon en attendant vous avez également cette doc qui en parle : ‣
Ce qui est suivi automatiquement par Adjust une fois le SDK implémenté
Avant même que vous ayez créé votre premier event, le SDK mesure déjà des choses. C’est l’équivalent des événements collectés automatiquement de GA4 (
first_visit, session_start…), à une nuance près : ce ne sont pas des events au sens d’Adjust.Je vous ai fait la liste ici :
Ce qui remonte | Comment c'est compté | OS |
Installs | À la première ouverture de l'app, pas au téléchargement sur le store | iOS, Android |
Sessions | Nouvelle session après au moins 30 min d'inactivité, sous-session si l'utilisateur revient avant ( session_count, subsession_count dans le hit) | iOS, Android |
Temps passé | Durée de chaque session et temps cumulé dans l'app ( session_length, time_spent) | iOS, Android |
Utilisateurs actifs | Utilisateurs uniques actifs par jour, semaine et mois (DAU, WAU, MAU) | iOS, Android |
Rétention | Taux de rétention par cohorte (J1, J7, J30…) | iOS, Android |
Attribution | Réseau, campagne, adgroup et créa de chaque install, ou « Organic » | iOS, Android |
Apple Ads | Le SDK interroge le framework AdServices par défaut | iOS |
Install Referrer | Lu automatiquement si la dépendance installreferrer est présente | Android |
Infos appareil | OS et version, modèle, version de l'app, pays | iOS, Android |
Statut ATT | Réponse de l'utilisateur au prompt ATT ( att_status) | iOS |
Identifiants | IDFV et IDFA (si l'ATT est accepté) sur iOS, GAID sur Android, plus l'ADID, l'identifiant attribué par Adjust | iOS, Android |
Étape 3 - Créer les events in-app et leurs tokens
Ok maintenant que le SDK est bien envoyé vous allez devoir créer et intégrer au sein de l’app les events que vous voulez envoyer à vos partenaires publicitaires. Donc retenez votre dev encore quelque temps vous avez encore besoin de lui pour cette étape après promis il pourra rejoindre ses collègues et incarner à temps son Tieffelin barbare dans sa partie de D&D journalière.
Vous allez vous rendre dans AppView > All apps > [votre app] > Events > Add event, puis vous rentrez le nom de votre event.
Attention de créer uniquement des events que vous voulez suivre dans vos régies, Adjust est un MMP pas un outil Analytics.
Je ne vais volontairement pas détailler les options que vous voyez à l’écran car pour la plupart elles ne sont pas disponibles avec le plan de base et souvent vous n’allez pas en avoir besoin.
Une option mérite quand même votre attention : "This is a unique event", qui demande à Adjust de ne compter cet event qu'une seule fois par device. C'est pratique pour une inscription ou un premier achat quand le SDK local ne sait pas distinguer un premier achat d'un achat suivant.
Une fois que votre event est créé il va générer un token unique que vous allez fournir à votre dev qui va se charger de l’intégrer au sein de votre app en fonction de la stack. Pour cela, contentez-vous de lui fournir en plus de vos specs les liens vers la doc iOS et Android.
Liste des paramètres d’événement
En plus de la création de votre événement il faut également que vous transmettiez à votre dev la liste des paramètres qui le contiennent. Voici une liste de tous les paramètres qu’un event Adjust peut transporter :
Paramètre | À quoi il sert | Exemple | Quand l'utiliser |
Event token | Identifie l'event dans Adjust | abc123 | Toujours : c'est le seul paramètre obligatoire |
Revenue + devise | Montant et code devise ISO 4217, additionnés dans vos rapports et partagés avec les régies | 24.90 + EUR | Uniquement sur un event de paiement* |
Deduplication ID | Le SDK ignore l'event si cet ID figure déjà parmi les 10 derniers envoyés | purchase_A1234 | Sur l'achat, avec un ID unique par event et par transaction |
Callback parameters | Paires clé/valeur ajoutées à vos callbacks serveur. Adjust ne les stocke pas | order_id=A1234 | Pour enrichir votre donnée brute |
Partner parameters | Paires clé/valeur transmises aux régies que vous avez configurées. Absentes de la donnée brute par défaut | content_id=SKU-42 | Pour les régies qui en ont besoin (catalogue produits, pubs dynamiques) |
Callback ID | Identifiant à vous, renvoyé dans les callbacks d'event | purchase-A1234 | Pour vérifier qu'un event précis a bien été mesuré |
Product ID + transaction ID (iOS) ou purchase token (Android) | Vérification des achats in-app par Adjust | premium_monthly | Seulement pour les achats in-app passés par l'App Store ou Google Play |
* Attention il faut envoyer le paramètre de revenue uniquement sur vos événements d’achats et non pas sur tous vos événements e-commerce que vous le ferez dans un analytics classique. Si vous faites cela, chaque revenue s’additionnera et vous aurez un montant de CA généré complètement délirant dans vos rapports.
Exemple de specs pour vos devs
Évidemment la forme est libre. Si vous voulez le faire dans un .xlsx en comic sans ms vous pouvez aussi je ne juge pas. Mais grosso modo ça pourrait ressembler à ça en termes de contenu :
view_item | add_to_cart | purchase | |
Déclencheur | Affichage d'une fiche produit | Ajout au panier confirmé (pas le clic sur le bouton) | Confirmation de commande renvoyée par le back-office, une seule fois |
Event token | abc123 | def456 | ghi789 |
Revenue | Non | Non | Montant payé, remises déduites, en EUR (précisez TTC ou HT, frais de port inclus ou non) |
Deduplication ID | Non | Non | purchase_ + ID de commande |
Callback parameters | item_id | item_id, quantity | order_id, item_count |
Partner parameters | Aucun | Aucun | content_id (liste des item_id de la commande) |
Étape 4 - Connecter les partners
Ok c’est le moment où ça va parler ROAS CPA, CPI et [Insérez un acronyme inspirant à utiliser en COMEX pour flex devant son N+1].
Plus sérieusement c’est ici que l’on va paramétrer la liste de vos partners publicitaires afin qu’ils aient suffisamment d’infos pour optimiser au maximum vos campagnes. C’est un module très important qui permet de profiter pleinement de l’avantage d’un MMP que j’ai cité en début d’article.
Mais avant de plonger là-dedans il est important de vous présenter les types de Partners Adjust :
Type | Exemples | Comment ça marche | Lien Adjust à créer ? |
SAN (self-attributing networks) | Meta, Google Ads, TikTok, Snapchat | Adjust interroge la régie par API | Non, sauf deux exceptions (voir sous le tableau)* |
Apple Ads | Apple Ads | Attribution via le framework AdServices de l'app | Non, et rien à configurer dans Campaign Lab |
Réseaux classiques | ad networks, DSP | Adjust génère un lien à placer côté régie, au niveau campagne | Oui |
Analytics partners | outils d'analyse | Reçoivent votre donnée, sans jamais se voir attribuer d'install | Non |
Custom links | emails, CRM, QR codes, influence | Vos canaux owned, hors régies | Oui |
*Les deux exceptions côté SAN :
- TikTok : pas de lien à créer, mais un code à recopier. Adjust génère un « link token » pour TikTok, à coller dans l'Events Manager de TikTok au moment de connecter l'app.
- Google Ads, hors campagnes App (Search, Performance Max, Demand Gen…) : quand la pub envoie l'utilisateur sur votre site puis vers l'app, Google ne revendique pas toujours l'install. On recommande donc de créer un lien Adjust par type de campagne. Je parlerai de ce cas précis dans un article prochainement.
Ok maintenant que ce tableau est clair dans votre tête direction Campaign Lab > Partners > New partner : vous choisissez la régie et l'app
Ensuite, vous rentrez les ID nécessaires pour connecter votre app à votre compte publicitaire. Les éléments demandés diffèrent selon les régies mais j’ai essayé de vous regrouper les principaux :
Régie | Côté régie | Côté Adjust |
Meta | Connecter Adjust comme source de données dans l'Events Manager | App ID Meta (obligatoire), clé de déchiffrement Install Referrer pour Android (optionnelle) |
Google Ads | Créer un Link ID (Tools > Data manager > Third-party app analytics), puis importer les conversions | Coller le Link ID dans le module Google Ads |
TikTok | Connecter l'app dans l'Events Manager, choisir Adjust, coller le link token SAN | TikTok App ID (optionnel mais recommandé), intégration non-SAN à garder en parallèle |
Apple Ads | Compte Apple Ads Advanced pour récupérer les coûts | Framework AdServices dans l'app, connexion des coûts dans DataWorks |
Ensuite vous décidez de ce que vous voulez partager avec votre partner :
Mapper ses events
Sous Map events, vous associez chaque event Adjust à l'event attendu par la régie. Sur une app multi-plateforme, vous arbitrez entre Use global mapping (le même mapping partout) et Use platform-specific mapping (un mapping par plateforme)
Une fois que c’est fait vous devriez avoir quelque chose qui ressemble à ça :
Enfin vous cliquez sur “activer” votre partner et c’est bon ! Votre régie est prête à recevoir la donnée Adjust. Vous pouvez aller vérifier dans votre interface (ici je vois que mon event purchase remonte bien dans Meta ) :
Pour toute cette étape, je vous conseille vivement de regarder la doc de votre régie car les informations demandées peuvent grandement différer d’une régie à l’autre
Les custom links pour vos canaux owned
Cela concerne les emails, QR codes, posts organiques, bannière sur votre site etc..
Pour cela, direction Campaign Lab > Custom links > New link. Vous structurez le lien sur quatre niveaux (canal, campaign, adgroup, creative),
vous choisissez la destination (store, deep link, URL de repli), vos paramètres d’attribution et Adjust génère le lien et son QR code.
Les pièges qui polluent vos rapports
- Le lien de test resté actif en production. Un lien nommé « Test Untel » qui capte du trafic réel est un classique absolu.
- Le custom link créé alors qu'un partenaire natif existe. Résultat : deux canaux dans Datascape pour une seule source, avec les mêmes campagnes.
- Les fenêtres d'attribution non alignées entre la régie et Adjust. Pour Google Ads, Adjust prévoit même un réglage, « Use Google Ads attribution window » (30 jours), qu'il recommande d'activer.
Étape 5 - Tester et debug son app
Le saviez-vous ? « Ça marche sur mon téléphone » est la phrase la plus prononcée chaque jour par des milliers de devs app. Il est donc temps de le vérifier.
Dans cette dernière partie, je vais vous montrer comment réaliser la chose la plus boudée jusqu’alors en app tracking : le debug.
Ici, pas de Preview GTM ni de dataLayer dans la console, on fait ça à l’ancienne : un proxy pour intercepter les requêtes réseau de l’app, puis la Testing Console d’Adjust pour vérifier que tout est bien arrivé.
Intercepter les requêtes réseaux via Proxy
Idéalement, il vous faut sous la main un téléphone Android et un iPhone pour tester sur les deux environnements. Vous pouvez toujours utiliser des émulateurs ou des virtual machines si vous n’en avez pas.
Sinon, je vous invite à installer une app de Proxy qui va intercepter tous les hits réseaux de votre app. Je vous conseille Proxyman qui a un free tier amplement suffisant pour faire ce dont on a besoin.
Une fois que vous avez installé et configuré votre Proxy, vous pouvez analyser les hits vers
adjust.com (sur iOS : consent.adjust.com si l’utilisateur a accepté l’ATT, analytics.adjust.com sinon) en vous baladant sur votre app. Comme vous pouvez le voir vous pouvez analyser les hits d’attribution d’events et de sessions
Voici un exemple de quoi peut ressembler un hit d’événement Adjust :
javascriptapp_token=4xk2m9qhz7wp retry_count=0 os_version=26.7.1 installed_at=2026-10-12T15:46:25.934Z+0200 created_at=2026-11-03T12:11:05.217Z+0100 primary_dedupe_token=3f6c1a2e-8b47-4d19-a5e0-7c2d9b14f8a6 enqueue_size=1 bundle_id=com.exemple.monapp needs_response_details=1 offline_mode_enabled=0 last_skan_update={"coarse_value":"low","lock_window":false,"timestamp":"2026-10-12T15:46:32.214Z+0200","source":"sdk","conversion_value":0} device_name=iPhone15,2 foreground=1 app_version_short=1.29.0 send_in_background_enabled=0 subsession_count=1 environment=production session_count=3 started_at=2026-10-25T10:19:42.000Z+0100 os_name=ios seq=4 idfa=6B1F3C9A-2D47-4E8B-9A15-C3D07E2F4B81 idfv=A4E2C7F1-5B39-4D06-8C2A-1F7E93B5D402 device_type=iPhone time_spent=202 sent_at=2026-11-03T12:11:05.642Z+0100 event_count=7 event_token=hx4k9w revenue=24.90000 currency=EUR deduplication_id=purchase_A1234 session_length=202 skadn_registered_at=2026-10-12T15:46:32.212Z+0200 att_status=3 app_version=66 callback_params={"order_id":"A1234","item_count":"2"} partner_params={"app_instance_id":"8C3F1A6D2E9B47C5A0D4F7E1B6C29A53","content_id":"SKU-42,SKU-17"} attribution_deeplink=1
On retrouve notre
event_token correspondant à notre event ainsi qu’à tous ses paramètres (revenu, currency,..)Utiliser la Testing console d’Adjust
Autre manière de debug votre app, est d’aller dans App View > All Apps > Testing Console
Une fois dans cette section il vous suffit de rentrer votre Advertising ID :
Sur iOS : Il faut trouver votre IDFA ou IDFV (si ATT est refusé)
Sur Android : Il faut trouver votre GAID ou android_id
Vous pouvez également utiliser votre ADID si vous l’avez
Pour vous aider à trouver votre ID correspondant vous pouvez installer l’app Adjust Insights
Une fois votre ID rentré vous avez tout un tas d’informations sur votre navigation au sein de l’app dont :
- Toutes vos infos d’attribution : Via quel lien/canal vous avez installé l’app pour la première fois et la dernière fois
- La liste des événements que vous avez déclenchés : Et leur dernière date de déclenchement
- Des informations utiles sur votre app : le numéro de version, l’environnement,..
Votre app est enfin trackée
Félicitations : votre SDK est intégré, vos events partent avec le bon token et vos régies reçoivent enfin de la donnée propre.
Votre dev a pu retourner à sa partie de D&D, Didier de la compta a rallumé le barbecue, et votre CMO prépare déjà un webinar intitulé « Comment j’ai tracké notre app en un jour grâce à l’IA ». Laissez-le faire. Vous, vous savez. Et pour une fois, « ça marche sur mon téléphone » est vrai. Sur celui des autres aussi.
Attention cependant, on a fait la config minimaliste on a encore plein d’autres choses à voir (SKAN, ATT, Web to app,..) dans les prochains articles qui vont arriver très vite je vous promets j’ai juste le remake de The Legend of Zelda: Ocarina of Time à tester avant