Uitleg – Zo stel je Google Ads enhanced conversions in met Google Tag Manager

uitleg-Zo stel je de Google Ads enhanced conversions met Google Tag Manager in

Het inregelen van enhanced conversions is in essentie het versturen van extra klantdata richting Google Ads op het moment dat er een conversie plaatsvindt. Onder die extra klantdata verstaan we:

  • E-mailadres
  • Telefoonnummer (inclusief de landnotatie/prefix)
  • Naam (bestaand uit de voornaam en de achternaam)
  • Adres (bestaand uit de straatnaam inclusief huisnummer, de stad, de regio, de postcode en het land).

Om enhanced conversions correct te kunnen doen heb je minimaal het e-mailadres of telefoonnummer nodig, het liefst beide. Bij e-commerce conversies zie je vaak dat het adres ook beschikbaar is.

In deze uitleg bespreken we stapsgewijs hoe je Google Ads enhanced conversions instelt met Google Tag Manager. We leggen je ook uit hoe je de data kunt structureren zodat deze beschikbaar is in de datalaag voor die Google Tag Manager en optioneel ook Measurement Protocol.

Voordat we aan de slag gaan

We zullen Google Tag Manager container(s) gebruiken om de Google Ads enhanced conversions event tags in te gaan stellen. We gaan er in deze uitleg vanuit dat je onderstaand al ingesteld hebt:

  • Geconfigureerde Google Tag Manager webcontainer (GTM).
  • Geconfigureerde Google Tag Manager servercontainer (sGTM) indien je het server-side wil instellen.
  • Google Analytics 4 server-side tracking. Heb je dit nog niet? Lees hier hoe dat moet. Dit is cruciaal.
  • Een Google Ads account dat conversies ingeregeld heeft staan.
  • Conversies waarbij je het e-mailadres, telefoonnummer, voornaam, achternaam etc. al verzamelt of wil verzamelen.

Wat er voor Google Tag Manager in de datalaag moet zitten

Om Enhanced Conversions te laten werken, moet de klantdata op een gestandaardiseerde manier in de dataLayer worden aangeboden. Sinds de updates van mei 2025 is het de standaard om deze data te groeperen in een user_data object.

Afhankelijk van je situatie zit de benodigde info voor enhanced conversions al wel of niet in de datalaag. Als je bijvoorbeeld gebruikmaakt van onze Savvy Track Shopify app is dit al voor goed voor je geregeld. Voor WordPress en eventueel Woocommerce zou je gebruik kunnen maken van GTM4WP. Indien je website of webshop custom gebouwd is zul je (of jouw developer(s)) zeker baat hebben bij onderstaand codevoorbeeld(en).

Het user_data object staat op hetzelfde niveau als je e-commerce data bij het purchase event. Of op hetzelfde niveau als bij naam van het leadgen event. Zie ook de codevoorbeelden verderop in deze uitleg.

Waar de user-provided data aan moet voldoen

Voor een succesvolle match in onder andere Google Ads is de kwaliteit van de data cruciaal:

  • Email: Gebruik kleine letters en verwijder eventuele spaties voor of achter het adres.
  • Telefoonnummer: Moet altijd het internationale E.164 formaat volgen (bijv. +31612345678).
  • Landcode: Gebruik altijd de tweeletterige ISO-landcode (bijv. NL of BE).
  • Volgorde: Het user_data object moet idealiter tegelijk met of voor het conversie-event (zoals de purchase) in de datalaag worden geplaatst. Uiteraard kun je hier van afwijken en het kan nog steeds werken, maar doe dit alleen als je de impact hiervan begrijpt.

Code voorbeeld voor de Google Tag (Web)

Onderstaand voorbeeld laat zien hoe het purchase event inclusief de benodigde klantgegevens voor Enhanced Conversions eruit moet zien:

window.dataLayer = window.dataLayer || [];
dataLayer.push({
  event: "purchase", // Of dus een andere event name als je enhanced voor iets anders dan purchase wil inzetten
  // Start Enhanced Conversions User Data object, op hetzelfde niveau als het event
  user_data: {
    email: "[email protected]", // Verplicht (indien beschikbaar)
    phone_number: "+31612345678", // Moet in E.164 formaat (incl. landcode)
    address: {
      first_name: "Jan",
      last_name: "de Vries",
      street: "Hoofdstraat 1",
      city: "Amsterdam",
      region: "Noord-Holland",
      postal_code: "1011AB",
      country: "NL" // Gebruik ISO 3166-1 alpha-2 formaat
    }
  },
  // Start GA4 Ecommerce Data,
  ecommerce: {
    transaction_id: "xx12345678",
    affiliation: "ABCDE",
    value: 123.45,
    tax: 12,
    currency: "EUR",
    shipping: 0,
    items: [
      {
        item_id: "12345678",
        item_name: "Productnaam",
        item_brand: "Merknaam",
        price: 123.45,
        quantity: 1,
        item_category: "Productcategorie"
        // Overige e-commerce parameters etc…
      }
    ]
  }
});

Als je het Measurement Protocol van Google Analytics gebruikt

Naast de standaard webtags is het ook mogelijk om het Google Analytics Measurement Protocol te gebruiken om klantgegevens te versturen. Dit is ideaal voor het verbeteren van conversiemetingen bij server-side interacties of offline conversies.

Om klantgegevens via een Measurement Protocol-verzoek te verzenden, voeg je de user_data parameter toe aan de JSON-payload. Google raadt sterk aan om ook altijd de user_id parameter mee te sturen wanneer je user_data verstrekt. Dit zorgt voor de meest nauwkeurige koppeling van data.

Het grote verschil tussen het web en Measurement Protocol: Zelf hashen

In tegenstelling tot de web-implementatie, moet je bij het Measurement Protocol de data voor verzending zelf hashen naar SHA-256. Voor privacy- en veiligheidsredenen accepteert het endpoint geen ruwe tekst voor e-mailadressen, telefoonnummers en NAW-gegevens. De gehashte waarde moet worden gecodeerd in hex-formaat (zoals 88d7ecb5c5b21…).

Voordat je de data hasht, moet je deze normaliseren. Zodat het schoon en gestandaardiseerd genoeg is voor Measurement Protocol om correct te verwerken. Houd rekening met onderstaande regels:

  1. Verwijder spaties aan het begin en einde (trim).
  2. Zet alle tekst om naar kleine letters.
  3. Specifiek voor telefoonnummers: Formatteer deze volgens de E.164 standaard (beginnend met een +).
  4. Specifiek voor Gmail e-mailadressen: Verwijder alle punten (.) die voor de domeinnaam in gmail.com of googlemail.com adressen staan. Dit heeft als reden dat het voor Gmail niet uitmaakt of er punten in het e-mailadres staan.

Code voorbeeld Measurement Protocol (JSON)

Onderstaand voorbeeld laat zien hoe het purchase event dat via Measurement Protocol verstuurd wordt inclusief de benodigde klantgegevens voor Enhanced Conversions eruit zou moeten zien:

{
  "client_id": "123456.7890",
  "user_id": "TS_USER_99",
  "user_data": {
    // Array: Max 3 gehashte emailadressen (SHA-256 hex)
    // Normalisatie: lowercase, geen spaties, verwijder punten bij gmail/googlemail voor de @
    "sha256_email_address": [
      "f60127…gehashte_waarde_1…",
      "a8c3b1…nog_een_gehashte_waarde_2…"
    ],
    // Array: Max 3 gehashte nummers (SHA-256 hex)
    // Normalisatie: alleen cijfers, beginnend met + (bijv +31612345678)
    "sha256_phone_number": [
      "e3b0c4…gehashte_waarde_1…",
      "13c3s1…nog_een_gehashte_waarde_2…"
    ],
    // Array: Max 2 adres-objecten
    "address": [
      {
        // De volgende 3 velden moeten gehasht zijn (SHA-256 hex)
        "sha256_first_name": "385hr2…gehashte_waarde…", // lowercase, trim
        "sha256_last_name": "1e5h23…gehashte_waarde…",  // lowercase, trim
        "sha256_street": "36we21…gehashte_waarde…",     // lowercase, trim, verwijder symbolen
        // De volgende velden blijven plain text (dus niet hashen)
        "city": "amsterdam",         // lowercase, trim, geen cijfers/symbolen
        "region": "noord-holland",   // lowercase, trim, geen cijfers/symbolen
        "postal_code": "1011AB",     // trim, verwijder punten en tildes (~)
        "country": "NL"              // Strikt ISO 3166-1 alpha-2 (hoofdletters)
      }
    ]
  },
  "events": [
    {
      "name": "purchase",
      "params": {
        "transaction_id": "VO26001529387",
        "value": 180.95,
        "currency": "EUR",
        "debug_mode": true // Zorgt ervoor dat de hit zichtbaar is in de GA4 DebugView
      }
    }
  ]
}

Pro-tip: Meerdere user-provided data waardes meesturen voor een hogere match-rate

Wist je dat je niet beperkt bent tot slechts een e-mailadres of telefoonnummer? Als jouw systeem meerdere contactgegevens van een klant heeft, kun je deze als een array (een lijstje) meesturen in plaats van als een enkele tekstregel (string).

Hoe meer valide gegevens je meestuurt, hoe groter de kans op een succesvolle match in bijvoorbeeld Google Ads.

De limieten per conversie zijn:

  • E-mailadressen: Maximaal 3 stuks. Denk bijvoorbeeld aan een persoonlijk e-mailadres, een werkmail of een tweede persoonlijk e-mailadres.
  • Telefoonnummers: Ook maximaal 3 stuks. Denk bijvoorbeeld aan een privé telefoonnummer en een werk telefoonnummer.
  • Adressen: Maximaal 2 stuks. Denk bijvoorbeeld aan een verzend- en facturatieadres.

Code voorbeeld met meerdere user-provided data waardes

In de dataLayer (web) of de JSON-payload (Measurement Protocol) ziet meerdere waardes er als volgt uit:

user_data: {
  // Gebruik een array [] in plaats van een string "" voor meerdere waardes
  email: ["[email protected]", "[email protected]"],
  phone_number: ["+31612345678", "+31201234567"],
  address: [
    {
      first_name: "Jan",
      last_name: "de Vries",
      street: "Hoofdstraat 1",
      city: "Amsterdam",
      postal_code: "1011AB",
      country: "NL"
    },
    {
      first_name: "J.",
      last_name: "de Vries",
      street: "Kerkstraat 5",
      city: "Utrecht",
      postal_code: "3511AA",
      country: "NL"
    }
  ]
}

Het enige grote verschil is dus dat je voor de web-implementatie (dataLayer) de data unhashed naar GTM schiet (GTM hasht het zelf), terwijl je voor het Measurement Protocol de boel wel alvast zelf door de SHA-256 hashing moet halen.

Duidelijkheid voor developers: User-provided data wel hashen of niet hashen?

Lever de data voor web Google Tag Manager containers altijd unhashed (als ruwe tekst) aan. Google Tag Manager zorgt zelf voor de veilige hashing (SHA256) voordat de data naar bijvoorbeeld Google Ads wordt verzonden.

Mocht je de user_data ook op andere plekken gaan gebruiken, zoals buiten GA4 en Google Ads om, dan kan het ook aan te raden zijn dezelfde waardes ook gehashed te sturen, zodat je dit niet opnieuw telkens in de Google Tag Manager container hoeft te regelen.

Gebruik je user_data via het Measurement Protocol? Dan dien je deze altijd te hashen. Measurement Protocol zal dit niet voor je doen en waardes zonder hash zijn zelfs problematisch.

Zet enhanced conversions in je Google Ads account aan

Om enhanced conversions goed te laten werken, dien je de optie in je Google Ads account ook aan te zetten.

  1. Ga naar je Google Ads account, ga naar Tools & Settings > Measurement > Conversions.
  2. Kies de conversie waarvoor je enhanced conversions wil inschakelen, bijvoorbeeld purchase bij e-commerce of lead bij leadgen.
  3. Klik op Enhanced conversions en volg de instructies om de functie aan te zetten.
  4. Kies vervolgens Google Tag Manager als de manier waarop je enhanced conversions gaat implementeren.

Je hebt nu enhanced conversions in Google Ads aangezet, nu is het nog zaak om de data die Google Ads daarvoor nodig heeft via Google Tag Manager naar Google Ads te sturen. Dat kan zowel client-side/via de web container als server-side/via een server container. Hieronder leggen we je voor beide uit hoe je dit aanpakt.

Stap 1: Maak een Google Ads User-Provided Data Event tag aan in Google Tag Manager

  1. Ga naar je webcontainer in Google Tag Manager.
  2. Ga naar Tags en klik op Nieuw.
  3. Kies Tagconfiguratie en selecteer Google Ads User-Provided Data Event als type tag.
  4. Kies de Google Ads conversie ID uit je lijst met constante variabelen of voer deze los toe.
  5. Kies bij User-provided data voor de variabele waarin de user provided data zich bevindt. Heb je deze nog niet? Dan dien je deze aan te maken. Je kan hier kiezen voor manueel, automatisch of code, waarbij de ervaring leert dat de manual of code optie vaak veel consistentere resultaten geeft. 
  6. Voeg een trigger toe. Kies voor de initialization all pages trigger.
  7. Druk op opslaan.

Stap 2: Pas de tag sequence aan bij je Google Ads conversie tracking tags

  1. Ga naar Tags en klik een van de Google Ads conversion tracking tags open die je al eerder hebt ingesteld. Heb je deze nog niet? Bekijk dan onze uitleg voor hoe je dit instelt.
  2. Ga binnen de tag naar tag configuratie en vervolgens naar advanced settings.
  3. Open tag sequencing.
  4. Kies vervolgens de Google Ads User-Provided Data Event tag die je in stap 1 hebt aangemaakt als de setup tag.

Stap 3: Controleer of het werkt en publiceer

We raden je aan om te checken of het goed werkt.

  1. Open de voorbeeldmodus van de Google Tag Manager webcontainer.
  2. Doe een testconversie waarbij je weet dat de conversie tag van Google Ads zou afvuren.
  3. Kijk in de preview modus of je twee afgevuurde tags ziet. De Google Ads User-Provided Data Event tag en je conversie tag. Staat hier geen afgevuurde User-Provided Data Event tag bij? Dan kan het zijn dat je tag sequencing niet goed staat ingesteld.
  4. Check bij de variabelen tab of er gegevens in je user-provided variabele zitten. Mis je hier de door jouw ingevulde gegevens bij je testconversie? Dan gaat er iets mis bij het verzamelen hiervan.
  5. Ziet het er allemaal goed uit? Vergeet niet te publiceren.

Let op: deze uitleg gaat ervan uit dat je GA4 gebruikt om data in de server container te krijgen. Start met de GA4-implementatiestappen voor server-side tracking indien dit nog niet is ingesteld.

Stap 1: Zorg dat e-mail, telefoonnummer en/of adres correct beschikbaar zijn voor de server container via de web container

Om de server container correct data te laten doorschieten die enhanced conversions nodig heeft, zoals e-mail en telefoonnummer, dient deze data aanwezig te zijn in je servercontainer. Dat is standaard niet zo, dus hieronder nemen we de stappen om ervoor te zorgen dat deze data uit je webcontainer naar de servercontainer geschoten wordt:

  1. Open je webcontainer.
  2. Open de Google Tag die al in je webcontainer zit. Heb je deze tag nog niet? Volg dan eerst deze uitleg.
  3. Open je Google Tag Configuratie Settings variabele of maak een nieuwe aan. Met deze variabele kun je eenvoudig de instellingen over meerdere Google Tags opzetten zonder alles dubbel te hoeven doen (herbruikbaar dus).
  4. Maak een Config parameter aan genaamd “user_data”.
  5. Kies als waarde de User Provided Data variabele die al in je webcontainer zit. Heb je deze nog niet? Maak dan een nieuwe variabele hiervoor aan.

Stap 2: Maak een Google Ads User-Provided Data Event tag aan in Server Google Tag Manager

Net zoals bij een webcontainer, bestaat er in de servercontainer ook een losse tag voor Google Ads om de user-provided data zoals e-mail en telefoonnummer server-side mee te sturen.

  1. Open de servercontainer in Google Tag Manager.
  2. Ga naar Tags en klik op Nieuw.
  3. Kies Tagconfiguratie en selecteer Google Ads Remarketing als type tag.
  4. Plak of kies de Google Ads Conversie-ID als variabele in de tag. Als het goed is heb je deze variabele al aangemaakt voor je conversie tags.
  5. Voeg een trigger toe. Kies hier voor “All pages” zodat de tag op alle pagina’s afvuurt.

Stap 3: Controleer of het werkt en publiceer

We raden je aan om te checken of je trigger op het juiste moment de tag afvuurt door in de preview modus van de server Google Tag Manager container de User Provided Data Event Tag af te laten vuren. Dit kan al met een simpele pageview:

  1. Voer de nieuwe server-side tracking parallel uit met de huidige webcontainer tracking setup om te testen of alles goed doorkomt. 
  2. Bezoek een webpagina. Wordt de User Provided Data Event Tag server-side goed afgevuurd? Mooi!
  3. Vergeet niet de server container (en eventuele aanpassingen in je webcontainer) te publiceren.

Je hebt er nu voor gezorgd dat de user-provided data die nodig is voor enhanced conversions ook server-side verzonden worden.

Vervolgstappen

FAQ

  • Ging dit eerst niet op een andere manier waarbij je dit bij de conversie tag koos?
    Ja, tot voor mei 2025 ging dit op de oude manier waarbij je telkens een user provided data variabele koos in de conversie tag die de informatie richting Google Ads schoot. Sinds mei 2025 is dit veranderd naar een losse tag, waarschijnlijk om de Google-Tag nog meer het centrum van alle verzamelde data te maken.
  • Ging dit eerst niet op een andere manier waarbij je dit bij de conversie tag koos?
    Ja, tot mei 2025 koos je de “User Provided Data” variabele direct in de Google Ads Conversie Tag zelf. Sinds de updates in 2025 is de standaard werkwijze veranderd naar een losse Google Ads User-Provided Data Event tag. Deze methode is centraler en zorgt ervoor dat de data consistenter beschikbaar is voor zowel Google Ads als andere Google-diensten.
  • Moet development de data zelf hashen (versleutelen) naar SHA256?
    Nee, dat is niet nodig en zelfs afgeraden. Als je de data als ruwe tekst (unhashed) in de dataLayer plaatst, herkent Google Tag Manager dit en voert de SHA256-hashing automatisch uit voordat de data naar de servers van Google wordt verzonden. Dit voorkomt fouten in het hashing-algoritme aan de kant van de developer.
  • Is het veilig om persoonsgegevens “open” in de dataLayer te zetten?
    Ja, zolang deze gegevens alleen in de browser van de gebruiker worden geladen en niet worden opgeslagen in een publieke database. De dataLayer is een tijdelijk JavaScript-object. Omdat GTM de data direct versleutelt (hasht) voordat het verstuurd wordt, ziet Google nooit het werkelijke e-mailadres van de klant; ze ontvangen alleen een unieke code die ze matchen met hun eigen gehashte database.
  • Wat als ik niet alle gegevens heb, zoals een telefoonnummer?
    Geen probleem. De belangrijkste identifier is het e-mailadres. Heb je ook een telefoonnummer of adresgegevens? Stuur deze dan vooral mee, want hoe meer datapunten Google heeft, hoe groter de kans op een succesvolle ‘match’. Velden die je niet hebt, kun je simpelweg weglaten uit het object of op null zetten.
  • Waarom moet het telefoonnummer in E.164 formaat?
    Dit is de internationale standaard om verwarring te voorkomen. Een nummer als 06 12345678 kan door een systeem op veel manieren geïnterpreteerd worden. Door het formaat +31612345678 te dwingen, weet Google zeker dat het om een Nederlands nummer gaat en kan de hashing correct worden uitgevoerd.
  • Wanneer zie ik resultaat in Google Ads?
    Nadat je de implementatie hebt gepubliceerd, duurt het meestal 24 tot 48 uur voordat Google Ads de data begint te verwerken. In het conversie-overzicht in Google Ads zie je bij de status uiteindelijk “Recording (Enhanced Conversions)” verschijnen. Het kan echter enkele weken duren voordat je een merkbare uplift ziet in de gerapporteerde conversie-waarde.

Bronnen


Deel dit artikel
Verhoog de effectiviteit van jouw campagnesBekijk Savvy Track

Denk je dat je genoeg weet?

Krijg het nieuwste in je inbox.

Copyright © 2023 - 2026