De vervelendste fout bij tracking is niet de pixel die stukgaat. Het is de pixel die er geïnstalleerd uitziet en niets doorstuurt.
Dat is precies wat er bij mij bijna gebeurde. Het script stond netjes in de head, het dashboard zei niets, en er kwam geen enkele gebeurtenis binnen. Drie dingen zaten in de weg, en geen van de drie gaf een foutmelding.
Hieronder staat de hele opzet, plus de lijst met gebeurtenisnamen die OpenAI accepteert. Die lijst staat nergens in hun documentatie. Ik heb hem uit hun eigen script gelezen.
Waarom je dit eerst doet
Zonder conversiemeting kan ChatGPT wel verkeer sturen, maar niet leren wie er converteert. Je campagne optimaliseert dan op clicks in plaats van op klanten, en je betaalt voor nieuwsgierige mensen zonder budget.
Belangrijker nog: als je conversie nooit binnenkomt, optimaliseert het algoritme richting niemand. Je verbrandt dan budget op precies de verkeerde mensen.
Stap 1. Maak een gegevensbron aan
In Ads Manager ga je naar Tools, dan Conversies. Je maakt eerst een gegevensbron aan, wat in andere platforms gewoon je pixel heet.

Let op het blokje tekst eronder. Automatische geavanceerde matching staat aan en herkent klantgegevens op je site, hasht die in de browser en stuurt ze door. Dat is precies waarom je hier ook even naar je cookiebanner moet kijken. Daar kom ik onderaan op terug.
De rechterkolom laat de vier stappen zien: gegevensbron, conversiegebeurtenis, implementeren, en koppelen aan een campagne.
Stap 2. Het script plaatsen
Na het aanmaken krijg je je Pixel-ID en het installatiescript.

OpenAI is hier specifiek over: zet het script in de head van je site, zo hoog mogelijk, en maar één keer per pagina.
Dat laatste is geen detail. Twee installatiescripts op dezelfde pagina en je telt alles dubbel.
En dan het probleem dat niemand noemt
Als je site pagina’s wisselt zonder de browser echt opnieuw te laten laden, en dat doen de meeste moderne sites, dan telt het script alleen die allereerste lading. Alle volgende pagina’s tellen niet mee.
Bij mij scheelde dat naar schatting tachtig procent van mijn paginaweergaven.
De oplossing is een page_viewed afvuren bij elke navigatie, niet alleen bij de eerste. Op een Astro-site met View Transitions hangt dat aan astro:page-load. Op een React- of Vue-site hang je het aan je router.
Stap 3. De conversiegebeurtenis
Nu maak je de gebeurtenis aan die je als conversie wil tellen.

Je kiest je gegevensbron, dan de basisgebeurtenis, dan een naam. De naam mag maximaal 30 tekens zijn.
Onderaan staat het attributievenster. Standaard staat het doorklikattributie-venster op 30 dagen. Dat bepaalt hoe lang na een klik een conversie nog aan je advertentie wordt toegeschreven. Voor een dienst met een lange beslistijd is dertig dagen redelijk. Verkoop je iets waar mensen dezelfde dag over beslissen, zet het dan korter, anders schrijf je verkopen aan je advertenties toe die er niets mee te maken hadden.
De gebeurtenisnamen die OpenAI accepteert
Dit is het stuk waar ik het meeste tijd in kwijt was. Je kunt niet zomaar een naam verzinnen. Het script van OpenAI accepteert een vaste lijst, en alles wat er niet in staat wordt stilletjes weggegooid. Geen foutmelding, geen waarschuwing, gewoon niets.
Ik heb hun script gelezen om de lijst compleet te krijgen:
| Gebeurtenis | Waarvoor |
|---|---|
page_viewed | Paginaweergave |
lead_created | Lead binnengekomen |
appointment_scheduled | Afspraak ingepland |
registration_completed | Registratie afgerond |
contents_viewed | Product of inhoud bekeken |
checkout_started | Afrekenen gestart |
items_added | Toegevoegd aan winkelwagen |
order_created | Bestelling geplaatst |
subscription_created | Abonnement afgesloten |
trial_started | Proefperiode gestart |
custom | Eigen gebeurtenis |
De code zelf is één regel. Die zet je op de plek waar de conversie echt gebeurt, dus niet naast je installatiescript.

oaiq("measure", "lead_created", { type: "customer_action" });
Bij mij hangt die aan het moment dat Cal.com een boeking bevestigt. Eén gebeurtenis per boeking. Ik had eerst appointment_scheduled gebruikt, maar mijn dashboard telde lead_created, dus dat moest gelijkgetrokken. Vuur er nooit twee tegelijk af, want dan telt elke boeking dubbel.
Stap 4. De Conversies-API, en wanneer je die niet nodig hebt
Er is ook een serverkant.

Je stuurt dan een POST naar https://bzr.openai.com/v1/events met je pixel-ID en een API-sleutel.
Voor de meeste bedrijven is dit voorlopig niet nodig. Het vraagt een server, en veel sites zijn gewoon statische bestanden zonder backend. De pixel dekt je.
Wat de API je later wel oplevert is dat je boekingen meetelt van mensen met een adblocker. Waard om op terug te komen als de cijfers van OpenAI merkbaar lager liggen dan wat je zelf in je agenda ziet.
Stap 5. De firewall, oftewel de stille moordenaar
Dit is de reden dat je pixel geïnstalleerd kan lijken terwijl er niets binnenkomt.
Als je site een beveiligingsbeleid heeft dat bepaalt welke externe scripts mogen laden, en de meeste serieuze sites hebben dat, dan blokkeert dat OpenAI standaard. Het script laadt niet, of het laadt wel maar mag niets versturen. Je ziet geen foutmelding op je site. Je ziet alleen een leeg dashboard.
Twee domeinen moeten erdoor:
bzrcdn.openai.com
bzr.openai.com
De eerste levert het script, de tweede ontvangt de data. Zet je er maar één op je lijst, dan werkt het half en dat is verwarrender dan wanneer het helemaal stukgaat.
Dit was bij mij het enige dat de pixel echt stil zou hebben gehouden.
Stap 6. Bewijzen dat het werkt
Niet aannemen. Controleren. Ads Manager heeft daar een tabblad voor: Gebeurtenisstroom.

Je klikt op Polling starten en laat het openstaan. Dan ga je in een ander tabblad naar je eigen site en klikt wat rond.

Daar staan ze. Twee keer page_viewed, met tijdstip, gegevensbron en het kanaal waarlangs ze binnenkwamen. Drie seconden uit elkaar, want dat was ik die van de ene pagina naar de andere klikte.
Dit is je bewijs. Zie je hier niets binnen een minuut, dan werkt je opzet niet, hoe netjes je code er ook uitziet.
Doe daarna hetzelfde met je echte conversie. Boek een afspraak bij jezelf, of vul je eigen formulier in, en kijk of er precies één lead_created verschijnt. Eén, niet twee.
Het stuk dat niemand leuk vindt: toestemming
De pixel plaatst een herkenningspunt zodra je pagina laadt. Doe je dat zonder dat de bezoeker daar ja op heeft gezegd, dan zit je in Nederland en de rest van de EU fout.
De regel is niet nieuw en niet specifiek voor OpenAI. De Europese privacytoezichthouders hebben bevestigd dat tracking pixels onder dezelfde regel vallen als cookies, ook als het je eigen domein is. Praktisch betekent dat: de pixel mag pas afvuren nadat iemand toestemming heeft gegeven, net als bij Meta of Google.
Twee dingen die daarbij vaak fout gaan.
De serverkant is geen ontsnapping. Gehashte mailadressen die je via de API doorstuurt blijven persoonsgegevens. Hashen is niet hetzelfde als anonimiseren.
En je kunt je niet verschuilen achter de verwerkersovereenkomst van OpenAI. In hun eigen voorwaarden staat dat jullie voor gewone conversiemeting onafhankelijke verwerkingsverantwoordelijken zijn, dus geen verwerker en verantwoordelijke. Dat betekent dat jouw toestemming jouw probleem is, en dat je OpenAI in je privacyverklaring moet noemen als ontvanger.
Ik ben geen jurist en dit is geen juridisch advies. Maar het is wel de reden dat ik dit stuk niet oversla.
De rest van de opzet, van account tot eerste advertentie, staat in de complete handleiding voor adverteren in ChatGPT. Voor de teksten zelf is er advertentietekst voor ChatGPT Ads.
Even snel: de hele checklist
- Gegevensbron aanmaken in Tools, dan Conversies
- Script in de
head, zo hoog mogelijk, één keer per pagina - Bij een site zonder volledige herlaadbeurt: zelf
page_viewedafvuren per navigatie - Conversiegebeurtenis aanmaken, attributievenster controleren
- Alleen een naam uit de vaste lijst gebruiken
bzrcdn.openai.comenbzr.openai.comtoestaan in je beveiligingsbeleid- Pixel achter je toestemmingsbanner zetten
- Gebeurtenisstroom openen en je eigen conversie testen
Punt 8 is de enige die echt telt. De rest kun je perfect doen en alsnog niets meten.
Veelgestelde vragen
Waarom komen er geen gebeurtenissen binnen in ChatGPT Ads?
Bijna altijd één van drie dingen: je beveiligingsbeleid blokkeert bzrcdn.openai.com of bzr.openai.com, je site laadt niet echt opnieuw bij navigatie dus telt alleen de eerste pagina, of je gebruikt een gebeurtenisnaam die niet op de vaste lijst staat. Geen van de drie geeft een foutmelding.
Welke gebeurtenissen accepteert de OpenAI-pixel?
page_viewed, lead_created, appointment_scheduled, registration_completed, contents_viewed, checkout_started, items_added, order_created, subscription_created, trial_started en custom. Andere namen worden weggegooid.
Heb ik de Conversies-API nodig?
Niet als je site geen backend heeft. De pixel is genoeg om te beginnen. De API is nuttig als je vermoedt dat adblockers conversies wegvangen.
Hoe lang is het attributievenster?
Standaard 30 dagen na een klik. Je kunt dat aanpassen bij het aanmaken van de conversie.
Moet de pixel achter een cookiebanner?
Ja, als je bezoekers uit de EU krijgt. De pixel plaatst een herkenningspunt bij het laden van de pagina, en dat valt onder dezelfde toestemmingsregel als andere marketingpixels.
Ik heb dit voor mijn eigen site opgezet en doe het nu ook voor een paar andere bedrijven, om erachter te komen of dit kanaal iets oplevert. Loop je vast op de meting, of wil je gewoon dat iemand het in één keer goed neerzet, plan even een gesprek.