← Blog

SEO

GA4-attributie audit: de checklist vóór elke AI-agent

Drie attributie-pilots op rij leverden zelfverzekerd verkeerde omzetcijfers op. De data was al krom voordat de agent erin keek. Dit is de audit die we nu altijd eerst draaien.

Jacob Molkenboer· Oprichter · A Brand New Company· 3 dec 2024· 9 min
Koperen kompas, linnen meetlint, room indexkaart met groene draad en rode lakzegel op ivoor papier.

Week 11 van een marketing-attributie pilot. De ops lead opent de kwartaalsamenvatting op de beamer. De agent rapporteert dat LinkedIn €312k aan pipeline opleverde, paid search €188k, organic €74k. De finance director pakt het facturenboek. Echte cijfers: LinkedIn €41k, paid search €230k, organic €119k. Niemand liegt. De agent las uit GA4. GA4 loog.

Dit overkwam drie van onze klanten in drie opeenvolgende kwartalen tussen eind 2025 en begin 2026. Drie verschillende sectoren, drie verschillende attributie-agents, drie verschillende attributiewindows. Elke pilot was correct bedraad. Elke onderliggende dataset was krom. We offreren geen attributiewerk meer zonder een audit van een week ervoor.

Dit is de checklist die we nu draaien. Niet sexy. Maar hij vangt elk probleem op dat we in die drie pilots zagen, plus een paar die we sindsdien hebben gezien.

Drie pilots, drie verkeerde verhalen

Eén klant was een B2B SaaS met rond de €4M ARR. Eén was een regionaal e-commerce merk onder €15M. Eén was een zakelijke dienstverlener van ongeveer €9M. Ze hadden niks gemeen, behalve dit: iemand had hun Google Tag Manager container in de afgelopen achttien maanden aangeraakt, het project als klaar gemarkeerd, en was nooit teruggekomen. Daarna ging een marketing-attributie agent bovenop die container zitten en begon wekelijkse memo's te schrijven die de CFO uiteindelijk uitprintte en met rood omcirkelde.

De agents waren niet het probleem. De data was het probleem. De agents waren extreem zelfverzekerd over het verkeerde antwoord, en dat is de ergste faalmodus die er is.

Waarom GA4 als waarheid leest, maar het niet is

GA4 is geen grootboek. Het is een meetplatform dat gaten modelleert wanneer het ze niet kan observeren. Twee mechanismen doen het meeste van het liegen.

Het eerste is Google Consent Mode v2. Wanneer een bezoeker cookies weigert, sturen Google's basic en advanced consent modes alsnog cookieloze signalen naar GA4, die vervolgens gedragsmodellering gebruikt om af te leiden wat die bezoeker waarschijnlijk deed. In de EU, afhankelijk van het ontwerp van je cookie-banner, modelleer je 30 tot 70 procent van je conversies. Die fractie staat niet gelabeld als 'modelled' in de standaard GA4-rapporten. Hij staat in dezelfde kolom als geobserveerde conversies.

Het tweede is data-driven attribution daarbovenop. GA4 verdeelt credit over touchpoints met een model dat getraind is op je eigen conversies. Als die conversies zelf gemodelleerd zijn, zijn de credit-gewichten downstream van twee lagen inferentie. Een marketing-attributie agent die de GA4 API leest, krijgt de output van beide lagen, zonder vlag die aangeeft welke cijfers geobserveerd zijn en welke geraden.

Let op

Als de weigeringsratio van je cookie-banner boven de 40 procent ligt en je GA4 reporting identity op 'blended' staat, laat je het bestuur een cijfer zien dat deels synthetisch is. Niks daarvan is technisch fout. Alles daarvan is onzichtbaar.

De pre-offerte audit, item voor item

De audit kost ongeveer drie werkdagen voor een normale mid-market setup. Het levert een gedeeld doc op met een groen of rood verdict per item, plus een lijst remediation-tickets. We starten de attributie-agent pilot niet voordat het doc minimaal oranje is over de hele linie.

1. Consent state en conversie-modellering

Trek de GA4 explorations-view erbij en segmenteer op consent state. Als het 'denied' segment meer dan 20 procent van de sessions is en je reporting identity staat op 'blended', zet de property dan op 'observed' voor de duur van de audit. Je wilt zien wat GA4 daadwerkelijk gemeten heeft, voordat je iets bovenop de gemodelleerde cijfers laat draaien.

Vergelijk daarna observed conversies met modelled conversies over dezelfde periode. Als het gat groter is dan 15 procent, leest de agent vooral inferentie. Noteer het percentage. Vertel het de agent in zijn system prompt. Laat hem niet standaard aannemen dat elke omzetregel geobserveerd is.

2. Server container drift

Als de klant server-side Google Tag Manager draait, open dan de server container en check de deployed versie tegenover de workspace. Twee keer al vonden we een workspace met zes goedgekeurde maar niet-gedeployde wijzigingen, inclusief een nieuwe purchase tag waarvan het marketingteam dacht dat hij al twee maanden live stond.

Check daarna de daadwerkelijke Cloud Run (of App Engine, of self-hosted) instance. Bevestig dat de URL waar de web container naartoe pingt overeenkomt met de URL waarvandaan de server container serveert. We vonden ooit een server container die een jaar lang op een preview URL draaide omdat het migratie-ticket gesloten was voor de DNS-wijziging.

3. Identity stitching over domeinen

De meeste mid-market sites hebben minstens twee domeinen in de journey: marketingsite en app, shop en checkout, hoofdsite en een gehoste booking tool. Open de GA4 cross-domain configuratie. Bevestig dat beide domeinen erin staan en dat de linker-parameter wordt doorgegeven in de URL tussen ze. Open een incognito venster. Klik een CTA. Kijk in de network tab. Als _gl= niet op de bestemmings-URL staat, splitten je sessions.

Sessions die splitten zien eruit als een veel grotere top-of-funnel en een veel lager conversiepercentage. De agent leest dat als een paid-channel probleem en zegt dat je het budget moet verlagen. Het echte probleem is één ontbrekende regel GTM-config.

4. Omzet: GA4 versus het ordersysteem

Dit is de check met de hoogste waarde. Kies een afgesloten maand. Trek de totale omzet uit GA4 voor die maand. Trek de totale omzet uit het source-of-truth systeem: de facturentabel, de Shopify-export, het Stripe dashboard, de ERP. Vergelijk.

Als het gat groter is dan 8 procent in welke richting dan ook, moet de attributie-agent nog niet draaien. Achterhaal waar het gat vandaan komt voordat je een kwartaal lang de channel mix gelooft.

-- De query die we altijd draaien op dag één van een audit
-- Vergelijkt GA4 purchase events met het ordersysteem over de laatste 30 dagen
with ga4 as (
  select date(event_date) as day,
         sum(ecommerce.purchase_revenue) as ga4_rev
  from `project.analytics_xxxxxx.events_*`
  where event_name = 'purchase'
    and _table_suffix between
        format_date('%Y%m%d', date_sub(current_date(), interval 30 day))
        and format_date('%Y%m%d', current_date())
  group by day
),
orders as (
  select date(created_at) as day,
         sum(total_excl_tax) as order_rev
  from raw.orders
  where created_at >= current_date() - 30
    and status in ('paid', 'shipped', 'fulfilled')
  group by day
)
select g.day,
       ga4_rev,
       order_rev,
       safe_divide(ga4_rev - order_rev, order_rev) as gap
from ga4 g
join orders o using (day)
order by day;

Als het dagelijkse gat heftig schommelt, dan heb je een tag die afgaat bij reloads van de confirmation-page, of een bedankpagina-template die zijn purchase tag verloor tijdens een theme-update, of een one-page checkout die dubbel afvuurt. Elk van die dingen is te fixen. Geen ervan is te fixen vanuit een attributie-agent.

5. Valuta, refunds, deelbetalingen

GA4 slaat e-commerce omzet op in één valuta per property. Als de klant verkoopt in EUR en USD en GBP, vraag dan welke wordt doorgegeven. We hebben properties gezien waar de dataLayer hardcoded op EUR stond bij een USD-checkout, omdat de originele implementatie Nederlands was en niemand het aanpaste toen de US-shop openging.

Refunds zijn nog erger. De meeste GTM-implementaties sturen het refund event helemaal niet terug naar GA4. Omzet blijft accumuleren. De attributie-agent denkt dat elke euro die ooit de funnel binnenkwam er nog steeds zit. Na drie maanden zit er in de GA4 channel mix een phantom lift van een paar procent die finance niet kan vinden.

6. Bot-, intern en preview-verkeer

Open de data-stream instellingen. Check het internal-traffic IP-filter. De meeste properties die we auditen hebben een filter dat vier kantoorverhuizingen geleden is opgezet. Check daarna of de staging- en preview-omgevingen events naar de production-property sturen. Meestal wel.

Een verrassend vaak voorkomend patroon: het bureau dat de site bouwde draait uptime checks vanaf een Duits datacentrum, en die checks worden geteld als Direct / (none) sessions in Düsseldorf. De agent adviseert om vol op de Duitse markt in te zetten. Niemand in Düsseldorf heeft ooit van het merk gehoord.

Het data contract dat de agent eigenlijk nodig heeft

Zodra de audit oranje of groen terugkomt, schrijven we een contract van één pagina tussen GA4 en de attributie-agent. Dat ziet er zo uit.

  • Revenue source of truth is de order- of facturentabel, niet GA4. De agent joint op transaction_id.
  • GA4 wordt alleen gebruikt voor gedrag: sessions, source / medium, landing page, content group. Er stroomt geen geld vanuit GA4 het attributiemodel in.
  • Consent state is een kolom, geen filter. De agent ziet de gemodelleerde fractie en weegt die expliciet lager wanneer hij zijn wekelijkse memo schrijft.
  • Refunds worden op regelniveau afgetrokken, niet op channelniveau verrekend, zodat attributiewindows niet verstoord raken door late retouren.
  • Eén canonieke user key: meestal een gehashte email uit het ordersysteem, terug gejoined op de GA4 client_id via een server-side identity event.

Niet sexy. Wel het verschil tussen een attributie-agent die finance een cijfer geeft dat ze vertrouwen, en eentje die na een kwartaal wordt uitgezet omdat de CFO de memo uitprintte en met rood omcirkelde.

Attributie-agents verzinnen geen slechte data. Ze erven die. Als je er eentje bedraadt op een tag-setup die de omzet al 12 procent verkeerd leest, heb je een hele zelfverzekerde leugenaar gebouwd.

Wat we doen als de audit hard faalt

Ongeveer een derde van de keren komt de audit te rood terug om binnen de pilotperiode te repareren. In dat geval starten we de agent niet. We offreren de remediation als een apart project van twee tot vier weken, leveren het op, en pas dan zetten we de agent aan. Een minder spannende eerste maand voor de klant. Een veel interessanter tweede kwartaal, als de channel-mix cijfers in de wekelijkse memo daadwerkelijk overeenkomen met de bankrekening.

Toen we eerder dit jaar de marketing-attributie stack bouwden voor een Nederlandse B2B-distributeur, liepen we ertegenaan dat GA4 negen maanden lang USD had geregistreerd op een EUR-checkout. We bouwden de dataLayer opnieuw op, behandelden de ordertabel als waarheid, en zetten pas toen de AI-agents erbovenop, die in het tweede kwartaal binnen 1,4 procent overeenkwamen met finance.

Het kleinste wat je vandaag kunt doen: draai de SQL hierboven op je eigen GA4 en je eigen ordertabel over de laatste dertig dagen. Als het gat groter is dan 8 procent, neem dan nog geen attributie-agent aan boord. Fix eerst het gat.

Kern

Als GA4-omzet en je facturenboek meer dan 8 procent uit elkaar liggen over een afgesloten maand, fix dan eerst de data voordat je een attributie-agent offreert.

FAQ

Hoe lang duurt een GA4-attributie audit?

Ongeveer drie werkdagen voor een normale mid-market setup. Het grootste deel is GA4-omzet vergelijken met het ordersysteem, dag voor dag, en de gaten traceren.

Wat is een acceptabel gat tussen GA4-omzet en het facturenboek?

Onder de 8 procent in welke richting dan ook over een afgesloten maand. Daarboven zit het attributiemodel op kromme data en leest een agent het als channel-signaal.

Hebben we server-side tagging nodig voordat attributie kan werken?

Niet strikt. Maar als je het hebt, audit dan de deployed versie tegenover de workspace. Niet-gedeployde wijzigingen en oude preview-URLs zijn twee van de meest voorkomende fouten die we zien.

Waarom niet gewoon vertrouwen op het data-driven attribution model van GA4?

Omdat bij EU-verkeer met hoge cookie-weigerratio's een groot deel van de conversies gemodelleerd is, niet geobserveerd. Het attributiemodel zit dan bovenop inferentie, niet bovenop meting.

ai agentsintegrationsworkflowarchitectureoperationsstrategy

Iets bouwen?

Start een project