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
| Baustein | Was es macht | Wo es läuft | Aufwand |
|---|---|---|---|
Pixel oaiq | misst Events im Browser, liest oppref aus der URL, setzt First-Party-Cookies | Website, meist per GTM | gering |
| Image Tag | Pixel ohne JavaScript, ein Event pro Request | Website, z. B. Danke-Seite | gering |
| Conversions API | schickt Events vom Server, auch Offline-Conversions | eigener Server oder Server-Side-GTM | mittel bis hoch |
| UTM-Parameter | machen den Traffic in GA4 sichtbar | Tracking-Vorlage im Ads Manager | gering |
Welche Kombination passt, hängt vom Geschäftsmodell ab:
| Geschäft | Empfehlung |
|---|---|
| KMU mit Kontaktformular | Pixel per GTM, Event lead_created, UTMs. Das reicht für den Start. |
| Onlineshop | Pixel mit order_created inklusive Wert, dazu die Conversions API für Bestellungen, die der Browser verpasst |
| B2B mit Qualifizierung im CRM | Pixel für den Lead, Conversions API für qualifizierte Leads, sofern sie innert 7 Tagen feststehen |
| App | nur 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äftsmodell | Events | Datenform |
|---|---|---|
| Shop | page_viewed, contents_viewed, items_added, checkout_started, order_created | contents |
| Leads und Termine | lead_created, registration_completed, appointment_scheduled | customer_action |
| Abos und Software | subscription_created, trial_started | plan_enrollment |
| App | app_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.

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.
| Feld | Vorbereitung |
|---|---|
email_sha256 | trimmen, Kleinbuchstaben, dann SHA-256 |
phone_number_sha256 | mit Ländervorwahl, ohne Leerzeichen, Klammern, Punkte, Bindestriche und führendes +, dann SHA-256 |
external_id_sha256 | trimmen, Gross- und Kleinschreibung bleibt, dann SHA-256 |
first_name_sha256, last_name_sha256 | Kleinbuchstaben, ohne Leerzeichen und Satzzeichen, dann SHA-256 |
country, city, region, postal_code | ungehasht |
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ätzlichsource_url. Mitaction_sourcesagst 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_onlyprü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.
Consent in der Schweiz
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_storageundad_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)vorinit, nach der Zustimmungoaiq("consent", true). Ohne Aufruf startet das Pixel mit Zustimmung.falselöscht__opprefund__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.

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:
| Herkunft | Quelle / Medium | Standard-Channel |
|---|---|---|
| Anzeige in ChatGPT | chatgpt / paid_ai | Paid Other |
| Link in einer ChatGPT-Antwort | chatgpt.com / ai-assistant | AI 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.

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.

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 Manager | GA4 | |
|---|---|---|
| Zuordnung | oppref, obref, gehashte Kontaktdaten | Sitzung mit UTM-Parametern |
| Zeitraum | bis 30 Tage nach dem Klick | Attributionsmodell und Lookback-Fenster von GA4 |
| View-through | separat, bis 1 Tag | nein |
| Ohne Einwilligung | nur Server-Events über die CAPI | keine Daten, falls GA4 auch erst nach Zustimmung lädt |
| Verzögerung | Klicks in Minuten, Conversions nach täglicher Verarbeitung | Standardberichte 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
- Debug-Modus:
debug: trueiminitschreibt die Aktivität des Pixels in die Browser-Konsole. Im GTM reicht dafür der Vorschaumodus, publizieren musst du nichts. - Network-Tab: Filter
openai, vor und nach der Einwilligung prüfen. Der Event-Request anbzr.openai.comantwortet mit Status 202. - Cookies: Aufruf mit
?oppref=test, danach müssen__opprefund__obrefauf deiner Domain stehen, aber nur nach der Einwilligung. - Ereignisstream im Ads Manager: Ein Test-Event erscheint innert Sekunden. “Oppref: Not provided” ist bei einem Test ohne Klick normal.
- Event Quality und Diagnose: Unter Conversions zeigt jede Datenquelle einen Event Quality Score (EQS), der Tab Diagnose listet Warnungen.
- Nach dem ersten echten Klick:
opprefin der Landing-URL, GA4-Sitzung mitpaid_ai, Conversion im Ads Manager nach frühestens einem Tag.

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.

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.
amountals 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.
opprefin 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_ailandet 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.