Skip to content

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-seitigohne 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)

  1. Jemand klickt auf unsere Google-Anzeige. Google hängt eine Klick-ID (gclid) an den Link.
  2. Auf unserer Seite wird diese Klick-ID server-seitig gespeichert – zusammen mit Kampagne/Quelle.
  3. Beim Registrieren und beim Anlegen der Hundeschule (Trial-Start) merkt sich das System die Herkunft am Konto.
  4. 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:

WasBeispiel
KanalGoogle Ads, Meta, organische Suche, Empfehlung, direkt
Kampagnez. B. „123Hundeschule – Suche V2"
Klick-IDdie gclid des Google-Klicks
Funnel-StufenRegistrierung · 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:

BefehlZweck
php artisan google-ads:authenticateEinmalig den Google-Zugang (Refresh-Token) erzeugen
php artisan google-ads:conversion-actionsConversion-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-conversionsOffene 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.

Verwandt

Erstellt mit ❤️ für das interne Team