ChatGPT Ads Conversions API in server-seitigem Google Tag Manager einrichten
Ein Tracking-Pixel im Browser ist wie ein Bote, der oft schon an der Tuer abgefangen wird. Adblocker, Safaris Tracking-Schutz und Datenschutzeinstellungen halten ihn auf, bevor er etwas melden kann. So erreicht ein Teil deiner echten Conversions ChatGPT Ads nie. Die Conversions API loest dieses Problem, indem sie die Conversion von deinem eigenen Server aus sendet, wo keine Browser-Erweiterung sie blockieren kann. Diese Anleitung zeigt dir Schritt fuer Schritt und in einfacher Sprache, wie du die ChatGPT Ads Conversions API in server-seitigem Google Tag Manager verdrahtest, und zwar von Anfang an DSGVO-konform.
Wichtigste Erkenntnisse
- Server-seitig sendet Conversions vom Server, nicht aus dem Browser. So ueberlebt das Tracking Adblocker und Tracking-Schutz, die laut Praktikern (Schaetzung von Focal) Browser-Pixeln rund 20-30 Prozent der Conversions kosten.
- Der Endpoint ist eine einzige POST-Anfrage:
POST https://bzr.openai.com/v1/events?pid=<PIXEL-ID>mit einem Bearer-Token, beides aus dem Conversions-Tab im Ads Manager (laut OpenAIs Conversions-API-Doku). - Die Conversions API erfasst oppref NICHT automatisch. Du musst die Klick-ID von ChatGPT selbst auslesen und am Event mitschicken, sonst bleiben deine Server-Conversions ohne Zuordnung.
- Dedup ueber dieselbe
id: Verwende am Pixel und am API-Event denselben Wert, sonst zaehlst du doppelt und verdirbst dein Gebots-Signal.
Das hier ist der technische Tiefbau. Die Strategie-Ebene (UTM-Struktur, View-Through, kanaluebergreifende Zuordnung) behandeln wir an anderer Stelle. Wenn du zuerst verstehen willst, warum die DSGVO der zentrale Punkt in DACH ist, lies unseren Beitrag zu ChatGPT Ads und DSGVO. Wer den Kanal grundsaetzlich in die eigene Strategie einordnen will, findet im Ueberblick fuer deutsche Unternehmen den passenden Rahmen.
Warum server-seitig fuer ChatGPT Ads
Stell dir Conversion-Tracking wie eine Quittung vor, die du an die Werbeplattform zurueckschickst: “Diese Person, die du mir geschickt hast, hat tatsaechlich gekauft.” Diese Quittung laesst sich auf zwei Wegen zustellen.
Der erste Weg ist der Browser-Pixel: ein kleines Stueck JavaScript, das aus dem Browser des Besuchers feuert. Der Pixel fuer ChatGPT Ads laedt von bzrcdn.openai.com/sdk/oaiq.min.js und laeuft ueber eine Funktion namens oaiq() (laut OpenAIs Pixel-Doku). Er funktioniert, aber er lebt im Browser, und das heisst, er kann blockiert werden. Praktiker von Focal schaetzen, dass Browser-Pixel allein rund 20-30 Prozent der Conversions an Adblocker und Tracking-Schutz verlieren. Behandle das als Praktiker-Schaetzung, nicht als offizielle Zahl von OpenAI.
Der zweite Weg ist die Conversions API (oft kurz CAPI). Statt den Browser zu bitten, die Quittung zu senden, schickt dein eigener Server sie direkt an OpenAI. Kein Browser, keine Erweiterung, kein Blocker dazwischen. Praktiker von Lapis berichten, dass die Conversions API zusaetzlich zum Pixel typischerweise 15-25 Prozent mehr getrackte Conversions zurueckholt. Auch das ist eine Praktiker-Schaetzung, keine Zahl von OpenAI.
Das stabilste Setup ist beides, dedupliziert: der Pixel fuer Tempo und reichen Browser-Kontext, die Conversions API fuer Vollstaendigkeit und Zuverlaessigkeit, mit einer geteilten ID, damit dieselbe Conversion nie doppelt zaehlt. Dieses hybride Modell bauen wir im Rest der Anleitung auf.
Was du vorher brauchst
Leg diese vier Dinge zuerst bereit. Der Aufbau laeuft glatt, wenn sie da sind, und muehsam, wenn nicht.
- Eine ChatGPT-Ads-Pixel-ID. Das ist die Tracking-ID deines Kontos. Du findest sie im Conversions-Tab im Ads Manager. Sie sieht aus wie ein kurzer Code und kommt in die Endpoint-URL.
- Einen Conversions-API-Schluessel (Bearer-Token). Ebenfalls aus dem Conversions-Tab. Das ist das Passwort, das beweist, dass die Events wirklich von dir kommen. Behandle es wie ein Passwort: Es lebt auf deinem Server, niemals im Browser-Code.
- Einen server-seitigen GTM-Container. Das ist ein Google-Tag-Manager-Container, der auf einem Server laeuft, den du kontrollierst (oft gehostet ueber Stape oder TAGGRS), statt im Browser des Besuchers. Wenn du so etwas noch nie aufgesetzt hast, starte mit unserem Guide zu server-seitigem GTM-Tracking und komm dann hierher zurueck.
- Einen Web-GTM-Container, der deine Conversion-Events bereits feuert. Deine Formular-Absendungen, Buchungen und Kaeufe muessen schon heute Events ausloesen (zum Beispiel einen
dataLayer-Push), die der Server-Container empfangen kann.
Der Conversions-API-Endpoint und die Authentifizierung
Alles, was die Conversions API tut, ist eine einzige HTTP-POST-Anfrage. So sieht sie aus.
- Methode und URL:
POST https://bzr.openai.com/v1/events?pid=<PIXEL-ID>(ersetze<PIXEL-ID>durch deine Pixel-ID). - Authentifizierung: ein Bearer-Token im Anfrage-Header, der API-Schluessel aus deinem Conversions-Tab. In einfachen Worten: Du haengst einen Header an, der
Authorization: Bearer <dein-API-Schluessel>lautet. - Body: ein JSON-Inhalt mit deinem Event oder einer Sammlung von Events.
Das ist der gesamte Transportweg. Was ueber Genauigkeit entscheidet, steckt im Inneren des Events.
Pflichtfelder pro Event
Jedes Event, das du sendest, braucht diese Felder (laut OpenAIs Conversions-API-Doku):
| Feld | Was es ist | Die Regel, ueber die viele stolpern |
|---|---|---|
id | Eine eindeutige ID fuer diese Conversion | Das ist zugleich dein Dedup-Schluessel. Verwende genau denselben Wert am Pixel. |
type | Der Event-Typ (zum Beispiel lead_created) | Fuer ein eigenes Event setzt du type auf custom und ergaenzt custom_event_name. |
timestamp_ms | Wann die Conversion passiert ist, in Millisekunden | Muss innerhalb der letzten 7 Tage liegen und hoechstens 10 Minuten in der Zukunft. |
data | Event-Details (Wert, Waehrung, oppref und so weiter) | Hier haengst du oppref und das erweiterte Matching an. |
Die Regel zu timestamp_ms ist wichtig fuer Offline-Conversions. Wenn ein Vertriebler einen Lead fuenf Tage nach dem Formular-Ausfuellen im CRM als qualifiziert markiert, kannst du ihn trotzdem senden, denn fuenf Tage liegen im 7-Tage-Fenster. Acht Tage spaet, und das Event wird abgelehnt. Bau deinen CRM-Sync so, dass er deutlich innerhalb dieses Fensters feuert.
Events buendeln (Batching)
Du kannst bis zu 1.000 Events in einem einzigen Batch senden, statt eine Anfrage pro Event. Dabei gilt eine Regel (laut OpenAIs Doku): Wenn ein einzelnes Event im Batch fehlschlaegt, scheitert der ganze Batch. Ein einziges fehlerhaftes Event kann also 999 gute mitreissen. Pruefe jedes Event, bevor du es buendelst, und halte Batches eher klein, damit sich ein Fehler leicht eingrenzen und erneut senden laesst.
oppref server-seitig erfassen und mitschicken
Das ist der Punkt, den die meisten Menschen falsch machen, also geh hier langsam vor.
oppref ist die Klick-ID von ChatGPT Ads. Es ist dieselbe Idee wie die gclid, die Google an einen Link haengt, oder die fbclid von Meta: eine Markierung an der Landingpage-URL, mit der die Plattform einen Klick mit dem spaeteren Verkauf verbinden kann. Wenn jemand auf deine ChatGPT-Anzeige klickt, haengt OpenAI oppref an deine Landing-URL an.
Der Browser-Pixel erledigt oppref fuer dich: Er liest oppref aus der URL und speichert es in einem First-Party-Cookie namens __oppref (laut Praktiker-Quellen mit rund 30 Tagen Lebensdauer), damit es ueber Seitenaufrufe hinweg erhalten bleibt. Einfach.
Die Conversions API tut das nicht. Laut OpenAIs Doku erfasst die CAPI oppref nicht automatisch. Wenn du diesen Schritt auslaesst, kommen deine Server-Conversions ohne Klick-ID an, und ChatGPT Ads kann sie nicht dem Klick zuordnen, der sie ausgeloest hat. Fuer den Kanal sind sie damit praktisch unsichtbar.
Du musst oppref also selbst erfassen und mitschicken. Der Ablauf besteht aus drei kurzen Schritten:
- Lies oppref aus der Landing-URL, wenn der Besucher zum ersten Mal ankommt, ueber deinen Web-GTM-Container.
- Speichere es in einem First-Party-Cookie (dasselbe
__oppref-Cookie wie der Pixel oder ein eigenes), damit es die Luecke zwischen Klick und spaeterer Conversion ueberbrueckt. - Lies dieses Cookie zum Conversion-Zeitpunkt und leg oppref in das
data-Objekt des Conversions-API-Events, das dein Server sendet.
Deduplizierung zwischen Pixel und CAPI
Wenn du Pixel und Conversions API gemeinsam betreibst, kann dieselbe Conversion zweimal gemeldet werden: einmal vom Browser, einmal von deinem Server. Doppelt gezaehlte Conversions blaehen deine Zahlen auf und, schlimmer noch, fuettern das CPA-Bieten mit Muell.
OpenAIs Loesung ist einfach, und du hast sie in der Hand (laut OpenAIs Doku): Verwende denselben Wert als API-id und als Pixel-event_id fuer dieselbe Conversion. Wenn OpenAI zwei Events mit derselben ID erhaelt, verwirft es das Duplikat. In der Regel bleiben die Server-Daten erhalten. Bei eigenen Events gleichst du zusaetzlich ueber custom_event_name in beiden Kanaelen ab.
Das praktische Muster:
- Wenn eine Conversion passiert, erzeuge eine eindeutige ID (zum Beispiel eine UUID oder deine Auftrags- oder Lead-Referenz).
- Gib sie an den Pixel als
event_id. - Gib genau denselben Wert an die Conversions API als
id.
Der schwierige Teil ist, dass beide Haelften dieselbe ID sehen. Die Open-Source-Tags von Stape enthalten eine Variable fuer eine eindeutige Event-ID, die genau fuer diese Web-plus-Server-Deduplizierung gebaut ist, und ersparen dir das Basteln von Hand.
Erweitertes Matching mit SHA-256-Hashes
Erweitertes Matching hilft OpenAI, eine Conversion auch dann dem richtigen Klick zuzuordnen, wenn die Grundsignale duenn sind. Du aktivierst es, indem du dem Event ein optionales user-Objekt hinzufuegst (laut OpenAIs Doku).
Dieses user-Objekt nimmt gehashte Kundenkennungen wie E-Mail oder eine externe ID auf, dazu rohe geografische Werte, IP-Adresse und User-Agent. Kennungen wie die E-Mail muessen mit SHA-256 gehasht und als kleingeschriebene 64-stellige Hex-Zeichenkette gesendet werden.
In einfachen Worten ist Hashing ein einseitiges Verwirbeln. Du sendest nie die echte E-Mail-Adresse. Du schickst sie durch SHA-256 und sendest nur das verwirbelte Ergebnis. OpenAI verwirbelt die eigenen Daten auf dieselbe Weise und vergleicht die Verwirbelungen, sodass ein Treffer entstehen kann, ohne dass die echte E-Mail je deinen Server verlaesst.
Zwei Regeln halten das sauber und konform:
- Normalisiere vor dem Hashen. Schreib den Wert klein und entferne Leerzeichen, damit
[email protected]und[email protected]denselben Hash erzeugen. - Sende nie rohe personenbezogene Daten. Der ganze Sinn ist, dass die rohe E-Mail oder Telefonnummer nie reist. Sende nur den Hash. Der server-seitige GTM ist genau der richtige Ort zum Hashen, weil es auf deiner Infrastruktur passiert und nicht im Browser des Besuchers. Das ist nebenbei gelebte Datensparsamkeit, ein Kernprinzip der DSGVO.
Die Open-Source-Tags von Stape und TAGGRS nutzen
Du musst das alles nicht von Grund auf selbst bauen. Fuer den server-seitigen GTM gibt es bereits zwei Open-Source-Werkzeuge.
| Werkzeug | Was es dir gibt | Wo es laeuft |
|---|---|---|
| Stape | Ein openai-pixel-tag (Web) und ein openai-capi-tag (Server), dazu eine Variable fuer die eindeutige Event-ID zur Web-plus-Server-Deduplizierung | GTM Web + Server |
| TAGGRS | Ein Apache-2.0-lizenziertes sGTM-Tag, das den oppref-Query-Parameter in ein First-Party-Cookie erfasst, Standard- und eigene Events sendet und gehashte E-Mail/Telefonnummer fuer erweitertes Matching uebertraegt | GTM Server-Side |
Diese Tags uebernehmen die kniffligen Teile (den Endpoint-Aufruf, das oppref-Cookie, das Hashing, die Dedup-Variable), sodass du dich auf das korrekte Mapping deiner eigenen Events konzentrieren kannst. Importiere die Tag-Vorlage in deinen Server-Container, richte sie auf deine Pixel-ID und deinen API-Schluessel aus und verdrahte sie mit den Events, die dein Web-Container bereits sendet. Lies die Doku des jeweiligen Tags fuer die genauen Feldnamen, denn diese koennen sich aendern, wenn die Maintainer das Tag aktualisieren.
Standard-Events auf einen Lead-Gen-Plan mappen
ChatGPT Ads bringt Standard-Event-Namen mit, sodass du dir keine eigenen ausdenken musst. Die fuer die Lead-Generierung sind lead_created, registration_completed und appointment_scheduled (laut OpenAIs Pixel-Doku). Fuer E-Commerce gibt es ausserdem order_created, und du kannst eigene Events mit type: custom plus einem custom_event_name definieren.
Mappe deinen echten Funnel auf diese Namen. Hier ein typisches Lead-Gen-Mapping.
| Dein Funnel-Schritt | Standard-Event zum Senden | Wann es feuert |
|---|---|---|
| Kontakt- oder Angebotsformular abgeschickt | lead_created | Bei der Danke-Aktion des Formulars |
| Kostenloses Konto oder Trial angemeldet | registration_completed | Bei der Anmeldebestaetigung |
| Calendly- oder Demo-Termin gebucht | appointment_scheduled | Bei der Buchungsbestaetigung |
| Offline: Lead im CRM als qualifiziert markiert | lead_created (eigener Wert) oder ein eigenes Event | Wenn der CRM-Sync laeuft, innerhalb des 7-Tage-Fensters |
Sende fuer jeden Eintrag das Event von deinem Server mit: einer eindeutigen id (zugleich die Pixel-event_id fuer die Dedup), dem korrekten type, einem timestamp_ms im 7-Tage-Fenster, dem erfassten oppref im data-Objekt und einem optionalen gehashten user-Objekt fuer erweitertes Matching. Dieses eine Rezept deckt jede Zeile der Tabelle ab.
Wenn du die volle Strategie fuer die Lead-Generierung willst (welche Events du als primaer behandelst, wie du das Konto aufbaust, damit die Daten sauber bleiben), behandelt unser Google-Ads-Service genau dieses strukturelle Denken, das sich direkt auf ChatGPT Ads uebertragen laesst.
Consent-Gating fuer EU und DACH
Wenn du EU- oder DACH-Besucher bedienst, kommt die Einwilligung vor dem Tracking, nicht danach. OpenAIs veroeffentlichte EU-Werberichtlinie ist einwilligungsbasiert: ausdrueckliches Opt-in, mit der Einwilligung (nicht dem berechtigten Interesse) als Rechtsgrundlage (laut Digiday, Stand 8. Juni 2026).
Die offizielle Pixel-Doku beschreibt keine native Consent-Mode-Unterstuetzung, also verdrahten Praktiker das selbst. Das gaengige Muster (laut Stape) ist, den Pixel an den Google Consent Mode zu koppeln: Wenn die Einwilligung fuer ad_storage verweigert ist, laedt das Tag das oaiq-SDK nicht, und kein Event feuert. Bei einer manuellen Installation umschliesst du die Initialisierung selbst mit einer Consent-Pruefung.
Server-seitig ist hier dein Freund, weil sowohl das Hashing als auch die Consent-Logik auf Infrastruktur leben, die du kontrollierst, statt im Browser des Besuchers. Trotzdem befreit Server-seitig dich nicht von der Einwilligung: Du brauchst weiterhin eine Rechtsgrundlage, um die Daten ueberhaupt zu verarbeiten.
Weil ChatGPT Ads in der EU oder DACH noch nicht buchbar sind, geht es in diesem Abschnitt darum, jetzt richtig zu bauen, damit du am ersten Tag konform startest. Wenn du das fuer dich erledigen lassen willst: Unser Tracking- und Measurement-Service baut consent-gestuetzte, server-seitige Setups fuer genau diese Situation, und unser ChatGPT-Ads-Service deckt die Kampagnenseite ab, sobald der Markt oeffnet.
Haeufige Fragen
ChatGPT Ads sind da, aber koennen wir ihre Leistung ueberhaupt messen?
Ja, und genau das leistet dieses Setup. Das native Dashboard allein meldet nur Impressionen, Klicks, Ausgaben und CTR (laut Focal), ohne Conversion-Zuordnung oder ROAS. Um Leistung zu messen, installierst du Pixel und Conversions API, erfasst oppref und sendest deine Conversion-Events. Sobald dieses Signal fliesst, siehst du, welche Conversions von ChatGPT Ads kamen, und kannst das CPA-Bieten fuettern. Der Frust, den viele in der r/PPC-Community beschreiben, ist real, kommt aber daher, dass man auf dem nackten Dashboard arbeitet, nicht von einer fehlenden Funktion.
Brauche ich server-seitig, oder reicht der Pixel?
Der Pixel allein funktioniert, meldet aber zu wenig, weil Browser-Pixel Conversions an Adblocker und Tracking-Schutz verlieren (Praktiker von Focal schaetzen 20-30 Prozent). Server-seitig holt einen Teil davon zurueck und ist zuverlaessiger fuer Offline- und CRM-Events. Wenn du nennenswertes Budget bewegst oder auf CPA-Bieten setzt, betreib beides dedupliziert. Wenn dein Budget winzig ist und du nur einfache On-Site-Conversions hast, kann der Pixel allein ein vernuenftiger Startpunkt sein, den du spaeter aufruestest.
Warum werden meine Conversions in ChatGPT Ads doppelt gezaehlt?
Fast immer, weil Pixel und Conversions API dieselbe Conversion mit unterschiedlichen IDs senden, sodass OpenAI sie als zwei getrennte Events sieht. Die Loesung ist die Deduplizierung: Verwende genau denselben Wert fuer die Pixel-event_id und die API-id derselben Conversion. Wenn die IDs uebereinstimmen, verwirft OpenAI das Duplikat und behaelt eines (meist das server-seitige).
Erfasst die Conversions API oppref automatisch?
Nein. Laut OpenAIs Doku erfasst der Browser-Pixel oppref automatisch in das First-Party-Cookie __oppref, die Conversions API jedoch nicht. Du musst oppref aus der Landing-URL lesen, in einem First-Party-Cookie speichern und es dann an das data-Objekt jedes Server-Events anhaengen. Laesst du das aus, kommen deine Server-Conversions ohne Klick-ID an und lassen sich ChatGPT Ads nicht zuordnen.
Wie frisch muss der Zeitstempel sein?
Der timestamp_ms jedes Events muss innerhalb der letzten 7 Tage liegen und hoechstens 10 Minuten in der Zukunft (laut OpenAIs Doku). Bei On-Site-Conversions passiert das von selbst. Bei offline- oder CRM-getriebenen Conversions stell sicher, dass dein Sync innerhalb des 7-Tage-Fensters feuert, sonst lehnt OpenAI das Event ab.
Erst das Signal sauber bekommen, dann das Budget skalieren
Die Conversions API ist nichts Exotisches. Sie ist eine POST-Anfrage, eine Handvoll Pflichtfelder, ein erfasstes oppref, eine geteilte ID fuer die Deduplizierung und gehashte Kennungen fuer das Matching. Bring diese fuenf Dinge in Ordnung, und ChatGPT Ads sieht endlich die Conversions, die der Browser verloren hat. Das ist der Unterschied zwischen Raten und Wissen, ob der Kanal sich lohnt.
Die Reihenfolge beim Aufbau: Bestaetige, dass du oppref lesen und speichern kannst, sende ein einzelnes Test-Event und beobachte, wie es ankommt, fueg den Pixel mit passender event_id fuer die Dedup hinzu, und leg dann das erweiterte Matching und dein volles Event-Mapping darueber. Sobald es steht, hat das CPA-Bieten ein sauberes Signal zum Optimieren.
Wenn du das lieber umgesetzt und geprueft haben moechtest, ist das unsere Arbeit. Sieh dir unseren Tracking- und Measurement-Service fuer den server-seitigen Aufbau an, unseren ChatGPT-Ads-Service fuer die Kampagnenseite, oder lies zuerst, wann ChatGPT Ads in Deutschland verfuegbar sind, damit du deinen Zeitplan richtig setzt.
Quellen
- ChatGPT Ads Conversions API documentation - OpenAI
- ChatGPT Ads Measurement Pixel documentation - OpenAI
- TAGGRS server-side GTM ChatGPT Ads Conversion API tag (GitHub)
- ChatGPT Ads tracking with server-side GTM - Stape
- ChatGPT Ads tracking guide - Focal
- ChatGPT Ads conversion tracking: pixel and API guide - Lapis
- OpenAI's ChatGPT Ads conversion optimization - PPC.land
- ChatGPT Ads land in the UK as OpenAI outlines EU privacy rules - Digiday