Tracking für ChatGPT Ads besteht aus drei Teilen: dem OpenAI-Pixel oaiq im Browser, optional der Conversions API auf dem Server und UTM-Parametern für GA4. Die Zuordnung zum Klick läuft über die Click-ID oppref, die OpenAI bei jedem Anzeigenklick selbst an die URL hängt. In der Schweiz lädt das Pixel erst nach der Marketing-Einwilligung.

Der Einbau per Google Tag Manager steht Schritt für Schritt in meiner Anleitung zum ChatGPT-Ads-Setup. Dieser Post geht tiefer: welche Events, welche Werte, wann sich die Conversions API lohnt, wie GA4 bezahlten und organischen ChatGPT-Traffic trennt und wie du prüfst, ob alles ankommt. Stand ist November 2026, Grundlage sind die Entwicklerdoku von OpenAI und meine Erfahrung aus der Praxis.

Die Bausteine im Überblick

BausteinWas es machtWo es läuftAufwand
Pixel oaiqmisst Events im Browser, liest oppref aus der URL, setzt First-Party-CookiesWebsite, meist per GTMgering
Image TagPixel ohne JavaScript, ein Event pro RequestWebsite, z. B. Danke-Seitegering
Conversions APIschickt Events vom Server, auch Offline-Conversionseigener Server oder Server-Side-GTMmittel bis hoch
UTM-Parametermachen den Traffic in GA4 sichtbarTracking-Vorlage im Ads Managergering

Welche Kombination passt, hängt vom Geschäftsmodell ab:

GeschäftEmpfehlung
KMU mit KontaktformularPixel per GTM, Event lead_created, UTMs. Das reicht für den Start.
OnlineshopPixel mit order_created inklusive Wert, dazu die Conversions API für Bestellungen, die der Browser verpasst
B2B mit Qualifizierung im CRMPixel für den Lead, Conversions API für qualifizierte Leads, sofern sie innert 7 Tagen feststehen
Appnur Conversions API, ein Mobile-SDK gibt es nicht

Das OpenAI-Pixel: Events und Werte

Das Pixel lädt oaiq.min.js von bzrcdn.openai.com, wird mit oaiq("init", { pixelId }) gestartet und misst mit oaiq("measure", event, data, options). Die Pixel-ID ist öffentlich, wie bei Meta.

OpenAI kennt eine feste Liste von Standard-Events, jeweils mit einer eigenen Datenform:

GeschäftsmodellEventsDatenform
Shoppage_viewed, contents_viewed, items_added, checkout_started, order_createdcontents
Leads und Terminelead_created, registration_completed, appointment_scheduledcustomer_action
Abos und Softwaresubscription_created, trial_startedplan_enrollment
Appapp_installed, app_opened (nur Conversions API)

Beim Wert gibt es eine Falle: amount ist eine Ganzzahl in der kleinsten Währungseinheit. CHF 129.90 schickst du als 12990, nicht als 129.9. Sobald amount gesetzt ist, ist currency Pflicht. Beim Event steht der Gesamtwert, in contents[] der Stückpreis pro Artikel.

oaiq("measure", "order_created", {
  type: "contents",
  amount: 12990,
  currency: "CHF",
  contents: [{ id: "SKU-123", quantity: 1, amount: 12990, currency: "CHF" }]
}, { event_id: "ORDER-10045" });

Eigene Events sind möglich, etwa oaiq("measure", "custom", { type: "custom" }, { custom_event_name: "quote_requested" }). Für die Optimierung taugen sie nicht: Eine Conversion-Kampagne optimiert auf genau ein Standard-Event. Custom Events eignen sich fürs Reporting.

Wer auf der Website eine Content Security Policy hat, muss drei Einträge ergänzen: bzrcdn.openai.com bei script-src, bzr.openai.com und bzrcdn.openai.com bei connect-src, bzr.openai.com bei img-src. Sonst blockt der Browser das Pixel, und nur die Konsole zeigt es.

oppref und obref: wie OpenAI Klicks zuordnet

oppref ist die Click-ID von OpenAI Ads, das Pendant zu gclid und fbclid. Sie kommt nur bei echten Anzeigenklicks in die URL. Das Pixel liest sie aus und legt sie im Cookie __oppref ab, 30 Tage lang. Bei jedem neuen Klick mit oppref wird das Cookie überschrieben und die Laufzeit beginnt neu.

Daneben setzt das Pixel __obref, eine zufällige Browser-Referenz für deine Domain. Sie gilt 365 Tage ab dem ersten Setzen und wird nicht verlängert. Beide Cookies entstehen nur mit Einwilligung.

Testen lässt sich das ohne Anzeigenklick: Seite mit ?oppref=test aufrufen, Banner akzeptieren, in den DevTools unter Application, Cookies nachsehen.

Chrome DevTools, Cookies von wismermarketing.ch: __oppref mit dem Wert test und __obref, dazu _cfuvid und __cf_bm von bzr.openai.com.
Nach dem Aufruf mit ?oppref=test: __oppref und __obref auf der eigenen Domain. __cf_bm und _cfuvid gehören zu Cloudflare auf bzr.openai.com.

In der Tracking-Vorlage hat oppref nichts verloren. Der Ads Manager lehnt das mit “Reserved query parameters are not supported: olref, oppref” ab. Wer die Click-ID unter eigenem Namen braucht, etwa für ein CRM, nutzt den Platzhalter: clickid={oppref}.

Advanced Matching: automatisch oder selbst gehasht

Ohne oppref ordnet OpenAI Conversions über gehashte Kontaktdaten zu. Das Pixel macht das zum Teil von selbst: Es erkennt Formularfelder wie die E-Mail, normalisiert und hasht sie im Browser und schickt nur den SHA-256-Wert. In meinem Ereignisstream stand nach dem ersten Test-Lead eine gehashte E-Mail, obwohl ich keine mitgeschickt hatte. Welche Felder die Automatik genau erfasst und wie man sie abschaltet, steht nicht in der Doku.

Manuell übergibst du die Daten im user-Objekt von init, nicht in measure. Nach einem Login rufst du init erneut mit dem vollständigen Objekt auf.

FeldVorbereitung
email_sha256trimmen, Kleinbuchstaben, dann SHA-256
phone_number_sha256mit Ländervorwahl, ohne Leerzeichen, Klammern, Punkte, Bindestriche und führendes +, dann SHA-256
external_id_sha256trimmen, Gross- und Kleinschreibung bleibt, dann SHA-256
first_name_sha256, last_name_sha256Kleinbuchstaben, ohne Leerzeichen und Satzzeichen, dann SHA-256
country, city, region, postal_codeungehasht

Die Datenschutzerklärung sollte das Pixel und den Abgleich gehashter Kontaktdaten erwähnen, auch wenn du selbst keine Daten übergibst.

Conversions API: wann sie sich lohnt

Die Conversions API schickt Events vom Server statt aus dem Browser. Sie lohnt sich, wenn Conversions erst im Backend feststehen (bezahlte Bestellung, qualifizierter Lead im CRM), wenn viele Besucher*innen das Pixel ablehnen oder blocken, oder wenn ein Shop jede Bestellung mit Wert zurückmelden will. Für ein KMU mit Kontaktformular ist sie selten der erste Schritt. Die Abwägung ist dieselbe wie beim Server-Side-Tagging. Auf wismermarketing.ch läuft nur das Pixel über den clientseitigen GTM, der CAPI-Teil hier stützt sich auf die Doku.

Die Eckdaten aus der Doku zur Conversions API:

  • Endpoint: POST https://bzr.openai.com/v1/events?pid=<Pixel-ID>, Authentifizierung per Bearer-Token mit einem eigenen CAPI-Key. Er ist geheim und gehört nie in den Web-Container.
  • Pflichtfelder pro Event: id, type, timestamp_ms, data, bei Web-Events zusätzlich source_url. Mit action_source sagst du, woher das Event stammt.
  • Zeitfenster: Events dürfen höchstens 7 Tage alt sein und maximal 10 Minuten in der Zukunft liegen. Event Quality prüft zusätzlich, ob Server-Events innert einer Stunde nach der Aktion eintreffen.
  • Batches: bis 1’000 Events pro Request. Ist eines fehlerhaft, scheitert der ganze Batch.
  • Kundendaten: gehashte E-Mail, Telefon, externe ID und Namen, dazu ungehasht Ort, PLZ, Land, IP-Adresse und User Agent der Besucher*in sowie der Wert des __obref-Cookies.
  • Testen: Mit validate_only prüft OpenAI den Request, ohne ihn zu speichern. Einen Testmodus für die CAPI beschreibt die Doku nicht.

Der wichtigste Unterschied zum Pixel: Die Conversions API kennt oppref nicht von selbst. Du musst die Click-ID beim Landen aus der URL lesen, speichern (eigenes Cookie, Session oder Hidden Field im Formular) und mit dem Event mitschicken. OpenAI empfiehlt trotzdem, alle Conversions zu senden, auch die ohne oppref.

Ein offizielles Template für den Server-Side-GTM gibt es nicht. Die bekannten Varianten stammen aus der Community, etwa von Stape oder TAGGRS. Vor dem Einsatz lohnt sich ein Blick in den Code, ob oppref und die Event-ID korrekt übergeben werden.

Pixel und Conversions API parallel: Deduplizierung

Wer beide Wege nutzt, schickt dieselbe Bestellung zweimal. OpenAI zählt sie einmal, wenn drei Dinge übereinstimmen: dieselbe Pixel-ID, derselbe Event-Name und dieselbe ID (event_id im Pixel, id in der CAPI). Bei Custom Events muss zusätzlich custom_event_name gleich sein. Gezählt wird das zuerst eingegangene Event.

Als ID eignet sich, was beide Seiten kennen, meistens die Bestell- oder Lead-Nummer. Eine im Browser gewürfelte Zufalls-ID funktioniert nur, wenn sie auch an den Server weitergereicht wird.

Offline- und CRM-Conversions

Einen Upload für Offline-Conversions wie in Google Ads gibt es nicht. Der Weg führt über die Conversions API mit action_source offline, phone_call oder physical_store. Auch hier gilt die Grenze von 7 Tagen nach der Conversion.

Für B2B mit langen Verkaufszyklen heisst das: Ein Abschluss nach drei Wochen lässt sich nicht mehr melden. Realistisch sind ein schnell qualifizierter Lead oder ein gebuchter Termin (appointment_scheduled). Optimiert wird auf den Lead, Abschlüsse wertest du im CRM aus.

Ich lade das Pixel wie Meta und Google erst nach der Marketing-Einwilligung (meine Praxis, keine Rechtsberatung). Technisch gibt es zwei Wege:

  • Über den GTM: Der Pixel-Tag verlangt die Einwilligungen ad_storage und ad_user_data. Vorher lädt kein Skript und es entstehen keine Cookies. So läuft es auf wismermarketing.ch.
  • Über die Consent-API des Pixels: oaiq("consent", false) vor init, nach der Zustimmung oaiq("consent", true). Ohne Aufruf startet das Pixel mit Zustimmung. false löscht __oppref und __obref. Den Status merkt sich das Pixel im Cookie __oaiq_consent, das nicht in der Doku steht. Im aktuellen Skript wird es nur geschrieben, wenn du die Consent-API aufrufst. Wer über den GTM sperrt, sieht es nicht.

In beiden Fällen gilt: Events vor der Zustimmung holt das Pixel nicht nach. Die Conversions API hat keinen eigenen Consent-Mechanismus, die Einwilligung musst du auf dem Server selbst berücksichtigen. In die Datenschutzerklärung gehört ein Abschnitt zu OpenAI.

Ob die Sperre greift, zeigt der Network-Tab mit dem Filter openai. Vor der Zustimmung bleibt die Liste leer, danach erscheinen das Skript, die Pixel-Konfiguration und der Event-Request.

Chrome DevTools, Network-Tab mit Filter openai: oaiq.min.js, Pixel-Konfiguration als JSON und events-Request mit Status 202.
Nach der Einwilligung: Skript, Konfiguration und Event-Request mit Status 202. Vor der Einwilligung blieb die Liste leer.

ChatGPT Ads in GA4 sauber messen

OpenAI hängt keine UTM-Parameter an, nur oppref. Die UTMs setzt du selbst in der Tracking-Vorlage, mein Schema steht im Setup-Post. Steht derselbe Parameter auf mehreren Ebenen, gewinnt die spezifischere: Anzeige vor Ad Group vor Kampagne vor Konto. Früher standen Parameter aus Produktfeeds zuoberst, diese alte Reihenfolge muss laut Doku bis 5. November 2026 umgestellt sein. Das betrifft vor allem Konten mit Produktfeed.

In GA4 landen bezahlte und organische ChatGPT-Besuche in unterschiedlichen Channels. In meiner Property sieht das so aus:

HerkunftQuelle / MediumStandard-Channel
Anzeige in ChatGPTchatgpt / paid_aiPaid Other
Link in einer ChatGPT-Antwortchatgpt.com / ai-assistantAI Assistant

Den Channel AI Assistant gibt es seit 2026 in der Standard-Channelgruppe. Laut Google erfasst er Besuche aus Quellen wie ChatGPT, Gemini, Deepseek, Copilot oder Grok. Organische Klicks musst du also nicht selbst abgrenzen.

Für die bezahlten Klicks lohnt sich ein eigener Channel, sonst verschwinden sie in Paid Other. In GA4 unter Verwaltung, Datenanzeige, Channelgruppen eine neue Gruppe erstellen, einen Channel “Paid AI” mit der Bedingung Medium ist genau paid_ai anlegen und ihn über Paid Other ziehen. GA4 prüft die Channels von oben nach unten, der erste Treffer gilt.

GA4, Neuen Channel erstellen: Channelname Paid AI, Bedingung Medium ist genau paid_ai.
Eigener Channel für ChatGPT Ads: Medium ist genau paid_ai.

Attribution: warum Ads Manager und GA4 nie gleich zählen

Das Attributionsfenster stellst du pro Conversion-Event ein: Klick 7, 14 oder 30 Tage (Standard 30), View-through 0 oder 1 Tag (Standard 1). Erfüllt eine Conversion beides, zählt der Klick.

Ads Manager, Conversion-Ereignis bearbeiten: Lead Created mit Basisereignis lead_created, Click-through-Attributionsfenster 30 Tage, View-Through-Attributionsfenster 1 Tag.
Attributionsfenster pro Conversion-Ereignis, hier die Standardwerte.

Im Ads Manager steht View-through als eigene Kennzahl, die Spalte Conversions enthält nur Klicks. Gebote, Abrechnung und CPA stützen sich ebenfalls nur auf Klicks. Im Reporting über die API sind seit dem 30. September 2026 beide zusammengezählt. Einen ROAS gibt es nur für order_created, für Leads zeigt der Ads Manager keinen Wert.

Ads ManagerGA4
Zuordnungoppref, obref, gehashte KontaktdatenSitzung mit UTM-Parametern
Zeitraumbis 30 Tage nach dem KlickAttributionsmodell und Lookback-Fenster von GA4
View-throughseparat, bis 1 Tagnein
Ohne Einwilligungnur Server-Events über die CAPIkeine Daten, falls GA4 auch erst nach Zustimmung lädt
VerzögerungKlicks in Minuten, Conversions nach täglicher VerarbeitungStandardberichte bis zu 48 Stunden

Der Ads Manager meldet deshalb fast immer mehr Conversions als GA4. Im Reporting an Kund*innen nenne ich das Fenster und zeige beide Zahlen nebeneinander, statt sie gegeneinander aufzurechnen.

Tracking testen: Checkliste

  1. Debug-Modus: debug: true im init schreibt die Aktivität des Pixels in die Browser-Konsole. Im GTM reicht dafür der Vorschaumodus, publizieren musst du nichts.
  2. Network-Tab: Filter openai, vor und nach der Einwilligung prüfen. Der Event-Request an bzr.openai.com antwortet mit Status 202.
  3. Cookies: Aufruf mit ?oppref=test, danach müssen __oppref und __obref auf deiner Domain stehen, aber nur nach der Einwilligung.
  4. Ereignisstream im Ads Manager: Ein Test-Event erscheint innert Sekunden. “Oppref: Not provided” ist bei einem Test ohne Klick normal.
  5. Event Quality und Diagnose: Unter Conversions zeigt jede Datenquelle einen Event Quality Score (EQS), der Tab Diagnose listet Warnungen.
  6. Nach dem ersten echten Klick: oppref in der Landing-URL, GA4-Sitzung mit paid_ai, Conversion im Ads Manager nach frühestens einem Tag.
Ads Manager, Conversions, Tab Datenquelle: zwei Web-Pixel mit Status aktiv und EQS 7, darüber Ereignisse insgesamt und zwei aktive Warnungen.
Conversions-Übersicht: EQS pro Datenquelle, aktive Warnungen oben rechts.

Der Event Quality Score wird täglich über die letzten 7 vollen Kalendertage berechnet. Nach einer Korrektur steigt er deshalb nur schrittweise. Bewertet werden unter anderem E-Mail oder Kunden-ID in den Events, mitgeschickte Click-IDs, Verspätung von Server-Events, Mehrfach-Conversions auf denselben Klick und die Breite der Event-Typen. Mehr Events oder erfundene IDs, um den Score zu heben, verbietet OpenAI ausdrücklich.

Ads Manager, Tab Diagnose: Warnungen Keine aktiven Kampagnen nutzen Conversion-Ereignisse (Hoch) und Keine aktuellen Server-zu-Server-Ereignisse (Mittel).
Tab Diagnose: Keine aktive Kampagne nutzt ein Conversion-Ereignis, und Server-Events fehlen, weil nur das Pixel läuft.

Im Chrome Web Store gibt es Erweiterungen namens “Pixel Helper” für OpenAI Ads. Sie stammen nicht von OpenAI. Für die Kontrolle reichen Debug-Modus und DevTools.

Häufige Fehler

  • Trigger auf den Button-Klick statt auf den erfolgreichen Versand. Dann zählen Validierungsfehler als Leads.
  • amount als Dezimalzahl. 129.90 statt 12990 macht aus einer Bestellung einen Rappenbetrag.
  • Pixel vor der Einwilligung. Es setzt Cookies, die es ohne Zustimmung nicht setzen darf.
  • oppref in der Tracking-Vorlage. Der Ads Manager lehnt es ab, OpenAI hängt den Parameter ohnehin selbst an.
  • CAPI ohne Event-ID. Ohne gemeinsame ID zählt jede Conversion doppelt.
  • CAPI-Key im Browser. Der Key gehört auf den Server, nie in den Web-Container.
  • Custom Event als Optimierungsziel. Conversion-Kampagnen akzeptieren nur Standard-Events.
  • utm_medium=paid_social. ChatGPT-Klicks vermischen sich mit Meta.
  • Creative-Optimierung übersehen. Sie kann die Ziel-URL ändern. In GA4 prüfen, auf welchen Seiten chatgpt / paid_ai landet und ob die UTMs erhalten bleiben.

Fazit

Für die meisten KMU reicht das Pixel per GTM mit lead_created, Consent-Sperre und einem eigenen GA4-Channel. Die Conversions API wird interessant, sobald Conversions erst im Backend feststehen oder ein Shop jede Bestellung mit Wert melden will, und dann ist die Event-ID der Punkt, an dem es meistens hakt. Gleiche Zahlen in Ads Manager und GA4 gibt es nicht. Ich zeige beide getrennt und nenne das Attributionsfenster.

Wenn du ChatGPT Ads aufsetzen oder das Tracking prüfen lassen willst: Ich betreue Paid Ads inklusive Tracking für Schweizer KMU.

Häufige Fragen

Was ist oppref?

Die Click-ID von OpenAI Ads, vergleichbar mit gclid bei Google oder fbclid bei Meta. OpenAI hängt sie bei jedem Anzeigenklick an die Landingpage-URL. Das Pixel speichert sie 30 Tage im Cookie __oppref und schickt sie mit dem Conversion-Event zurück.

Was ist der Unterschied zwischen oppref und obref?

oppref identifiziert einen Anzeigenklick und gilt 30 Tage. obref ist eine zufällige Kennung für den Browser auf deiner Domain, gilt 365 Tage und hilft beim Zuordnen, wenn keine Click-ID vorhanden ist.

Brauche ich die Conversions API für ChatGPT Ads?

Nicht zwingend. Für ein Kontaktformular reicht das Pixel. Die Conversions API lohnt sich, wenn Conversions erst auf dem Server feststehen, etwa bezahlte Bestellungen oder qualifizierte Leads, oder wenn viele Besucher*innen das Pixel blocken.

Gibt es ein offizielles GTM-Template für das OpenAI-Pixel?

Nein. Für den Web-GTM reicht ein Custom-HTML-Tag mit dem Code aus der Doku. Für den Server-Side-GTM gibt es Templates aus der Community, etwa von Stape oder TAGGRS.

Wie unterscheide ich in GA4 bezahlten und organischen ChatGPT-Traffic?

Bezahlte Klicks tragen deine UTMs, bei mir chatgpt / paid_ai, und landen ohne eigenen Channel in Paid Other. Organische Links aus ChatGPT-Antworten erscheinen als chatgpt.com / ai-assistant im Standard-Channel AI Assistant.

Zählt ChatGPT Ads View-through-Conversions?

Ja, wenn das View-through-Fenster auf 1 Tag steht (Standard). Der Ads Manager weist sie separat aus. Gebote, Abrechnung und die Spalte Conversions stützen sich nur auf Klicks.

Kann ich Offline-Conversions an OpenAI senden?

Ja, über die Conversions API mit action_source offline, phone_call oder physical_store. Die Conversion darf höchstens 7 Tage zurückliegen.

Zeigt der Ads Manager einen ROAS?

Nur für das Event order_created mit übergebenem Wert. Für Leads gibt es keinen Umsatzwert.