Instellen van AdPage Webhook Matching

Bewerkt

De AdPage Webhook Matching functionaliteit is op dit moment beschikbaar op basis van aanvraag. Het is een verbetering van onze reguliere Webhooks-functionaliteit. Het zorgt ervoor dat de payload volledig compatible is met het measurement protocol client van GA4 waardoor je de data ook kan doorsturen naar andere kanalen zoals Google Ads, Meta Ads, TikTok Ads en Pinterest Ads.

Wil je dit gebruiken? Doe dan een aanvraag bij support@adpage.io


Webhook Matching instellen

Webhook Matching zorgt dat je purchase-events server-side gevalideerd en ontdubbeld worden voordat ze naar GA4, Meta, Google Ads, TikTok of Pinterest gaan. Hieronder de zes stappen om dit live te zetten.

Wat doet Webhook Matching?

Browser-side purchase events kunnen worden geblokkeerd door ad-blockers, cookies, of ITP. Backend-webhooks vanuit je commerce-platform (Shopify, WooCommerce, PrestaShop, etc.) zijn server-side maar missen browser-context (gclid, user-agent, items array). De Webhook Matching van AdPage koppelt beide via een match-identifier, merged de payloads, en stuurt één gevalideerd event door. Resultaat: geen dubbele conversies, geen gemiste conversies.


Stap 1 — Activeer Webhook Matching in AdPage

  1. Open de AdPage container van je klant

  2. Ga naar Webhook request logs

  1. Zorg dat de callback url juist staat ingesteld. De endpoint staat standaard op data


Stap 2 — Upload de Tag Template in sGTM

  1. Open de server container in Google Tag Manager

  2. Ga naar Templates → Tag Templates → New

  3. Klik op de drie puntjes rechtsboven → Import → kies adpage-event-notifier.tpl. Je kunt deze hier downloaden: https://adpage.b-cdn.net/GTM-Templates/adpage-event-notifier.tpl

  4. Klik Save, de template "AdPage Event Notifier" verschijnt in de templates-lijst

  5. Maak twee tags aan met deze template:

    Tag 1 — Prepare (browser-side):

    • Mode: Prepare

    • Container ID: (uit AdPage, stap 1)

    • Platform preset: kies wat past (zie stap 3)

    • Affiliation: webshop-naam

    • Trigger: een browser-event vlak voor checkout (bv. view_cart, add_to_cart, of begin_checkout)

    Tag 2 — Trigger (server-side webhook):

    • Mode: Trigger

    • Container ID: idem

    • Platform preset: idem

    • Trigger: de webhook-event van je commerce-platform (bv. trytagging_purchase voor WC/PrestaShop, orders/create voor Shopify)


Stap 3 — Kies de juiste BasketKey (Matcher)

De BasketKey is wat Prepare en Trigger aan elkaar koppelt. Beide kanten moeten dezelfde waarde meesturen, anders matcht EN ze niet.

Kies in het veld Platform preset de juiste optie:

Setup

Preset

BasketKey

Klant heeft AdPage Tagging plugin/script geïnstalleerd

AdPage Tagging (universal)

user_id (uit trytagging_user_id cookie)

Native Shopify (zonder Tagging plugin)

Shopify

cart_token

Native Magento

Magento

quote_id

Native Lightspeed C-Series

Lightspeed

quote_id

Native Shopware 6

Shopware

cart_token

Iets anders / custom integratie

Custom

zelf invullen

Aanrader: voor 95% van onze klanten is AdPage Tagging (universal) de juiste keuze. Dit werkt platform-onafhankelijk omdat onze tagging-stack overal hetzelfde user_id UUID gebruikt — in de browser (cookie trytagging_user_id) én in de webhook (marketing.user_id).

Het veld Identifier-waarde override kun je leeg laten — de template haalt de waarde automatisch op uit event data of cookies. Vul alleen iets in als de auto-pull faalt; je ziet dat in de sGTM console-log als een error met de melding "Match identifier value could not be resolved".


Stap 4 - Measurement Protocol client aanmaken

De Webhook Matching callback arriveert op je sGTM /data endpoint. Daar moet een Client klaar staan om de binnenkomende Measurement Protocol-request te claimen en om te zetten naar een event dat downstream tags (GA4, Google Ads, FB CAPI, etc.) kunnen oppakken.

  1. Open de server container in Tag Manager

  2. Ga naar Clients → New

  3. Klik Choose client type → onder More kies Measurement Protocol (GA4)

  4. Geef de client een herkenbare naam, bv. Webhook Matching - GA4

  5. Vul de client-instellingen in:

    • Path / Activation: vul hier de standaard callback url in "/data"


Stap 5 — Purchase event doorsturen naar GA4

Om te voorkomen dat je 2 of 3 keer een purchase event gaat versturen (één keer vanuit de client-side GA4 request, één keer vanuit de Webhook Client, en één keer vanuit de Webhook Matching), zal je in de triggers op je GTM server container in moeten stellen dat er maar één purchase event doorgestuurd wordt.

1) Schakel de browser-purchase uit

In je GTM server container:

  • Open de bestaande Google Analytics tag en open de trigger

  • Voeg een voorwaarde toe die de Event Name 'purchase' tegenhoudt. Dus de exception: trigger wanneer event = purchase én event komt vanuit de GA4 Client.

2) Voeg een nieuwe trigger toe

In dezelfde Google Analytics tag voeg je nu een trigger toe:

  • Kies de grijze optie aangepast als trigger

  • Voeg de voorwaarde 'Client Name komt overeen met [client-naam die je zelf gekozen hebt]' toe

Als je die twee stappen uitvoert zal je dus een GA4 tag hebben met 2 triggers. Eén trigger die alle GA4 client events doorstuurt, behalve 'purchase'. En één trigger die de 'purchase' event doorstuurt vanaf je webhook matching client.


Stap 6 — Wat zit er in de outgoing payload

Event Notifier's callback naar sGTM bevat een complete payload die meteen bruikbaar is voor alle grote ad-platforms. Onze template forwarded automatisch:

GA4 (Measurement Protocol)

event_name:           "purchase"
client_id:            (van browser of webhook marketing.ga4_client_id)
transaction_id:       (van order)
value, tax, shipping: (van order)
currency:             EUR / USD / etc.
items[]:              (volledige array met item_id, item_name, price, quantity, item_brand, item_category, etc.)
engagement_time_msec: 100 (default)
page_location:        echte thank-you URL (Shopify Web Pixel sandbox-URLs worden automatisch opgeschoond)
gcs, gcd:             Consent state
ip_override:          server-side geocoding werkt

Meta CAPI (Facebook + Instagram)

fbp:                  _fbp cookie (Facebook browser ID)
fbc:                  _fbc cookie (Facebook click ID)
em:                   email (SHA256 wordt door FB CAPI tag gedaan)
fn, ln, ph:           first_name, last_name, phone (SHA256 idem)
zp, ct, st, country:  zip, city, state, country
external_id:          customer.id (cross-order stable)
client_ip_address:    IP voor IP-matching
client_user_agent:    UA voor browser-fingerprinting
event_id:             voor browser-pixel deduplicatie

Google Ads (Conversion + Remarketing)

_gcl_aw, _gcl_dc, _gcl_gb:  gclid cookies (set door Conversion Linker)
FPGCLAW, FPGCLDC:            first-party gclid variants
gclid, gbraid, wbraid:        URL-parameters (iOS app campaigns)
client_id, ga_session_id:     voor stiching met page_view events
value, currency:              conversion value

TikTok Events API

_ttp, ttp:            TikTok pixel cookie
ttclid:               TikTok click ID (uit URL ?ttclid=)
email, phone_number:  (TikTok gebruikt volledige veldnamen ipv FB's afkortingen)
first_name, last_name, city, state, zip_code, country_code: idem
external_id:          customer.id
ip, user_agent:       voor matching

Pinterest Conversions API

_epik, epik:          Pinterest click ID cookie + URL param
em, fn, ln, ph, zp:   (zelfde conventie als FB CAPI)
ct, st, country:      adres-velden
external_id:          customer.id
client_ip_address:    IP
client_user_agent:    UA

Consent forwarding (alle platforms)

EN stuurt de Consent Mode state in twee vormen mee zodat álle CAPI tags het kunnen respecteren:

ad_storage, ad_user_data, ad_personalization, analytics_storage: "granted"/"denied"
consent.ad_storage, consent.ad_user_data, …: idem (genest object)
gcs, gcd: Google Consent strings (voor GA4 / Google Ads)

Troubleshooting

"Match identifier value could not be resolved" — De BasketKey wordt niet gevonden in event data. Open in sGTM console de error-log → kijk in EventDataSnapshot waar de UUID staat → vul die pad in via "Identifier-waarde override" in de tag-config.

Trigger geeft 308 redirect — URL eindigt met /trigger/ zonder waarde. Betekent dezelfde root-cause als hierboven. Re-check de BasketKey resolutie.

Trigger geeft 400 — Body validatie faalt. Meestal omdat transaction_id of value leeg is. Bij AdPage Tagging plugin (WC/PS) zit dit in ecommerce.transaction_id — controleer dat de webhook die meestuurt.

missed status in EN logs — Trigger arriveerde zonder bijhorende Prepare. Browser-side Prepare faalde waarschijnlijk (ad-blocker, ITP, of geen browser-event vlak voor checkout). Check sGTM preview op de storefront.

callback_failed — sGTM ontvangt EN's callback niet. Check de callback URL in AdPage's tenant-config; meestal mist er een /data suffix of staat er een verkeerde subdomain.

Geavanceerd

  • Multi-market (Shopify Markets / multi-locale shops): vul in het veld GA4 Measurement IDs alle GA4 properties komma-gescheiden (bv. G-NL123, G-BE456, G-DE789). EN forwarded dan per-property de _ga_<MID> cookie zodat sGTM downstream kan routeren.

  • WooCommerce zonder Tagging plugin: vul de exacte wp_woocommerce_session_<hash> cookie-naam in het veld "WooCommerce session cookie naam".

  • Custom event identifier: kies preset = Custom en vul zelf identifier-naam + variabele-referentie in.


Hulp nodig?

Heb je je klant in een platform-setup waar dit artikel niet op antwoord geeft — vraag het Tracking & Tools-team via Slack #adpage-tracking of mail support@adpage.io met de container-ID en een screenshot van de sGTM console-log.


Was dit artikel nuttig?

Onze excuses! Zou je ons meer willen vertellen?

Bedankt voor de feedback!

Er is een probleem opgetreden bij het verzenden van uw feedback
Controleer uw verbinding en probeer het opnieuw.