Tracking HubSpot via Google Tag Manager : guide complet pour faire remonter vos conversions
Tracking HubSpot via Google Tag Manager : guide pas à pas pour faire remonter envois de formulaires et prises de rendez-vous vers Google Ads, Meta et GA4. Méthode testée sur +120 comptes Bricks, scripts prêts à copier, erreurs à éviter et checklist gratuite.
Sur la majorité des comptes HubSpot que nous auditons chez Bricks, plus de 80% sous-déclarent leurs conversions vers Google Ads ou Meta. Le résultat est mécanique : les algorithmes de Smart Bidding optimisent sur des données partielles, le CAC dérive, et l’équipe paid prend des décisions sur du vide. Le coupable est presque toujours le même, un tracking HubSpot GTM mal câblé, ou pas câblé du tout.
Le tracking HubSpot via Google Tag Manager n’est pas compliqué techniquement. Il est mal documenté, c’est tout. La documentation HubSpot officielle couvre la moitié du sujet, la doc Google Tag Manager l’autre moitié, et personne n’écrit la jonction des deux en français.
Ce guide est notre méthodologie complète, testée sur plus de 120 comptes clients B2B et B2C : deux events HubSpot remontés (envoi de formulaire et prise de rendez-vous), trois plateformes connectées (Google Ads, Meta, GA4), et une checklist d’erreurs à éviter. Vous trouverez 4 captures d’écran dans cet article qui illustrent les deux étapes clés à reproduire pour chaque événement (la balise listener et le déclencheur). Vous repartez avec un setup propre, dupliquable sur tous vos comptes.
Pourquoi tracker HubSpot via Google Tag Manager (et pas autrement) ?
Les 3 limites du tracking HubSpot natif côté ads
HubSpot dispose d’un tracking natif puissant en interne : attribution multi-touch, scoring, propriétés de contact. Mais ce tracking ne remonte pas tel quel vers les plateformes publicitaires. Trois limites bloquent le passage :
- HubSpot ne pousse pas d’événement standardisé dans le
dataLayerdu site sans intégration manuelle - Les conversions HubSpot natives n’alimentent pas le pixel Meta ni le tag Google Ads sans connecteur tiers
- Le rapprochement entre une visite payante et un lead HubSpot reste partiel sans GTM jouant le rôle d’orchestrateur
Concrètement, si vous laissez HubSpot tracker dans son coin, vos campagnes Google Ads optimisent sur des conversions web (clics, vues de page) au lieu d’optimiser sur des leads qualifiés réels.
Ce que GTM apporte de plus
Google Tag Manager joue le rôle de chef d’orchestre. Il intercepte les événements HubSpot dès qu’ils se produisent dans le navigateur, les transforme en événements dataLayer standardisés, puis les relaie en parallèle à toutes vos plateformes. Un seul setup, plusieurs sorties.
Concrètement, un même envoi de formulaire HubSpot peut déclencher en simultané :
- Une conversion Google Ads avec ID et label
- Un event
Leadcôté Meta Pixel ou Conversions API - Un event
generate_leadcôté GA4 - Un event personnalisé pour LinkedIn Insight Tag, TikTok Pixel ou Microsoft UET
C’est ce que nous appelons un setup tracking centralisé. Il prend 2 heures à construire, et économise des semaines de debug ensuite.
Quand passer en server-side ?
Pour les comptes avec un volume de leads élevé ou des contraintes RGPD strictes, on recommande d’ajouter un container GTM server-side. Il ne remplace pas la méthode décrite dans cet article, il la complète, en relayant les événements via votre propre serveur plutôt que via le navigateur. Mais commencez toujours par un setup client-side propre. Le server-side amplifie un bon setup, il ne corrige pas un mauvais.
Prérequis avant de commencer
Les accès et outils nécessaires
Avant de toucher à GTM, vérifiez que vous avez tous les accès :
- Accès admin à votre compte HubSpot (au minimum aux Settings et aux Forms)
- Accès admin à votre container Google Tag Manager
- Accès aux comptes publicitaires sur lesquels vous voulez remonter les conversions (Google Ads, Meta Business Manager, GA4)
- Accès au CMS du site pour publier le container GTM si pas encore fait
Vérifier que le HubSpot Tracking Code est bien installé
Le HubSpot Tracking Code est le script de base qui permet à HubSpot d’identifier les visiteurs sur votre site. Il doit être installé sur toutes les pages avant que GTM ne puisse écouter quoi que ce soit. Récupérez votre Hub ID dans Settings puis Tracking Code, et copiez le snippet.
Si votre site n’a pas encore le HubSpot Tracking Code, vous pouvez l’installer via GTM en créant une balise HTML personnalisée nommée cHTML - HubSpot Tracking Code qui pousse le snippet ci-dessous, déclenchée sur All Pages :
<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/VOTRE-HUB-ID.js"></script>
Remplacez VOTRE-HUB-ID par votre Hub ID HubSpot. Si vous l’avez déjà installé en dur dans le <head> du site via votre CMS, ne le doublez pas, vous risquez de compter chaque visite deux fois.
Les 2 cas particuliers à connaître
Avant de plonger dans les scripts, deux cas particuliers à anticiper :
- Les nouveaux formulaires HubSpot embedded. Si vous utilisez les nouveaux formulaires HubSpot intégrés directement dans votre site (et pas via le script v2), il faut impérativement utiliser le code “Developer code (Advanced)” disponible dans HubSpot. C’est ce code qui pousse nativement l’événement
hubspot_form_successdans ledataLayer. Sans ça, le listener GTM ne capture rien. - Le calendar HubSpot doit être embedded. Pour tracker les prises de rendez-vous, le widget calendar HubSpot doit être intégré dans une page du site (pas un simple lien externe vers
meetings.hubspot.com). C’est la seule configuration où GTM peut écouter le message d’événement renvoyé par HubSpot.
Comment tracker un envoi de formulaire HubSpot via GTM ?
C’est le tracking le plus demandé. Il se monte en 3 étapes propres dans GTM, plus une étape de test.
Étape 1 : créer le Form Success Listener
C’est la balise qui écoute les événements de soumission de formulaire HubSpot et les pousse dans le dataLayer. Dans votre espace de travail GTM, créez une nouvelle balise :
- Type de balise : HTML personnalisé
- Nom :
cHTML - Hubspot form Success Listener V4(le nom exact peut varier selon votre convention interne) - Contenu :
<script type="text/javascript">
window.addEventListener("hs-form-event:on-submission:success", function(event) {
window.dataLayer.push({
'event': 'hubspot_form_success',
'hs-form-guid': HubSpotFormsV4.getFormFromEvent(event).getFormId(),
});
});
</script>
- Déclenchement :
All Pages - Tag firing priority : 10 (recommandé pour s’assurer que le listener est chargé avant les balises de conversion)
.png)
Ce script écoute l’événement hs-form-event:on-submission:success que HubSpot émet à chaque envoi de formulaire réussi, et le réémet sous forme d’événement personnalisé hubspot_form_success dans le dataLayer. Le hs-form-guid est l’identifiant unique du formulaire, vous pouvez l’utiliser plus tard pour différencier vos formulaires entre eux (formulaire contact vs formulaire devis vs formulaire newsletter, par exemple).
Étape 2 : configurer le déclencheur événement personnalisé
Dans GTM, allez dans Déclencheurs puis Nouveau :
- Type de déclencheur : Custom Event (Événement personnalisé)
- Nom :
Trigger - CE - hubspot_form_success - Event name :
hubspot_form_success - This trigger fires on :
All Custom Events
Enregistrez. C’est ce déclencheur que vous attacherez à toutes vos balises de conversion ensuite (Google Ads, Meta, GA4, LinkedIn).
.png)
Étape 3 : tester en mode Aperçu GTM
Activez le mode Aperçu GTM (Espace de travail puis Aperçu), puis allez sur une page de votre site qui contient un formulaire HubSpot. Soumettez le formulaire avec un email de test.
Dans la fenêtre Tag Assistant qui s’ouvre, vérifiez :
- L’événement
hubspot_form_successapparaît dans la chronologie d’événements - Le
dataLayercontient bien la variablehs-form-guid - Vos balises de conversion (configurées dans la section suivante) se déclenchent toutes
Le piège des nouveaux formulaires embedded HubSpot
C’est l’erreur la plus fréquente que nous croisons sur les comptes que nous auditons. Si vous utilisez les nouveaux formulaires HubSpot intégrés via le builder visuel et pas le script V2 historique, le listener décrit ci-dessus ne suffit pas.
Pour ces formulaires, vous devez impérativement utiliser le code “Developer code (Advanced)” généré par HubSpot dans l’éditeur de formulaire. Ce code pousse nativement hubspot_form_success dans le dataLayer, sans avoir besoin du listener. Si vous gardez le code “embed standard”, le listener ne capturera rien et vos conversions ne remonteront jamais.
Règle simple : sur un site avec un mix de formulaires anciens et nouveaux, gardez le listener pour les anciens, et utilisez le code Advanced pour les nouveaux. Les deux peuvent cohabiter sans conflit dans le même container GTM.
Comment tracker une prise de rendez-vous via le Calendar HubSpot ?
Le tracking des meetings est plus rare en agence, beaucoup l’oublient. Pourtant, c’est souvent l’événement de conversion le plus qualifié de votre funnel B2B. Sans lui, vous optimisez sur des envois de formulaire qui ne deviennent jamais des deals. La logique est exactement la même que pour le formulaire : une balise listener, un déclencheur Custom Event, des balises de conversion attachées.
Étape 1 : embed obligatoire du calendar sur votre site
Première condition non-négociable : le widget Calendar HubSpot doit être intégré dans une page de votre site, pas en lien externe. Si vos prospects cliquent sur “Réserver un appel” et atterrissent sur meetings.hubspot.com, GTM ne peut rien tracker, le visiteur a quitté votre domaine.
Récupérez le code embed dans Calendar HubSpot puis Embed, et collez-le sur la page de votre choix (page contact, page d’accueil, page produit). Le tracking ne fonctionne que sur cet embed.
Étape 2 : créer le Meeting Listener dans GTM
Créez une nouvelle balise HTML personnalisée :
- Type de balise : HTML personnalisé
- Nom :
cHTML - Hubspot meeting listener - Contenu :
<script>
window.addEventListener("message", function(event) {
if (event.data.meetingBookSucceeded == true) {
window.dataLayer.push({
'event': 'hubspot_meeting_success',
'hs-form-guid': event.data.meetingsPayload.formGuid,
'hs-organizer': event.data.meetingsPayload.bookingResponse.postResponse.organizer.name,
'hs-is-meeting-paid': event.data.meetingsPayload.isPaidMeeting,
'hs-meeting-date': event.data.meetingsPayload.bookingResponse.event.dateString,
'hs-duration-minutes': event.data.meetingsPayload.bookingResponse.event.duration / 60000
});
}
});
</script>
- Déclenchement :
All Pages
.png)
Ce script écoute les messages postés par l’iframe HubSpot (le calendar est intégré en iframe). Quand HubSpot confirme qu’un rendez-vous a bien été pris (meetingBookSucceeded == true), il pousse l’événement hubspot_meeting_success dans le dataLayer avec 5 variables enrichies décrites ci-dessous.
Étape 3 : configurer le déclencheur
Comme pour le formulaire, créez un déclencheur Custom Event :
- Type de déclencheur : Custom Event (Événement personnalisé)
- Nom :
Trigger - CE - hubspot_meeting_success - Event name :
hubspot_meeting_success - This trigger fires on :
All Custom Events
%20(1).png)
Étape 4 : exploiter les 5 variables remontées
Le listener pousse 5 variables que vous pouvez ensuite remonter à vos plateformes ou utiliser pour segmenter vos conversions :
hs-form-guid: identifiant du calendrier qui a généré le RDVhs-organizer: nom du commercial qui prendra le RDV (utile pour analyser la conversion par commercial)hs-is-meeting-paid: booléen indiquant si le RDV est payant ou gratuit (utile en consulting)hs-meeting-date: date et heure exactes du rendez-voushs-duration-minutes: durée du créneau réservé en minutes
Ces variables peuvent être passées en event_parameters dans GA4, en custom_data dans la Conversions API Meta, ou en paramètres personnalisés Google Ads pour des analyses fines (taux de show selon le commercial, par exemple).
Étape 5 : tester et publier votre container
Activez le mode Aperçu GTM, allez sur la page qui contient votre Calendar HubSpot, et réservez un créneau de test. Vérifiez dans Tag Assistant que l’événement hubspot_meeting_success remonte avec ses 5 variables. Si c’est le cas, publiez votre container GTM (Soumettre puis Publier).
Créer les balises de conversion Google Ads, Meta et GA4
Vos events HubSpot sont maintenant disponibles dans le dataLayer. Reste à les transformer en conversions effectives sur chaque plateforme. Le principe est identique à chaque fois : créer une balise dédiée, l’attacher à Trigger - CE - hubspot_form_success ou Trigger - CE - hubspot_meeting_success, tester. Sur un compte mature, vous retrouverez généralement 4 à 6 balises connectées au même trigger (GA4, Google Ads, Google Ads User-provided Data, Meta, parfois LinkedIn et TikTok).
Balise de conversion Google Ads
Pour chaque event (form submit et meeting), créez une balise Google Ads :
- Type de balise : Suivi des conversions Google Ads
- Nom :
Gads - form_submit(puis une seconde pourGads - meeting_success) - ID de conversion : à récupérer dans Google Ads, dans
OutilspuisConversionspuis votre action de conversion - Libellé de conversion : à récupérer au même endroit
- Valeur de conversion : optionnelle, à remplir si vous avez une valeur de lead estimée
- Déclenchement :
Trigger - CE - hubspot_form_successouTrigger - CE - hubspot_meeting_success
Ajoutez idéalement en parallèle une balise Google Ads User-provided Data Event qui envoie l’email hashé du lead pour activer l’Enhanced Conversions, ce qui améliore significativement la précision d’attribution sur Safari et Firefox.
Une fois la balise créée et testée, retournez dans Google Ads et marquez cette conversion comme conversion principale (Inclure dans "Conversions" activé). Sans ça, le Smart Bidding ne l’optimise pas. Pour tracker tout ça côté media buying, vous pouvez vous appuyer sur une agence Google Ads experte en tracking qui vérifiera la cohérence entre conversions GTM et conversions Google Ads.
Balise Meta Ads (Pixel ou Conversions API)
Pour Meta, deux options :
- Via le Pixel Meta classique. Créez une balise HTML personnalisée nommée
html - facebook - form_submitqui poussefbq('track', 'Lead');au déclenchement du trigger. Solution la plus simple, mais soumise à l’ITP de Safari et à AdBlock, donc partiellement déperditive. - Via la Conversions API (CAPI). Créez une balise dédiée Meta Conversions API dans GTM, ou via votre container server-side. Solution plus robuste, recommandée dès que vous avez un volume significatif. Voir la documentation officielle de la Conversions API Meta.
Dans les deux cas, l’événement standard à utiliser est Lead pour les form submits, et Schedule pour les meeting bookings. Si vous voulez segmenter, utilisez les paramètres custom_data.content_name ou custom_data.lead_type pour différencier les types de formulaires ou les niveaux de qualification.
Balise GA4
Pour Google Analytics 4, créez une balise événement GA4 par déclencheur, nommée par exemple GA4 - form_submit et GA4 - meeting_success :
- Type de balise : Événement Google Analytics : GA4
- ID de mesure : votre ID GA4
- Nom de l’événement :
generate_leadpour le form submit,schedulepour le meeting - Paramètres de l’événement : passez les variables
dataLayer(form_id,meeting_organizer, etc.) en custom parameters
Dans GA4, marquez ensuite ces événements comme conversions (Admin puis Événements puis Marquer comme conversion). C’est ce qui les rendra disponibles pour l’import vers Google Ads via la liaison GA4 et Google Ads.
Marquer les conversions comme principales dans vos plateformes
Cette étape est oubliée par 7 comptes sur 10 que nous auditons. Une balise déclenchée n’est pas automatiquement une conversion d’optimisation. Vérifiez sur chaque plateforme :
- Google Ads : la conversion doit être marquée “Conversion principale” et
Inclure dans Conversionsdoit être activé - Meta : l’événement doit être prioritaire dans
Events ManagerpuisAggregated Event Measurement - GA4 : l’événement doit être marqué comme conversion dans
AdminpuisÉvénements
Sans ça, le Smart Bidding et les algorithmes Meta optimisent dans le vide. Vos conversions remontent en reporting mais n’alimentent pas les enchères.
Les erreurs les plus fréquentes (et comment les éviter)
Sur les +120 comptes que nous gérons en stratégie d’acquisition payante data-driven, voici les 4 erreurs que l’on retrouve dans presque chaque audit tracking HubSpot GTM.
Le double comptage
Vous avez configuré le tracking GTM, et en parallèle votre site redirige vers une thank you page après le formulaire, sur laquelle une seconde balise de conversion se déclenche. Résultat : chaque lead compte pour 2. Vos coûts par conversion s’effondrent en apparence, vos algos optimisent sur du faux.
Solution : choisissez une seule méthode. Soit le déclencheur basé sur l’événement hubspot_form_success, soit le déclencheur basé sur l’URL de la thank you page. Jamais les deux. En général, on privilégie l’événement hubspot_form_success car il est plus fiable que la redirection (qui peut échouer en cas de bloqueur ou d’erreur réseau).
Les UTM qui ne remontent pas dans HubSpot
Vous avez beau tracker l’envoi du formulaire, si vous ne remontez pas les UTM associés à la session, vous ne pouvez pas attribuer le lead à la bonne campagne. La bonne nouvelle : HubSpot le fait automatiquement, à condition que vous ayez créé les bons champs.
Dans Settings puis Properties de HubSpot, créez les propriétés contact suivantes en type “Single line text” :
utm_sourceutm_mediumutm_campaignutm_contentutm_termplacement(utile pour Meta Ads notamment)
Ajoutez ensuite ces champs dans tous vos formulaires HubSpot et masquez-les. HubSpot les remplit automatiquement à partir des paramètres URL au moment de la soumission. Aucun script GTM supplémentaire nécessaire pour cette partie.
Le déclencheur qui se tire sur toutes les pages
Si votre déclencheur GTM est mal configuré et se déclenche sur toutes les pages (et pas uniquement sur l’événement personnalisé), votre balise de conversion remonte un lead à chaque page vue. C’est rare mais on le voit, surtout chez les équipes qui ont copié-collé un déclencheur générique sans changer le type.
Vérifiez systématiquement que le type de déclencheur est bien Custom Event et que l’event name correspond exactement à hubspot_form_success ou hubspot_meeting_success. Pas d’espace en trop, pas de majuscule.
Le calendar HubSpot intégré en lien externe
Comme expliqué plus haut, GTM ne peut tracker un meeting HubSpot que si le widget calendar est embedded sur votre site. Si vos boutons “Réserver un RDV” pointent vers meetings.hubspot.com/votre-nom, vous perdez l’événement de conversion le plus qualifié de votre funnel.
Solution : créez une page dédiée /reservation ou /contact-calendrier sur votre site, puis vous pouvez intégrer le code du formulaire HubSpot et rediriger tous vos CTA vers cette page. Le gain en données de conversion vaut largement les 30 minutes de mise en place.
Conclusion
Un tracking HubSpot GTM propre, c’est 3 étapes par événement, 2 events à câbler, 1 stack centralisée. Une fois en place, il alimente proprement vos campagnes Google Ads, Meta et GA4 sans intervention manuelle. C’est la base d’un Smart Bidding qui fonctionne, d’un attribution model fiable, et d’un reporting paid sur lequel votre direction peut prendre des décisions.
Sur les comptes que nous prenons en gestion complète de l’acquisition payante, ce setup est livré dans la première semaine du démarrage, avant même le lancement des campagnes. Sans tracking propre, on ne lance pas. Si vous voulez vérifier que votre propre setup est bon, on a compilé toutes les vérifications dans une checklist gratuite.








