Skill
PMax-Kampagnen-Ersteller
--- name: pmax-campaign-creator description: Erstellt eine vollständige Performance-Max-Kampagne für einen Golfclub inklusive Texten, Sitelinks, Search Themes und Zielgruppensignal
SKILL.md
---
name: pmax-campaign-creator
description: Erstellt eine vollständige Performance-Max-Kampagne für einen Golfclub inklusive Texten, Sitelinks, Search Themes und Zielgruppensignalen (nur Bilder/Logo/Video werden vom Menschen geliefert). Nutze diesen Skill wenn eine neue PMax-Kampagne für einen Golfclub geplant oder ausgeführt werden soll.
---
# PMax-Kampagnen-Ersteller
Zwei Skill-Definitionen als feste Kette: Planung erzeugt einen Entwurf, Ausführung mutiert erst nach expliziter Freigabe.
## Skill-Definitionen
| Feld | `pmax_campaign_planner` | `pmax_campaign_execute` |
|---|---|---|
| **Plattform** | google_ads / performance_max | google_ads / performance_max |
| **Kategorie** | `planner` | `execute` |
| **Erlaubte Provider-Tools** | keine (Chat sammelt nur Daten, keine Mutation) | PMax-Create-Tool des Ads-Providers, danach Refresh-Tools zum Rücklesen |
| **LLM-Einsatz** | Ja — Text-/Sitelink-Varianten, Rückfragen, Vollständigkeitsprüfung erklären | Nein — reine deterministische Ausführung nach Bestätigung |
| **Berechtigung** | `draft` für den Client | `approve` für den Client |
| **Bestätigungspflicht** | Ergebnis ist `change_request`, keine Mutation | Erst nach expliziter Freigabe, Standardstatus `PAUSED` |
| **Ausgabeschema** | vollständiger Kampagnenentwurf (siehe unten) als `diff` im `change_request` | `api_result[]` je Teiloperation + zurückgelesene Resource-IDs |
## Qualifikationsprüfung vor Kampagnenstart
Vor jedem PMax-Planungslauf kurz prüfen, ob PMax für diesen Golfclub überhaupt sinnvoll ist — **bei ~400 €/Monat Budget pro Club ist das keine Formsache**, folgende Schwellenwerte werden regelmäßig unterschritten:
| Faktor | Übliche Schwelle | Konsequenz bei Unterschreitung |
|---|---|---|
| Budget | 5.000 €+/Monat gilt als komfortabel | Bei 400 €/Monat: PMax **ergänzend**, nicht als einzige Kampagne — immer parallel eine Brand-/Angebots-Search-Kampagne mit hoher Impression Share halten |
| Conversion-Volumen | 30+ qualifizierte Leads/Monat für stabilen Lerneffekt | Bei Neustart eines Clubs: Erwartungen dämpfen, Skill weist explizit auf "Lernphase, noch keine verlässliche Optimierung" hin |
| Bestehende Search-Performance | PMax setzt auf funktionierender Search-Historie auf | Ohne vorherige Search-Daten: PMax-Start als Experiment kennzeichnen, nicht als Regelfall |
Der Skill gibt bei Unterschreitung **keinen Show-Stopper**, sondern einen sichtbaren Hinweis im Entwurf ("Konto hat noch <30 Conversions/Monat — PMax-Lernphase wird länger dauern als üblich").
## Pflicht-Governance-Einstellungen (nicht verhandelbar)
Diese Werte werden vom Skill **immer** gesetzt, unabhängig davon, was im Chat besprochen wurde:
| Einstellung | Wert | Begründung |
|---|---|---|
| URL-Erweiterung | AUS | Verhindert Streuverluste auf irrelevante Unterseiten (Blog etc.) |
| Standort-Targeting | "Personen in", nicht "Interesse an" | Standard-Fehleinstellung vermeiden, Reichweite bleibt lokal |
| Markenausschluss | Markenname des eigenen Golfclubs **und** bekannter Wettbewerber-Golfclubs in der Region als exaktes Negativ | Verhindert Brand-Kannibalisierung — ein PMax-ROAS, der nur die eigenen Brand-Suchen abgreift, ist kein echter Erfolg |
| Automatische Google-Textanpassung (KI-gestützte Anzeigenoptimierung durch Google selbst) | nie aktiviert | Der Anzeigentext, der freigegeben wurde, muss auch der Anzeigentext sein, der live geht — sonst unterläuft es die Freigabe |
## Pflichtfelder, die der Planer sammeln muss (mindestens)
| Feld | Pflicht/Optional | Anmerkung |
|---|---|---|
| Unternehmensname | Pflicht | fest, ändert sich selten |
| Ziel-URL | Pflicht | Landingpage des Angebots |
| Budget (Tagesbudget) | Pflicht | Bei 400 €/Monat realistisch ca. 13 €/Tag |
| Gebotsziel | Pflicht | Bei Neustart: "Conversions maximieren" ohne Ziel-CPA, erst nach 30+ Conversions auf Ziel-CPA wechseln |
| Conversion-Ziel | Pflicht | Muss auf eine gültige, dem Konto zugeordnete Conversion Action zeigen — keine Kampagne ohne gültige Zuordnung aktivierbar |
| 3 Titel (Headlines) | Pflicht min. | KI schlägt vor, Mensch bestätigt/ändert |
| 1 langer Titel | Pflicht min. | |
| 2 Beschreibungen | Pflicht min. | |
| 1 Bild, 1 Logo | Pflicht min. | **Von Menschen geliefert — keine automatische Bildgenerierung in diesem Skill** |
| Sitelinks (2-4) | Empfohlen | KI schlägt Struktur vor (z. B. "Preise", "Kursinhalte", "Kontakt") |
| Search Themes (Signal, kein Targeting!) | Empfohlen | Übernahme aus dem Keyword-Cluster-Skill statt Neuerfindung |
| Zielgruppensignale | Optional, empfohlen | Eigene Kundendaten (falls vorhanden), sonst leer lassen, nicht erfinden |
| Video | Optional | Wenn keins vorhanden: Feld bewusst leer, PMax kann ohne Video laufen (kein Blocker) |
## Textliche Leitplanken (gelten für alle PMax-Text-Assets)
- Keine unbelegten Superlative ("Bester Golfkurs") — Werberecht-Risiko
- Jede Textvariante deckt einen anderen Zweck ab (Keyword/Nutzen/Vertrauen/CTA) statt Wiederholung — Diversität statt austauschbarer Varianten
- Lokalbezug (Ort des Golfclubs) in mindestens einem Titel
## Ausführung (`pmax_campaign_execute`)
1. Nutzer bestätigt den `change_request` explizit (Freigabe-Workflow, Selbstfreigabe erlaubt)
2. Direkter, deterministischer Aufruf des PMax-Create-Tools über den Provider-Adapter — **kein LLM in diesem Schritt**
3. Standardstatus der angelegten Kampagne: **PAUSED** — nie automatisch live
4. Fehlt für ein Pflichtfeld ein verifizierter Ausführungspfad (z. B. eine bestimmte Sitelink-Variante), blockiert der Executor mit konkreter Fehlermeldung, statt eine unvollständige Kampagne als erfolgreich zu vermelden
5. Nach Erfolg: Refresh-Call liest die angelegte Kampagne/Asset-Gruppe zurück und aktualisiert das lokale Inventar
## Persistenz
- `change_request`: `entity_type: campaign`, `action: create`, `diff` enthält den vollständigen Entwurf (alle Felder oben), Referenz auf die genutzte Template-Version
- Nach Ausführung: neue Zeile in der lokalen fachlichen Kampagnentabelle + PMax-spezifische Detailtabelle (Asset-Gruppen-Struktur)
- `api_result` protokolliert jede Teiloperation einzeln (Kampagne, Asset-Gruppe, Assets, Signale) mit Resource-ID bei Erfolg / Fehlermeldung bei Misserfolg
- Datenquelle (welcher Ausführungsweg/Provider genutzt wurde) wird als Metadatum an Sync-Lauf und Snapshot-Daten mitgeführt, damit später nachvollziehbar bleibt, woher eine Kampagne stammt
## Guardrails
- Niemals Bilder/Videos erfinden oder platzhalterhaft aus dem Internet ziehen — Skill fragt aktiv danach und blockiert bei Fehlen, statt zu improvisieren
- Niemals automatische Google-seitige Textanpassung aktivieren
- Niemals Wettbewerber-Markennamen als Search-Theme/Signal verwenden, außer explizit einzeln vom Menschen freigegeben
- Bei ROAS/CPA, das sofort verdächtig gut aussieht: auf Brand-Kannibalisierung prüfen (Anteil eigener Brand-Suchen an den PMax-Conversions), bevor die Kampagne als Erfolg gilt
## Technische Ausführungsroute
1. **Skills → PMax-Kampagne planen** startet einen kontextgebundenen Planner-Run mit Golfclub, verbundenem Google-Ads-Konto und gewählter PMax-Template-Version. Der Lauf sammelt Daten, macht Textvorschläge und validiert Pflichtfelder, mutiert aber nichts.
2. Das bestätigte Ergebnis wird über den bestehenden PMax-Change-Request-Endpunkt als vollständiger `change_request` gespeichert. Der Request trägt alle finalen Assets, Signale, Conversion-Action und Template-Version.
3. Nach Freigabe ruft ein deterministischer `pmax_campaign_execute`-Worker ausschließlich den Pipeboard-Google-Ads-Adapter auf. Er legt die Kampagne standardmäßig `PAUSED` an, protokolliert jede Teiloperation in `api_result` und bricht bei einem fehlenden Pflichtpfad ab.
4. Ein direkter Pipeboard-Refresh liest Kampagne und Asset-Gruppe zurück in den lokalen Google-Ads-Bestand. Erst dieser Refresh markiert die Ausführung als vollständig erfolgreich.
