Diepteanalyse · 11 min lezen

Hoe je ordermarge importeert in Google Ads als je webshop geen klik-ID opslaat

Je webshop slaat de Google Click ID niet bij elke bestelling op. Haal deze uit de GA4-export naar BigQuery en stuur de ordermarge via de API naar Google Ads.

Een chef richt een klein gerecht aan op een bord met het label Margin, terwijl een kok achter hem een overvol bord met het label Revenue vasthoudt dat wordt afgewezen. Een kleine robotober met het naamplaatje Google Ads wacht bij de uitgifte.
De serieuze feiten zijn echt — de artikelcovers niet.

Kort gezegd: Bij de gebruikelijke API-import van bestellingen in Google Ads moet de Google Click ID bij elke bestelling zijn opgeslagen. Een standaard webshopplatform slaat deze vaak niet op. Je hoeft deze niet in de webshop op te slaan. De GA4-export naar BigQuery bevat de klik al bij elk bezoek vanuit een advertentie. Je koppelt bestellingen aan klikken in BigQuery. Daarna stuur je de marge van elke bestelling waarvoor toestemming is gegeven via de Data Manager API. Je stuurt de klik-ID of een gehasht e-mailadres en een gehasht telefoonnummer mee. Annuleringen stuur je via de Google Ads API. Er verandert niets aan de website.

Gratis download

Wil je de briefing voor Claude Code direct hebben?

Claude Code of een developer schrijft de volledige import met dit instructiepakket. Laat je e-mailadres achter en het bestand is van jou. Je kunt ook verder lezen.

Eén bestand, één lijst. Ik schrijf alleen als er iets te lezen valt.

Google Ads optimaliseert campagnes op de omzet uit de websitetag. Omzet is geen winst. De meeste webshops verkopen hun eigen huismerkproducten naast artikelen van leveranciers. In mijn ervaring liggen de marges van deze producten grofweg tussen 20 en 60 %. Als Google Ads de biedingen op omzet baseert, tellen twee bestellingen met dezelfde omzet even zwaar, zelfs als de ene een lage marge heeft en de andere een hoge. Vaak wordt 3 tot 10 % van de bestellingen geannuleerd. De websitetag registreert deze annuleringen niet. De conversie behoudt daardoor zijn volledige waarde.

Je wilt geen marge via de websitetag sturen. Iedereen kan de gegevens van de tag in de browser lezen. Dit geldt ook voor je concurrenten. Daarom gaat marge via de API naar Google Ads.

De gebruikelijke API-import heeft de Google Click ID van elke bestelling nodig. Bij een standaardplatform zoals Shopify of Shoptet bepaal je niet hoe de checkout een bestelling opslaat. De bestelling heeft geen veld voor de klik-ID. Shopify bewaart bijvoorbeeld alleen de landingspagina van het eerste en laatste bezoek van de klant. Die pagina kan de klik-ID bevatten, maar alleen als de bezoeker tracking toestaat. Zonder maatwerkcode of een app die de klik-ID vastlegt, is deze niet voor elke bestelling betrouwbaar beschikbaar. Je hoeft deze niet in de webshop op te slaan. De GA4-export naar BigQuery slaat de klik al op bij elk bezoek vanuit een advertentie.

Belangrijkste punten tl;dr
  • Wat je precies stuurt. Voor elke bestelling stuur je het bestelnummer, de marge als waarde, de tijd, de klik, het gehashte e-mailadres en het gehashte telefoonnummer, de toestemming en of de klant nieuw of terugkerend is.
  • Annuleringen gaan via de oudere Google Ads API. De nieuwere Data Manager API kan een conversie niet intrekken. Nieuwe bestellingen en margewijzigingen gaan via de Data Manager API.
  • Stuur elke bestelling waarvoor toestemming is gegeven. Beperk dit niet tot bestellingen met een klik. Bestellingen zonder Google Click ID verstuur je met het gehashte e-mailadres en het gehashte telefoonnummer. Google koppelt een deel hiervan via verbeterde conversies.
  • De klik komt uit de GA4-export naar BigQuery. Er wordt niets nieuws opgeslagen in de webshop. De export is gratis. BigQuery kost een paar dollar per maand voor een doorsnee webshop.

Wat je nodig hebt

  • GA4 op de website van de webshop, met registratie van aankopen inclusief bestelnummer
  • de bestellingen van de webshop met inkoopprijzen, uit een orderexport, de API van het platform of de database
  • een Google Cloud-project
  • beheerderstoegang tot het Google Ads-account
  • een plek om één taak per dag uit te voeren

Niemand hoeft de website of de checkout aan te passen. De klik komt uit GA4. GA4 draait al op de site. De marge komt uit bestelgegevens die de webshop al bewaart. Standaardplatforms exporteren bestellingen meestal met inkoopprijzen. Controleer of jouw platform dit doet.

Stap 1: Maak het Google Cloud-project aan

De namen van pagina’s en knoppen in de Google Cloud-console laat ik in het Engels. Eén Cloud-project bevat de GA4-export en geeft toegang tot beide API’s. Als GA4 al naar een project exporteert, gebruik je dat project.

  1. Als je nog geen factureringsaccount hebt, open je Billing in de Google Cloud-console en maak je er een aan. Een nieuw factureringsaccount heeft eerst de status Free Trial.
  2. Open de Overview-pagina van het factureringsaccount. Als er Free trial account staat, klik je daar of op de Welcome-pagina van de console op Activate en bevestig je dit in het dialoogvenster.
  3. Open Manage resources, klik op Create project, voer een naam in en kies dat factureringsaccount. Bij een persoonlijk account blijft de organisatie op No organization staan. Klik op Create.
  4. Open Library in APIs & Services, zoek BigQuery API en klik op Enable. Doe hetzelfde voor Data Manager API en Google Ads API.

Het project heeft een betaald factureringsaccount nodig. Google vermeldt momenteel in de documentatie dat aanvragen voor toegang tot de Google Ads API worden afgewezen als het project de status Free Trial heeft of het factureringsaccount is opgeschort of uitgeschakeld. Zonder factureringsaccount draait BigQuery als een sandbox. Tabellen vervallen daar na 60 dagen.

De GA4-export zelf is gratis. BigQuery brengt kosten in rekening voor opslag en query’s. In mijn ervaring komt dit neer op een paar dollar per maand voor een doorsnee webshop. Om het werkelijke bedrag te zien, open je Billing, selecteer je het factureringsaccount, open je Reports en filter je op dit project.

Controle. De pagina Enabled APIs & services toont alle drie de API’s.

Stap 2: Zet de GA4-export naar BigQuery aan

In deze stap haal je de Google Click ID op zonder iets in de webshop te veranderen. Zet de export vroeg aan. De export bevat alleen de dagen na de koppeling. De Help van Google beschrijft geen manier om eerdere dagen te exporteren.

Je hebt de rol Bewerker nodig op de GA4-property en de rol Eigenaar op het Cloud-project. Controleer in Google Ads of automatische tagging aanstaat. Je vindt dit onder Beheerder, Accountinstellingen, Autotagging. Zonder deze instelling bevatten advertentieklikken geen Google Click ID. Als de instelling uitstaat, vink je Tag de URL waarop mensen doorklikken vanuit mijn advertentie aan en klik je op Opslaan.

  1. Open Beheerder in GA4. Klik onder Productkoppelingen op BigQuery-koppelingen en daarna op Koppelen.
  2. Klik op Een BigQuery-project kiezen, selecteer het project uit Stap 1 en klik op Bevestigen.
  3. Kies de gegevenslocatie. Kies voor een webshop in de EU een locatie in de Europese Unie (de EU-multiregio of een EU-regio) en noteer deze. De query’s en statustabellen van de import gebruiken dezelfde locatie. Als het project al een dataset voor deze property heeft, staat de locatie vast. Je kunt deze niet wijzigen. Klik op Volgende.
  4. Klik op Gegevensstreams en gebeurtenissen instellen, selecteer de webstream van de webshop en klik op Klaar.
  5. Laat Advertentie-ID’s opnemen voor mobiele-app-streams uitstaan. Een webshop heeft dit niet nodig.
  6. Kies Dagelijks en laat Streaming uitstaan.
  7. Klik op Volgende en daarna op Sturen.

Dagelijks is genoeg. De import leest de dagelijkse tabellen events_YYYYMMDD. Streaming voegt de gegevens van vandaag binnen enkele minuten toe. Een dagelijkse taak gebruikt die gegevens niet. Streaming kost bovendien extra.

De limiet van 1 miljoen. Een standaard GA4-property kan 1 miljoen gebeurtenissen per dag exporteren met Dagelijks. Als de property hier steeds overheen gaat, pauzeert Google de export. Google vult de ontbrekende dagen niet aan. Als je in de buurt van de limiet komt, sluit je gebeurtenissen uit die je niet nodig hebt. Denk aan scroll of user_engagement in het venster voor gegevensstreams. Behoud purchase, page_view en session_start. Deze bevatten de bestelling, de landingspagina en de klik. Als dat niet genoeg is, heeft Streaming geen limiet. De import moet dan wel worden aangepast. De Help van Google suggereert ook een upgrade naar Analytics 360.

De eerste weken. Klikken van voor de koppelingsdatum staan niet in BigQuery. Gedurende de eerste 30 dagen stuurt de import daarom meer bestellingen met alleen het gehashte e-mailadres en het gehashte telefoonnummer.

Controle. Gegevens zouden binnen 24 uur moeten binnenkomen in een BigQuery-dataset analytics_<property-ID>. Elke dag wordt er een tabel met de gegevens van de vorige dag toegevoegd. Dit gebeurt meestal in de vroege middag in de tijdzone van de property. Soms verschijnt de tabel later op de dag of de volgende dag.

Stap 3: Stel de toegang tot beide API’s in

Nieuwe bestellingen en margewijzigingen gaan via de Data Manager API. Annuleringen gaan via de oudere Google Ads API. De Data Manager API kan een conversie namelijk niet intrekken. Beide gebruiken hetzelfde project en dezelfde aanmelding.

Ik programmeer al twaalf jaar met de Google Ads API. In 2026 is de toegang veranderd. Google heeft developer tokens op 9 september 2026 afgeschaft. De toegang hoort nu bij het Cloud-project. Een nieuw project heeft het toegangsniveau Test. Dat niveau werkt alleen met testaccounts. Voor je echte account heb je Explorer nodig.

  1. Open de pagina Google Ads API Overview in de Cloud-console en controleer of het toegangsniveau Test is.
  2. Vouw Upgrade access level uit en controleer of het volgende niveau Explorer is.
  3. Klik op Apply for access, vul het korte formulier in en wacht op het antwoord van Google per e-mail. De Overview-pagina toont Explorer pas na goedkeuring.

Explorer staat 2.880 bewerkingen per dag toe in echte accounts en vereist geen merkverificatie. Google keurt de aanvraag in de meeste gevallen automatisch goed. Volgens de documentatie kan een aanvraag worden afgewezen als het factureringsaccount de status Free Trial heeft, is opgeschort of is uitgeschakeld. Controleer de reden in de e-mail. Herstel het factureringsaccount. Wacht een paar minuten en dien de aanvraag voor Explorer opnieuw in.

De aanmelding. Stel voor een gebruikersaccount OAuth in de Cloud-console in onder Google Auth Platform.

  1. Vul op Branding de appnaam, een e-mailadres voor gebruikersondersteuning en een e-mailadres waarop de ontwikkelaar bereikbaar is in. Klik daarna op Create.
  2. Klik onder Data Access op Add or remove scopes en voeg Data Manager API, Google Ads API en BigQuery API toe. De import gebruikt dezelfde aanmelding om de GA4-export te lezen. Klik op Update en daarna op Save.
  3. Kies op Audience alleen Internal als het Cloud-project bij jouw Google Workspace-organisatie hoort en alle gebruikers tot die organisatie behoren. Kies anders External en klik op Publish app. De status is dan In production.

Laat de status nooit op Testing staan. De Data Manager-handleiding van Google gebruikt de status Testing wel voor ontwikkeling. Als de app de status Testing heeft, verlopen de inloggegevens van een aanmelding na 7 dagen. De dagelijkse taak stopt dan na een week. Niemand krijgt hier bericht van, tenzij de taak zo is ingesteld dat bij fouten een waarschuwing wordt verstuurd. Een gepubliceerde app die Google niet heeft geverifieerd, toont een waarschuwing. Je ziet deze waarschuwing voor een ongeverifieerde app eenmalig bij de eerste aanmelding. Klik voor eigen gebruik op Advanced en ga door. De waarschuwing betekent niet dat er iets mis is.

Maak de inloggegevens aan.

  1. Als de import op een server of je eigen computer draait, maak je een OAuth-client van het type Desktop app aan op Clients. Download het bijbehorende JSON-bestand. Google Apps Script meldt zich aan via het script zelf. Het heeft dit bestand niet nodig.
  2. Geef het JSON-bestand aan degene die de import bouwt (Stap 5). Diegene gebruikt het JSON-bestand om eenmalig in te loggen. Daarbij worden inloggegevens opgeslagen, die de import automatisch vernieuwt.

Op een server kun je in plaats van een gebruikersaccount ook een serviceaccount gebruiken. Maak het serviceaccount aan en geef het de rollen Service Usage Consumer en BigQuery Job User op het project. Geef het de rol BigQuery Data Viewer op de GA4-dataset en de rol BigQuery Data Editor op de eigen dataset van de import. Voeg het e-mailadres daarna toe in Google Ads zoals hieronder beschreven.

Voeg het account vervolgens toe in Google Ads onder Beheerder, Toegang en beveiliging. Gebruik de plusknop en kies het toegangsniveau Standaard. Klik voor een persoon op Uitnodiging sturen. Laat die persoon de uitnodiging accepteren. Voer voor een serviceaccount het e-mailadres in en klik op Account toevoegen. Er wordt geen uitnodiging verstuurd. Gebruik een account dat bij het bedrijf blijft. De import stopt namelijk wanneer het account wordt verwijderd.

Controle. De Overview-pagina toont Explorer. In Stap 6 test je beide API’s met een validateOnly-aanroep naar Data Manager en een testaanroep voor een annulering naar de Google Ads API.

Stap 4: Maak de conversieactie voor marge aan

Maak een aparte conversieactie van het type import aan voor marge. Hier zet je ook verbeterde conversies aan. Hiermee kan Google bestellingen zonder klik koppelen.

  1. Klik in Google Ads op Doelen, daarna op Conversies en tot slot op Overzicht.
  2. Klik op + Conversieactie maken en selecteer Offline conversies.
  3. Kies bij de vraag naar een gegevensbron voor Deze stap overslaan en later een gegevensbron instellen. De import stuurt de gegevens via de API.
  4. Definieer daarna de actie zelf in de wizard. Kies de categorie Aankoop, geef de actie een naam, klik op Opslaan en doorgaan en rond af met Akkoord en afronden.

De Help van Google zegt dat een nieuwe offline actie pas actief is wanneer er een gegevensbron is gekoppeld. In de praktijk is de API-upload die bron. De test met tien bestellingen in Stap 6 is het bewijs. Als de actie de volgende dag geen waarde toont, open je de actie, klik je op Gegevensbronnen bewerken en controleer je deze.

Open de actie, klik op Instellingen bewerken en stel het volgende in:

  • Waarde op Verschillende waarden gebruiken voor elke conversie. Anders gebruikt Google de standaardwaarde in plaats van je marge. Het veld vereist nog steeds een standaardwaarde. Voer een willekeurige kleine waarde in. Google gebruikt deze alleen wanneer een gebeurtenis geen waarde bevat.
  • Aantal op Elke. Elke bestelling is een aparte verkoop.
  • Doorklikconversieperiode op 90 dagen. Bestellingen waarvan de klik weken eerder plaatsvond, tellen zo nog steeds mee.
  • Attributiemodel op Data-driven waar dit wordt aangeboden. Selecteer dit of behoud het als het al is ingesteld.

Klik op Opslaan. Open daarna in Overzicht de rij met de margeactie en klik op Doel bewerken. Kies onder Optimalisatie van conversieactie voor Secundair (alleen observeren) en klik op Opslaan. Zo heeft de marge geen invloed op de biedingen voordat je de marge hebt gecontroleerd. Een campagne met een aangepast doel gebruikt elke actie in dat doel voor het bieden. Dit geldt ook voor secundaire acties. Houd de margeactie daarom uit aangepaste doelen.

Klik voor verbeterde conversies op Doelen, daarna op Instellingen, vouw Gebruik van klantgegevens uit, vink Verbeterde conversies aanzetten aan en klik op Akkoord en opslaan. Bekijk daarna de voorwaarden voor klantgegevens en klik op Akkoord en doorgaan. Als je deze voorwaarden niet accepteert, gebruikt Google het gehashte e-mailadres en het gehashte telefoonnummer niet.

Kopieer de actie-ID die op het tabblad Details naast ID van conversietype staat. Noteer ook de 10-cijferige ID van het Google Ads-account dat eigenaar is van de actie. Google raadt aan om 4 tot 6 uur te wachten voor de eerste upload. De volgende dag is dus een geschikt moment voor de eerste verzending.

Controle. De conversiebron van de actie is Website (importeren uit klikken). Verbeterde conversies zijn aangevinkt onder Gebruik van klantgegevens.

Gratis download

Laat de code schrijven met het instructiepakket

De query voor het koppelen van de klik, de margeberekening en de dagelijkse correcties staan in één bestand voor Claude Code of een developer. Laat je e-mailadres achter en het bestand is van jou.

Eén bestand, één lijst. Ik schrijf alleen als er iets te lezen valt.

Stap 5: Zoek de advertentieklik voor elke bestelling in BigQuery

Vanaf hier bouwt Claude Code of een developer de import met het downloadpakket. De onderstaande stappen beschrijven wat de import doet en wat jij controleert.

Deze stap vervangt het opslaan van de klik in de webshop. Je koppelt elke bestelling aan het bijbehorende bezoek in de GA4-export.

Zoek de GA4-aankoop waarvan ecommerce.transaction_id gelijk is aan het bestelnummer van de webshop. Vergelijk het bestelnummer en ecommerce.transaction_id als tekst en verwijder alleen spaties aan het begin en einde. Een bezoek wordt geïdentificeerd door de combinatie van user_pseudo_id en ga_session_id. Neem de laatste Google Click ID of wbraid die vóór de aankoop tijdens het aankoopbezoek is vastgelegd. Als in dat bezoek geen van beide is vastgelegd, zoek je in eerdere bezoeken van dezelfde bezoeker. Zoek op user_pseudo_id, tot 30 dagen vóór de aankoop. Kies uit die eerdere bezoeken de laatst geregistreerde klik-ID. Als één gebeurtenis beide bevat, gebruik je de Google Click ID.

De Google Click ID staat in collected_traffic_source.gclid. wbraid is de klik-ID voor de iPhone. Als de geëxporteerde pagina-URL in page_location de wbraid-parameter behoudt, leest de query deze daaruit. Controleer dit in je gegevens.

De volledige query, inclusief gebeurtenissen die laat binnenkomen, staat in het instructiepakket.

Controle. Neem vijf bestellingen uit de webshop waarvan de GA4-aankoop op een van de geëxporteerde dagen valt. De query moet die aankoop voor elke bestelling vinden. De bestelnummers moeten teken voor teken overeenkomen. Met dezelfde query zie je voor hoeveel aankopen een klik wordt gevonden.

Stap 6: Stuur de bestellingen met marge naar de Data Manager API

In deze stap stuur je de volledige set gegevens voor elke bestelling via de Data Manager API met de methode events:ingest. Eén verzoek kan maximaal 2.000 bestellingen bevatten.

De marge is de brutomarge van de bestelling zonder btw. Vermenigvuldig per artikel de prijs na artikelkorting met het aantal stuks dat de klant heeft gehouden. Trek eventuele bestelkortingen en de totale inkoopprijs van die artikelen van het resultaat af. Laat verzend- en betalingskosten weg. Behandel een ontbrekende inkoopprijs niet als nul. Zo’n bestelling verstuur je pas als alle ontbrekende inkoopprijzen beschikbaar zijn.

Elke gebeurtenis bevat deze velden:

  • transactionId, het bestelnummer
  • conversionValue en currency, de marge en de valuta
  • eventTimestamp, de besteltijd met een tijdzone-offset
  • eventSource, WEB
  • adIdentifiers, de Google Click ID of wbraid uit Stap 5
  • userData, het gehashte e-mailadres en het gehashte telefoonnummer
  • consent, met adUserData verleend
  • userProperties.customerType, NEW of RETURNING, als eerdere bestellingen van de webshop dit aantonen
{
  "transactionId": "ORDER-EXAMPLE-000",
  "eventTimestamp": "2026-01-01T12:00:00+01:00",
  "eventSource": "WEB",
  "conversionValue": 123.45,
  "currency": "EUR",
  "adIdentifiers": { "gclid": "INVALID-EXAMPLE-CLICK-ID" },
  "userData": {
    "userIdentifiers": [
      { "emailAddress": "sha256-hex-of-the-normalised-email" },
      { "phoneNumber": "sha256-hex-of-the-e164-phone-number" }
    ]
  },
  "consent": { "adUserData": "CONSENT_GRANTED" },
  "userProperties": { "customerType": "NEW" }
}

Alle waarden in het voorbeeld zijn verzonnen. Het voorbeeld is één gebeurtenis, geen volledig verzoek. De import plaatst de gebeurtenis in een verzoek samen met de bestemming (de ID van het account dat eigenaar is van de actie, plus de actie-ID) en de codering. Normaliseer het e-mailadres en telefoonnummer volgens de opmaakregels van Google. Hash ze met SHA-256 en stel de encoding van het verzoek in op HEX.

Stuur elke bestelling waarvoor toestemming is gegeven, niet alleen die met een klik. De import stuurt elke bestelling die in aanmerking komt, waarvoor toestemming is gegeven en waarvoor minstens één identificatiegegeven beschikbaar is (klik-ID, e-mailadres of telefoonnummer). De import stuurt een bestelling zonder klik met het gehashte e-mailadres, het gehashte telefoonnummer of beide. Google koppelt een deel van deze bestellingen via verbeterde conversies. Google koppelt niet al deze bestellingen. Je kunt vooraf niet bepalen welke dat zijn. Een bestelling die geen klik-ID, geen gehasht e-mailadres en geen gehasht telefoonnummer heeft, kan niet worden gekoppeld. Deze sla je over.

Toestemming. Stuur een bestelling alleen als daarvoor toestemming voor ad_user_data is geregistreerd. Stuur ontbrekende toestemming nooit als geweigerd. De GA4-export bevat alleen privacy_info.ads_storage. Gebruik die waarde alleen als via je cookiebanner altijd tegelijk toestemming wordt gegeven voor ad_storage en ad_user_data. Dit controleer je in Tag Assistant. Haal toestemming anders uit de eigen administratie van de webshop. De webshop moet beoordelen of dat juridisch voldoende is.

De eerste verzending. De import kan een bestelling sturen zodra de dagelijkse GA4-tabel voor de dag van de bestelling bestaat. Dat is slechts de eerste voorwaarde. De import past ook de regels voor wachttijden uit het pakket toe.

  1. Stuur één batch naar Data Manager met validateOnly ingesteld op true. Stuur ook één annuleringsaanroep naar de Google Ads API met validateOnly. Google controleert ze en slaat niets op.
  2. Stuur tien echte bestellingen. Kies bij voorkeur recente bestellingen met een Google Click ID. Controleer de volgende dag of het verzoek is afgerond met SUCCESS. Controleer ook of de margeactie hun waarde toont in “Alle conv.waarde”. Secundaire acties verschijnen niet in de standaard Conversies-kolommen. De waarden staan in de accountvaluta. Als je een van deze tien bestellingen kunt annuleren, annuleer deze dan ook (Stap 7).
  3. Stel daarna in dat de import dagelijks wordt uitgevoerd en dat je bij fouten een waarschuwing krijgt.

Een reactie van events:ingest betekent alleen dat Google het verzoek heeft geaccepteerd. De import bewaart elke verzoek-ID. Het resultaat wordt bij de volgende uitvoering gelezen. Google heeft 30 minuten tot 24 uur nodig.

Stap 7: Stuur margewijzigingen en annuleringen elke dag

Elke dag vergelijkt de import elke verzonden bestelling met de status in de webshop.

Margewijziging. Stuur de opgeslagen gebeurtenis opnieuw naar de Data Manager API. Gebruik hetzelfde bestelnummer, dezelfde identificatiegegevens en bestemming, de nieuwe waarde en de toestemming die vandaag geldt. Als de klant de toestemming heeft ingetrokken, stuur je de bestelling niet opnieuw. Volgens de documentatie overschrijft Google de waarde. Het aantal conversies blijft gelijk. Controleer dit na de eerste wijziging.

Annulering. Stuur deze via de Google Ads API. Gebruik de methode UploadConversionAdjustments en het type RETRACTION, zonder waarde. De aankondiging van Google over het stopzetten van delen van de Google Ads API noemt alleen conversie-uploads. Annuleringen gingen op het moment van schrijven via de Google Ads API. Met je eerste annulering controleer je of dit voor jouw project werkt.

Stuur nooit nul of een negatieve waarde. De Help van Google over conversieaanpassingen zegt dat een waarde van 0 de conversie definitief intrekt. Een intrekking kan niet ongedaan worden gemaakt. Wat de Data Manager API met een nul doet, is niet gedocumenteerd. Stuur daarom nooit nul of een negatieve waarde. Als de marge van een bestelling daalt tot nul of lager, stuur je een annulering.

Timing. Stuur een annulering minstens 24 uur na de conversie en binnen 54 dagen. Volgens de Help van Google wordt een correctie die meer dan 7 dagen na de conversieregistratie binnenkomt niet gebruikt voor het bieden. Stuur correcties daarom dagelijks.

Limieten. Aanpassingen in de Google Ads API werken niet met wbraid. Je kunt de conversie van een bestelling die alleen met wbraid is verstuurd, dus niet intrekken. De import markeert zo’n annulering als onopgelost, met de reden wbraid. De documentatie van Google voor de Data Manager API vermeldt geen dergelijke limiet voor margewijzigingen. Controleer wel het resultaat van de eerste margewijziging in het account. Stuur een bestelling nooit opnieuw naar de Data Manager API nadat er voor die bestelling een annulering is geprobeerd. Google zou dit kunnen registreren als een nieuwe conversie. Deze kun je dan geen tweede keer annuleren.

Stap 8: Controleer of het werkt en beslis dan over bieden

Controleer in de eerste week elke dag vier dingen:

  1. De margeactie toont een waarde in “Alle conv.waarde (op conv.tijd)”. De margeactie toont niet alleen een aantal. Filter of segmenteer het rapport op conversieactie.
  2. Elk verzoek is afgerond met SUCCESS. Lees ook de waarschuwingen.
  3. “Alle conv. (op conv.tijd)” van de margeactie komt grofweg overeen met het aantal bestellingen dat je voor dezelfde dagen hebt verstuurd. Een duidelijk verschil is een reden om dit te onderzoeken. Het is geen bewijs dat de import een bestelling twee keer heeft verstuurd.
  4. Google accepteert de eerste annuleringsrij. Het is niet voldoende dat er geen foutmelding over toegang verschijnt.

Vergelijk de margeactie daarna met de actie van de websitetag op conversiedatum. Gebruik alleen gegevens voor dagen die minstens 3 dagen oud zijn. De twee acties kunnen verschillende aantallen rapporteren. Meet het verschil in jouw account.

Bieden op marge is een aparte beslissing. Dit doe je wanneer de waarden, annuleringen en verzoeken allemaal in orde zijn. Maak de margeactie dan primair. Maak op hetzelfde moment de omzetactie secundair en verwijder deze uit aangepaste doelen. Anders telt elke aankoop dubbel. Controleer ook of elke campagne het doel gebruikt dat de margeactie bevat. Herbereken ook het tROAS-doel. Marge is namelijk lager dan omzet.

Nog twee dingen om bij elke bestelling te sturen

Nieuwe of terugkerende klant. Vul userProperties.customerType (Stap 6) in vanuit de bestelgeschiedenis van de webshop. Een bestelling is NEW als er in de afgelopen 540 dagen geen eerdere, niet-geannuleerde bestelling met hetzelfde e-mailadres of klant-ID is geweest. Dit is de periode die Google aanbeveelt. De orderexport moet zo ver teruggaan. Als je dit niet kunt bepalen, stuur je het veld niet mee. Google gebruikt dit veld voor het doel om nieuwe klanten te werven. Zodra je campagnes de margeactie gebruiken voor hun biedingen (Stap 8), open je een zoekcampagne, Performance Max-, Shopping- of Demand Gen-campagne. Klik daarna op Campagne-instellingen. Vouw Klantacquisitie uit en selecteer Uw biedingen aanpassen om nieuwe klanten te werven.

Controle. Klik in de tabel Campagnes op Segmenteren en voeg Nieuwe versus terugkerende klanten toe. De verdeling moet grofweg overeenkomen met wat je hebt verstuurd. Het rapport begint op de dag dat je het doel aanzet.

Je eigen variabelen. Een vrije variabele voegt aan elke conversie een gegeven over de bestelling toe. Denk bijvoorbeeld aan B2B of B2C. Klik in Google Ads eerst op Doelen, daarna op Conversies, vervolgens op Vrije variabele en de plusknop. Voer een naam in kleine letters in en klik op Opslaan. De status moet Ingeschakeld zijn. De import stuurt de naam en waarde in customVariables van de gebeurtenis. Google negeert een variabele die niet in het account bestaat en toont geen foutmelding. Gebruik nooit een e-mailadres, telefoonnummer of naam als waarde. Google documenteert vrije variabelen voor rapportages, niet voor biedingen.

Controle. Klik in de tabel Campagnes op Segmenteren, selecteer Conversies, daarna Vrije variabele en kies je variabele. Elke waarde moet een eigen rij krijgen.

Neem het mee

Download het instructiepakket voor Claude Code

Het instructiepakket bevat de hele procedure als briefing voor Claude Code of een developer. Het bevat de controles voor de instellingen, de query voor het koppelen van de klik, de structuur van de gebeurtenis en de dagelijkse correcties. Het is geen kant-en-klaar programma. Laat je e-mailadres achter en het bestand is van jou.

Eén bestand, één lijst. Ik schrijf alleen als er iets te lezen valt.

FAQ

Moet mijn webshop de Google Click ID opslaan?

Nee. De GA4-export naar BigQuery slaat de klik op bij elk bezoek vanuit een advertentie. De import vindt deze daar via het bestelnummer. Vanuit de webshop heb je alleen de bestellingen met inkoopprijzen nodig.

Heb ik een developer token nodig?

Nee. Google heeft developer tokens op 9 september 2026 afgeschaft. De Data Manager API gebruikt er geen. De toegang tot de Google Ads API hoort nu bij een Google Cloud-project.

Levert de import view-through-conversies op?

Reken daar niet op. De conversieactie van de import is gebaseerd op klikken. Voor video documenteert Google alleen conversies na volledige weergave. Deze moeten binnen 14 dagen worden geüpload. Bij dagelijkse uitvoering blijf je binnen die termijn.

Wat je als eerste moet doen

  1. Maak vandaag nog het Cloud-project aan en zet de GA4-export naar BigQuery aan. De export heeft geen geschiedenis, dus zet deze zo vroeg mogelijk aan.
  2. Controleer in Tag Assistant of via je cookiebanner altijd tegelijk toestemming wordt gegeven voor ad_storage en ad_user_data.
  3. Bereken de marge van vijf bestellingen met de hand. Dit laat zien of je webshop een inkoopprijs heeft voor elk artikel.
Waar het allemaal om draait

Wil je dit niveau van inzicht in je eigen account?

Eén e-mail. Ik zeg je eerlijk of het de moeite waard is voor jouw setup.

Contact →
Gratis download

Download het instructiepakket voor Claude Code

Het instructiepakket bevat de hele procedure als briefing voor Claude Code of een developer. Het bevat de controles voor de instellingen, de query voor het koppelen van de klik, de structuur van de gebeurtenis en de dagelijkse correcties. Het is geen kant-en-klaar programma. Laat je e-mailadres achter en het bestand is van jou.

Eén bestand, één lijst. Ik schrijf alleen als er iets te lezen valt.