Seit dem 1. September 2026 kann man in der Schweiz Anzeigen in ChatGPT schalten. Ich habe am ersten Abend mein eigenes Konto als Testfeld genommen: Pixel, Lead-Conversion, zwei Kampagnen mit 20 Anzeigen, alles per Bulk-Upload. Dieser Post ist die Anleitung, die ich selber gern gehabt hätte, inklusive der drei Upload-Fehler, die mich diesen Abend gekostet haben.
Stand ist September 2026. Ads Manager heisst offiziell noch “Beta”, und die Doku hinkt dem Interface teilweise hinterher. Wo ich etwas nur aus dem eigenen Konto weiss und nicht aus der Doku, sage ich das.
Was ChatGPT Ads sind und wer sie sieht
Anzeigen erscheinen unterhalb einer ChatGPT-Antwort, klar als gesponsert markiert. Eine Anzeige besteht aus Advertiser-Name, Favicon, Titel, Beschreibung, Bild und Landingpage. Die Antwort selbst beeinflussen Ads nicht.
Gesehen werden sie nur von Nutzer*innen auf den Plänen Free und Go. Plus, Pro, Business und Enterprise sind werbefrei, ebenso Accounts von Minderjährigen und temporäre Chats. Für die Schweiz und den EWR gilt zusätzlich: keine personalisierten Ads. Die Auslieferung stützt sich hier ausschliesslich auf den aktuellen Chat-Kontext, deine Landingpage, Titel, Copy und die Context Hints. Das macht die Kampagnenstruktur wichtiger als bei Meta, wo Audiences vieles auffangen.
Wie die Auslieferung funktioniert
ChatGPT Ads sind kein Keyword-System. Das System schätzt die Absicht der Unterhaltung und sucht Anzeigen, die dazu passen. Signale sind der Chat-Kontext, die Landingpage, Titel und Copy sowie die Context Hints, die du pro Ad Group hinterlegst. Context Hints beschreiben Gesprächssituationen, in denen dein Angebot relevant ist. Sie sind keine Exact-Match-Keywords und garantieren keine Auslieferung.
Ausgewählt wird über eine relevanzgewichtete Second-Price-Auktion. Das Gebot setzt du auf Ad-Group-Ebene: maximaler CPM bei Reach-Kampagnen, maximaler CPC bei Klick-Kampagnen. OpenAI empfiehlt für CPC einen Start bei 3 bis 5 US-Dollar. In meinem Konto gibt es zusätzlich das Objective Conversions mit oCPC. Abgerechnet wird auch dort pro Klick, das Gebot ist der Betrag, den du pro Conversion zahlen willst, und das System rechnet es über die erwartete Conversion-Rate in ein Klickgebot um.
Schritt 1: Pixel über den Google Tag Manager einbauen
Das OpenAI-Pixel heisst oaiq. Ich habe es als Custom-HTML-Tag im GTM angelegt, Trigger “Initialization – All Pages”, damit init sicher vor jedem Conversion-Call läuft.
<script>
window.oaiq = window.oaiq || function () {
(window.oaiq.q = window.oaiq.q || []).push(arguments);
};
oaiq("init", { pixelId: "DEINE_PIXEL_ID" });
</script>
<script async src="https://bzrcdn.openai.com/sdk/oaiq.min.js"></script>

Die Pixel-ID ist öffentlich, wie bei Meta. Der Conversions-API-Key, den du im Ads Manager ebenfalls erzeugen kannst, ist geheim und gehört nie in den Web-Container.
In der Schweiz und im EWR darf das Pixel nicht ungefragt vor der Marketing-Einwilligung feuern. Entweder blockst du den Tag über den Consent-Trigger im GTM, oder du nutzt die Consent-API des Pixels: oaiq("consent", false) vor dem Init, oaiq("consent", true) nach der Zustimmung.
Schritt 2: Lead-Conversion messen
Für Leadgenerierung ist lead_created das passende Standardereignis. Mein Kontaktformular pusht nach erfolgreichem Versand ein contact_form_submit in den dataLayer, darauf hängt ein zweiter Custom-HTML-Tag.
<script>
oaiq("measure", "lead_created", { type: "customer_action" });
</script>

Wichtig: Der Trigger muss auf den erfolgreichen Versand reagieren, nicht auf den Klick auf den Button. Sonst zählst du Validierungsfehler als Leads.

Im Ads Manager legst du dann eine benutzerdefinierte Conversion an, Datenquelle ist dein Pixel, Basisereignis lead_created. Diese Conversion bekommt eine ID, die du später für Conversion-Kampagnen brauchst.

Zur Kontrolle gibt es den Ereignisstream. Nach einem Test-Formular tauchte mein Event innert Sekunden auf, mit API-Kanal pixel_sdk und einer gehashten E-Mail unter “User data”, obwohl ich im Event keine E-Mail mitgeschickt habe. Das Pixel erkennt das Formularfeld selbst und hasht es im Browser, vergleichbar mit Enhanced Conversions bei Google.

“Oppref: Not provided” ist bei einem manuellen Test normal. oppref ist die Click-ID von OpenAI Ads, das Pendant zu gclid und fbclid. Sie kommt nur bei echten Ad-Klicks in die URL, und nur wenn du sie im Tracking-Template mitgibst. Dazu gleich mehr.
Schritt 3: Kampagnenstruktur und Creatives
Die Hierarchie ist dieselbe wie überall: Kampagne (Ziel, Budget, Länder), Ad Group (Thema, Context Hints, Gebot), Anzeige (Titel, Copy, Bild, Landingpage). Ich habe zwei Kampagnen gebaut, eine für SEO und GEO, eine für Paid Ads, mit fünf Ad Groups nach Intent: SEO-Beratung, GEO-Sichtbarkeit, Google Ads, Meta Ads und ChatGPT Ads.
Die Specs für Anzeigen sind knapp:
| Element | Vorgabe |
|---|---|
| Titel | 16 bis 24 Zeichen empfohlen, maximal 50 |
| Copy | 32 bis 48 Zeichen empfohlen, maximal 100 |
| Bild | quadratisch, PNG oder JPG, mindestens 640, maximal 1200 Pixel |
| Landingpage | erreichbar, darf OAI-AdsBot und OAI-SearchBot nicht blocken |
OpenAI rät explizit zu vielen unterschiedlichen Anzeigen pro Angebot, “build for coverage”. Nicht drei Umformulierungen derselben Aussage, sondern verschiedene Winkel: Audit, Wissenstransfer, Kostenreduktion, Betreuung. Ich habe pro Ad Group vier Anzeigen mit je eigenem Nutzenversprechen angelegt.
Beim Bild gilt: Die Anzeige wird in manchen Placements auf 64 Pixel Kantenlänge geschrumpft. Ein Gesicht oder ein grosses Logo bleibt erkennbar, Text im Bild nicht. Meine Variante mit Foto und Claim funktioniert in der grossen Ansicht, in der kleinen trägt nur das Gesicht.

Eine Option im Interface solltest du bewusst entscheiden: “Textanpassung”. Laut Beschreibung erstellt KI automatisch personalisierte und übersetzte Versionen deiner Titel und Beschreibungen, die ohne deine Prüfung ausgespielt werden können. Für einen mehrsprachigen Markt wie die Schweiz ist das verlockend, du gibst aber die Kontrolle über das Wording ab. Ich habe es zum Start ausgeschaltet.
Schritt 4: Bulk-Upload statt Klickerei
Unter Create findest du “Upload bulk” und die Excel-Vorlage mit drei Tabs: campaigns, adgroups, ads. Die Vorlage hat Beispielzeilen, die du durch deine ersetzt. Namen dürfen keine Sonderzeichen enthalten und müssen über die Tabs hinweg exakt übereinstimmen, Länder und Context Hints stehen als JSON-Array in der Zelle.
| Tab | Felder |
|---|---|
| campaigns | Name, Budget, Daily oder Lifetime, Start, Ende, Objective, Conversion-Event-ID, Länder als ["CH"] |
| adgroups | Kampagnenname, Ad-Group-Name, Max Bid, Context Hints als ["Hint 1", "Hint 2"] |
| ads | Ad-Group-Name, Titel, Copy, Landingpage-URL, Bild-URL |
Bilder lädst du nicht hoch, du verlinkst sie. Die URL muss öffentlich sein und direkt das Bild liefern. Erlaubt sind eigene Domain, Google Drive mit Link-Freigabe oder S3 und CloudFront.
Meine drei Uploads bis zum Erfolg, damit du sie überspringen kannst:
- Conversion-ID falsch. Für Conversion-Kampagnen erwartet die Spalte genau eine ID als JSON-Array. Die ID findest du im Ads Manager in der Liste der Conversions, nicht zu verwechseln mit der Pixel-ID.
- Bilder 404. Ich hatte die Bilder ins Repo gelegt, aber noch nicht deployed. OpenAI lädt beim Import jedes Bild und bricht die Anzeige ab, wenn es fehlt.
- Gebot über Budget. “Effective max bid cannot exceed the campaign daily budget.” Das Max-Gebot pro Ad Group darf das Tagesbudget der Kampagne nicht übersteigen. Mit 20 Franken Tagesbudget sind also maximal 20 Franken Gebot pro Conversion drin.
Dazu ein Detail, das die Doku verschweigt: Ein Upload braucht mindestens eine Kampagnenzeile. Wenn die Kampagnen vom ersten Versuch schon existieren, kannst du nicht einfach nur Ad Groups und Ads nachschieben. Entweder Kampagnen löschen und alles neu hochladen, oder über “Export for edit” die Datei mit den bestehenden IDs holen und dort ergänzen.
Schritt 5: UTM-Schema für ChatGPT Ads
Statische UTM-Parameter in der Landingpage-URL werden beim Klick durchgereicht. Zusätzlich gibt es zwei Felder für dynamische Parameter: auf Ad-Ebene “Abfrageparameter der Landingpage” und auf Ad-Group-Ebene “Fügt fehlende Abfrageparameter hinzu”. Letzteres kennt die Platzhalter {campaign_id}, {ad_group_id}, {ad_id}, {ad_account_id} und {oppref}. Namen gibt es nicht, nur IDs.
Mein Schema in drei Ebenen:
| Ebene | Feld | Inhalt |
|---|---|---|
| Anzeige | Landingpage | https://wismermarketing.ch/seo-geo, ohne Parameter |
| Anzeige | Abfrageparameter | utm_source=chatgpt&utm_medium=paid_ai&utm_campaign=seoGeo&utm_term=seoBeratung&utm_content=seoBeratung-v1 |
| Ad Group | Fehlende Parameter | utm_source=chatgpt&utm_medium=paid_ai&utm_campaign={campaign_id}&utm_term={ad_group_id}&utm_content={ad_id}&utm_id={campaign_id}&oppref={oppref} |
Die lesbaren Namen kommen aus der Anzeige, das Ad-Group-Template ergänzt nur, was fehlt: die Kampagnen-ID für die GA4-Dimension Kampagnen-ID und vor allem oppref. Ohne oppref in der URL kann das Pixel eine spätere Conversion nicht dem Klick zuordnen.
Zum Medium: paid_social wäre falsch, weil ChatGPT in GA4 keine Social-Quelle ist. Mit paid_ai landet der Traffic unter “Paid Other”. Ich habe in GA4 eine eigene Channel-Gruppe “Paid AI” mit der Regel Medium gleich paid_ai angelegt, dann bleibt der Kanal sauber von Paid Search und Paid Social getrennt.
Im Bulk-Workbook gibt es das Feld für Abfrageparameter nicht. Dort hängst du die UTMs direkt an die Link-URL. Das Ad-Group-Template musst du nach dem Upload pro Ad Group von Hand eintragen, bei fünf Ad Groups kein Drama.
Bestehendes Setup mit KI kopieren
Der eigentliche Hebel des Bulk-Uploads: Du musst die Struktur nicht neu erfinden. Wer bereits Meta oder Google Ads schaltet, hat Kampagnen, Zielgruppen-Logik und dutzende getestete Anzeigentexte. Die lassen sich in ein paar Minuten in das ChatGPT-Workbook übersetzen.
So habe ich es gemacht, und so würde ich es für Kund*innen machen:
- Bestehendes Setup exportieren. Mit dem Meta Ads MCP-Server oder der Google-Ads-Anbindung zieht Claude Code Kampagnen, Ad Groups und die Anzeigentexte mit den besten CTRs direkt aus dem Konto.
- Workbook schreiben lassen. Claude oder Codex bekommt die OpenAI-Vorlage, die Specs und das Exportergebnis. Daraus entstehen die drei Tabs: Kampagnen nach Business-Ziel, Ad Groups nach Intent, Anzeigen auf 24 und 48 Zeichen gekürzt, Context Hints als natürlich formulierte Gesprächssituationen statt Keyword-Listen, UTMs nach deinem Schema. Ein kurzes Script prüft die Zeichenlimits, bevor die Datei gespeichert wird.
- Bilder rendern. Quadratische Creatives aus Logo, Foto und Claim baut ein Headless-Browser aus einem HTML-Template, anschliessend auf die eigene Domain deployen.
- Hochladen und Fehler lesen. Die Fehlermeldungen sind präzise und nennen Zeile und Ursache.
- Feinschliff manuell. Was das Workbook nicht kann: UTM-Template pro Ad Group, Textanpassung pro Anzeige, Favicon im Advertiser-Account, Gebotsstärke prüfen.
Nach dem Launch
Erste Impressionen kommen laut OpenAI innert 24 Stunden, das Reporting läuft bis zu sieben Stunden hinterher. Steht eine Anzeige auf “Not serving”, zeigt der Hover den Grund, meistens Policy oder eine Landingpage, die den Crawler blockt. Reporting gibt es als Tabelle, Chart oder CSV mit Impressionen, Klicks, Spend, CTR, CPC, CPM und Conversions.
Benchmarks gibt es noch keine belastbaren. Ich baue mir die Baseline mit dem eigenen Konto und werde hier nachliefern, sobald ein paar Wochen Daten da sind.
Fazit
Das technische Setup ist an einem Abend machbar: Pixel und Lead-Event über den GTM, eine benutzerdefinierte Conversion, ein Workbook mit drei Tabs. Die Denkarbeit liegt woanders: in Context Hints, die Gesprächssituationen beschreiben, in genug unterschiedlichen Anzeigen und in einem UTM-Schema, das oppref nicht verliert. Wer ein Meta- oder Google-Ads-Konto hat, bringt das meiste Material schon mit und kann es mit Claude in Minuten übersetzen.
Häufige Fragen
Sehen meine Kund*innen in der Schweiz überhaupt Anzeigen in ChatGPT?
Ja, sofern sie ChatGPT im Free- oder Go-Plan nutzen. Zahlende Nutzer*innen sehen keine Ads. Personalisierte Ads gibt es in der Schweiz und im EWR nicht, die Auslieferung basiert nur auf dem aktuellen Chat.
Brauche ich das Pixel, wenn ich nur Klicks kaufe?
Für die Abrechnung nicht. Für Optimierung schon: Ohne Pixel und Conversion siehst du im Ads Manager nur Klicks und kannst nicht auf Leads bieten. Der GTM-Einbau dauert zehn Minuten.
Was ist oppref?
Die Click-ID von OpenAI Ads, vergleichbar mit gclid oder fbclid. Sie wird über den Platzhalter {oppref} an die Landingpage-URL gehängt, das Pixel liest sie aus und schickt sie mit dem Conversion-Event zurück. Ohne sie bleibt nur das Matching über gehashte E-Mail.
Kann ich das Workbook aus Google Ads oder Meta generieren lassen?
Ja, das ist der schnellste Weg. Claude Code mit MCP-Zugriff auf das bestehende Konto exportiert Struktur und Texte, kürzt sie auf die Limits und schreibt die drei Tabs. Was bleibt, ist der manuelle Feinschliff im Interface.