Google Ads & Conversion-Tracking
🟡 In Einführung · Owner: noch offen · Erstellt: Juni 2026 · Zuletzt geprüft: 2026-06-09
Wie wir nachvollziehen, welche Google-Anzeige am Ende eine zahlende Hundeschule bringt – und wie diese Info automatisch zurück an Google fließt, damit die Kampagnen darauf optimieren.
Diese Seite beantwortet
- Welche Anzeige/Kampagne bringt nicht nur Klicks, sondern echte Kund:innen?
- Wie kommt diese Info zurück zu Google Ads?
- Was muss laufen, und wo prüfe ich, ob es funktioniert?
Das Problem, das wir gelöst haben
Wir haben ~3 Jahre Google Ads geschaltet (viele Klicks, guter CPC) – aber 0 gemessene Conversions. Grund: Es war bewusst kein Tracking eingebaut, um einen Cookie-Banner zu vermeiden. Google wusste also nie, welche Klicks zu Kund:innen wurden, und konnte nicht optimieren (Details/Strategie: Paid-Ads-Plan).
Jetzt: Wir tracken den kompletten Funnel server-seitig – ohne Drittanbieter-Pixel, ohne JavaScript-Tracking. Einziges Cookie ist ein eigenes First-Party-Cookie (ad_tracking, 90 Tage), das die Herkunft inkl. gclid über den Trial-Zeitraum hält.
Wie es funktioniert (einfach)
- Jemand klickt auf unsere Google-Anzeige. Google hängt eine Klick-ID (gclid) an den Link.
- Auf unserer Seite wird diese Klick-ID server-seitig gespeichert – zusammen mit Kampagne/Quelle.
- Beim Registrieren und beim Anlegen der Hundeschule (Trial-Start) merkt sich das System die Herkunft am Konto.
- Schließt die Hundeschule nach den 30 Tagen ein Abo ab, meldet unser System die Conversion automatisch zurück an Google Ads – inkl. Wert des Abos.
→ Der ganze Weg ist die Funnel-Seite: Klick → Registrierung → Trial → Abo.
Warum server-seitig (und nicht der übliche Pixel)?
Die wichtige Conversion – das bezahlte Abo – passiert erst ~30 Tage nach dem Klick, oft auf einem anderen Gerät. Ein klassischer Browser-Pixel kann das gar nicht erfassen. Wir speichern stattdessen die Klick-ID (gclid) – in der Session und in einem First-Party-Cookie (90 Tage), damit sie auch überlebt, wenn jemand erst Tage später registriert – und melden die Conversion später nach („Offline Conversion Import").
DSGVO prüfen
Das ad_tracking-Cookie ist zwar first-party und kein Werbe-/Tracking-Pixel, aber die gclid ist ein Online-Identifier. Ob es einwilligungsfrei (ohne Cookie-Banner) zulässig ist, rechtlich prüfen und in der Datenschutzerklärung abdecken → Datenschutz / DSGVO.
Was getrackt wird
Pro Interessent:in halten wir fest:
| Was | Beispiel |
|---|---|
| Kanal | Google Ads, Meta, organische Suche, Empfehlung, direkt |
| Kampagne | z. B. „123Hundeschule – Suche V2" |
| Klick-ID | die gclid des Google-Klicks |
| Funnel-Stufen | Registrierung · Trial-Start · Abo (mit Wert) |
Das System ist kanal-neutral gebaut: Meta Ads & weitere Kanäle lassen sich später ohne Umbau ergänzen.
Wohin die Daten fließen
- Die Herkunft wird am Konto der Hundeschule gespeichert.
- Sie fließt über die bestehende Pipeline ins CRM – jede:r Kund:in bekommt Kanal/Kampagne/Klick-ID.
- Damit ist auswertbar: Welche Kampagne bringt zahlende Kund:innen (nicht nur Klicks)? Auswertung siehe Kennzahlen & Reporting.
- An Google Ads gehen nur zwei Conversions zurück: Trial-Start und Abo (mit Planwert).
Das Google-Ads-Konto
- Werbekonto „Janzen & Strauß GbR"
674-115-2732– hier laufen Kampagnen und liegen die Conversions. - Verwaltungskonto (MCC) „Orlyapps"
511-469-9748– nur der Zugang. - Zwei Conversion-Aktionen im Werbekonto:
- 123Hundeschule Trial Started (Kategorie Registrierung) – die kostenlose Testversion.
- 123Hundeschule Kauf (Kategorie Kauf) – das bezahlte Abo, mit Wert.
- Diese Aktionen sind als Kampagnenziele verknüpft, damit Smart Bidding auf zahlende Kund:innen optimiert.
Zugänge
API-Schlüssel, Developer-Token & Refresh-Token stehen nicht hier, sondern im Passwort-Manager → Zugänge & Schlüssel. Hier nur die Konto-Nummern (kein Geheimnis).
Betrieb (für Technik)
Das Tracking läuft automatisch in der SaaS-App; der Upload an Google ist ein Hintergrund-Job (alle 10 Min). Hilfs-Befehle in der App:
| Befehl | Zweck |
|---|---|
php artisan google-ads:authenticate | Einmalig den Google-Zugang (Refresh-Token) erzeugen |
php artisan google-ads:conversion-actions | Conversion-Aktionen + IDs auflisten |
php artisan google-ads:campaign-goals <ID> | Conversion-Ziele einer Kampagne prüfen / (mit --apply) verknüpfen |
php artisan system:report-pending-conversions | Offene Conversions manuell nachmelden |
Erfolg prüfen: In der zentralen Tabelle conversion_events steht pro Ereignis ein report_status (sent = an Google übertragen, skipped = keine Klick-ID/Stufe nicht gemappt, failed = Fehler mit Begründung). In Google Ads erscheinen Offline-Conversions mit einigen Stunden Verzögerung.
Technische Setup-Anleitung & ein Schritt-für-Schritt-Testszenario (Tracking end-to-end ausprobieren) liegen im app-Repo: docs/SETUP_GOOGLE_ADS.md.
Stand & To-do
- ✅ Tracking-Pipeline gebaut (App + CRM), Google-Ads-Konto eingerichtet, Conversion-Aktionen verknüpft.
- ⏳ Live-Deploy der App + CRM, Produktiv-Zugänge in der Server-Konfiguration setzen.
- ⏳ Beim ersten echten Upload prüfen, ob der API-Zugriffslevel reicht (sonst „Basic Access" bei Google beantragen).
- 🔭 Später: Meta Ads über denselben Mechanismus, weitere Kampagnen mit den Conversion-Zielen verknüpfen.
