Comment tracker un formulaire Brevo avec Google Tag Manager
Tracker un formulaire Brevo avec GTM : script MutationObserver sur #success-message, dataLayer generate_lead, Element Visibility et pièges iframe.
Dans ce guide
Brevo (ex-Sendinblue) est partout sur les sites FR — et rarement tracké proprement. Le point critique : Brevo ne pousse pas d’event natif type wpcf7mailsent ou hs-form-event. Sur un embed HTML (#sib-form), la soumission est en AJAX via sibforms.com, puis le panneau #success-message s’affiche. C’est ce moment qu’il faut transformer en dataLayer.push.
Méthode générale : tracker un formulaire avec GTM.
1. Quel type de formulaire Brevo avez-vous ?
Embed HTML (recommandé pour le tracking) : formulaire
id="sib-form"+ scriptmain.js— vous contrôlez la page.Iframe : GTM parent ne voit pas le submit (same-origin). Préférez l’embed HTML, une thank-you sur votre domaine, ou un webhook.
Landing Brevo hébergée : redirect thank-you ou webhook.
2. Le script qui déclenche la conversion (embed HTML)
Placez ce script après le HTML du formulaire Brevo (ou en Custom HTML GTM sur les pages qui portent le form), une seule fois :
<script>
(function () {
var success = document.getElementById('success-message');
var form = document.getElementById('sib-form');
if (!success) return;
var fired = false;
function pushLead() {
if (fired) return;
// Le panneau succès Brevo reçoit la classe --active après un envoi OK
var active = success.classList.contains('sib-form-message-panel--active');
var visible = success.offsetParent !== null || success.getClientRects().length > 0;
if (!active && !visible) return;
fired = true;
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'generate_lead',
form_name: 'brevo',
form_id: (form && (form.getAttribute('data-form-id') || form.id)) || 'sib-form',
lead_type: 'newsletter',
form_tool: 'brevo'
});
}
// 1) MutationObserver : réagit dès que Brevo active #success-message
var obs = new MutationObserver(pushLead);
obs.observe(success, { attributes: true, attributeFilter: ['class', 'style'] });
// 2) Filet de sécurité si la classe est déjà présente (retour arrière, cache)
pushLead();
})();
</script>
Pourquoi ce script et pas le trigger Form Submission GTM ? Parce que Brevo fait preventDefault + AJAX : le submit natif ne remonte souvent pas jusqu’à GTM comme une vraie navigation.
3. Brancher GTM
Trigger Custom Event : nom d’event
generate_lead(filtre optionnelform_toolequalsbrevo).Tag GA4 Event
generate_lead(+ paramsform_name,form_id).Tag Google Ads Conversion lead / Meta Pixel
Lead, sous Consent Mode.
4. Alternative sans script : Element Visibility
Si vous ne pouvez pas poser de JS custom, créez un trigger GTM Element Visibility :
Méthode : CSS Selector
Selector :
#success-message.sib-form-message-panel--active(ou.sib-form-message-panel--active)Once per page
Minimum percent visible : 1–50 %
Puis un tag qui pousse le même event, ou directement vos tags GA4/Ads. Moins propre que le script (pas de form_id structuré), mais ça marche sur l’embed HTML.
5. Iframe, DOI, webhooks
Iframe : pas d’accès au DOM — passez en embed HTML, thank-you URL sur votre domaine, ou webhook Brevo → Measurement Protocol / CAPI.
Double opt-in : décidez si la conversion media part à l’inscription ou à la confirmation email ; ne mélangez pas les deux.
Webhook : pour du tracking serveur anti-adblock une fois le client créé dans Brevo.
6. Recette
Inscription test sur l’embed HTML.
En GTM Preview : 1 seul
generate_leadau moment où le message de succès apparaît.Pas de rejeu au refresh.
Refus CMP pubs : tags Ads/Meta ne partent pas.
Contact bien créé dans Brevo.
Besoin d’un plan de taggage Brevo + Ads/Meta ?
Une implémentation plus complexe à discuter ?
Discuter de votre trackingUn projet similaire à cadrer ? Parlons-en.
Consultant web trackingArticles liés
Pour aller plus loin sur votre projet
Conversion API
Conversion API
Restaurez la qualité de vos conversions Meta et Google malgré le blocage navigateur et la perte de signal iOS / consentement.
Voir l'expertiseQuestions fréquemment posées
Où placer le script Brevo → dataLayer ?
Juste après le HTML du formulaire embed (#sib-form), ou en balise Custom HTML GTM déclenchée sur les pages qui portent le formulaire. Une seule instance pour éviter les doubles hits.
Pourquoi ne pas utiliser le trigger Form Submission GTM ?
Parce que l’embed Brevo soumet en AJAX (preventDefault + appel sibforms.com). Le submit navigateur classique n’arrive souvent jamais jusqu’au trigger natif GTM. Il faut observer #success-message ou utiliser Element Visibility.
Quel sélecteur pour Element Visibility ?
#success-message.sib-form-message-panel--active ou .sib-form-message-panel--active, once per page. C’est le panneau de succès que Brevo active après un envoi OK.
Ça marche en iframe ?
Non côté parent (same-origin). Passez en embed HTML, configurez une thank-you sur votre domaine, ou utilisez un webhook Brevo côté serveur.
Comment éviter le double comptage ?
Le flag fired dans le script empêche un second push. Ne cumulez pas script + Element Visibility + thank-you sur le même parcours sans filtre.