Paid Ads: API-basierte Optimierung und Meta Ads Einführung
Erstellt: 8. Februar 2026
Update Juni 2026 – Conversion-Tracking ist umgesetzt
Das unten beschriebene Problem „0 Conversions / kein Tracking" ist gelöst: Wir tracken den Funnel jetzt server-seitig (ohne Cookie-Banner) und melden Conversions an Google Ads zurück. Wie das funktioniert und wie man es bedient/prüft: → Google Ads & Conversion-Tracking.
Projekt-Kontext
Tech-Stack:
- Laravel 12 mit Filament 4
- PHP 8.2+
- Livewire/Flux
- Stripe Integration bereits vorhanden
Aktuelle Situation (Analyse)
Kampagnen-Daten (April 2023 - Februar 2026):
| Metrik | Wert | Bewertung |
|---|---|---|
| Laufzeit | ca. 3 Jahre | - |
| Gesamtausgaben | 8.035,84 € | - |
| Impressionen | 1.929.853 | Gut |
| Klicks | 28.493 | Gut |
| CTR | 1,48% | OK |
| CPC | 0,28 € | Sehr günstig |
| Conversions | 0 | Kritisch! |
Ursache: Kein Conversion-Tracking eingerichtet (bewusst, um Cookie-Banner zu vermeiden)
Traffic-Verteilung vor Optimierung:
- Google Display: 80% Budget, 1,23% CTR (schlecht)
- Google Suche: 20% Budget, 14,12% CTR (gut!)
- Keywords haben Qualitätsfaktor 10/10
Top Keywords:
- "software hundeschule" - 14,99% CTR
- "hundeschule software" - 10,99% CTR
- "Hundetrainer software" - 21,74% CTR (pausiert!)
Google Ads API Credentials
Alle Credentials wurden erfolgreich eingerichtet:
# .env Konfiguration für Laravel
GOOGLE_ADS_DEVELOPER_TOKEN=PwKvpuoMWHM4eS3TNQcRQg
GOOGLE_ADS_CLIENT_ID=1055782587530-nt2d1htvl5f6c3lvp8bcqd6r2ae8sfbh.apps.googleusercontent.com
GOOGLE_ADS_CLIENT_SECRET=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
GOOGLE_ADS_REFRESH_TOKEN=1//04oauh2I3x8KGCgYIARAAGAQSNwF-L9IrRY964RymtsoHohKSMfBnHZYdnu_KvfNNrGjNXbJylILpIFH6vveOWnD33LMPA2iDV1o
GOOGLE_ADS_CUSTOMER_ID=6741152732
GOOGLE_ADS_LOGIN_CUSTOMER_ID=5114699748Google Cloud Projekt: 123Hundeschule-Ads
MCC-Kundennummer: 511-469-9748
Ads-Kundennummer: 674-115-2732
Phase 1: Google Ads API Setup ✅ ABGESCHLOSSEN
- [x] MCC-Verwaltungskonto erstellt
- [x] Developer Token erhalten
- [x] Google Cloud Projekt eingerichtet
- [x] OAuth2 Credentials (Webanwendung) erstellt
- [x] Refresh Token via OAuth Playground generiert
- [x] Display-Netzwerk in Kampagne deaktiviert
Phase 2: Laravel Integration (Server-side Enhanced Conversions)
2.1 Composer Package installieren
composer require googleads/google-ads-php2.2 Laravel Config erstellen
Neue Datei: config/google-ads.php
<?php
return [
'developer_token' => env('GOOGLE_ADS_DEVELOPER_TOKEN'),
'client_id' => env('GOOGLE_ADS_CLIENT_ID'),
'client_secret' => env('GOOGLE_ADS_CLIENT_SECRET'),
'refresh_token' => env('GOOGLE_ADS_REFRESH_TOKEN'),
'customer_id' => env('GOOGLE_ADS_CUSTOMER_ID'),
'login_customer_id' => env('GOOGLE_ADS_LOGIN_CUSTOMER_ID'),
];2.3 Migration für GCLID-Tracking
php artisan make:migration add_gclid_to_customers_table// database/migrations/xxxx_add_gclid_to_customers_table.php
Schema::table('customers', function (Blueprint $table) {
$table->string('gclid')->nullable()->after('email');
$table->string('fbclid')->nullable()->after('gclid'); // Für Meta Ads
$table->timestamp('ad_click_at')->nullable();
});2.4 GCLID Middleware erstellen
Neue Datei: app/Http/Middleware/TrackAdClicks.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class TrackAdClicks
{
public function handle(Request $request, Closure $next)
{
// Google Ads GCLID
if ($gclid = $request->query('gclid')) {
session(['gclid' => $gclid, 'ad_click_at' => now()]);
}
// Meta Ads FBCLID
if ($fbclid = $request->query('fbclid')) {
session(['fbclid' => $fbclid, 'ad_click_at' => now()]);
}
return $next($request);
}
}2.5 Google Ads Service erstellen
Neue Datei: app/Services/GoogleAdsService.php
<?php
namespace App\Services;
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsClient;
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsClientBuilder;
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder;
use Google\Ads\GoogleAds\V18\Services\UploadConversionAdjustmentsRequest;
class GoogleAdsService
{
private GoogleAdsClient $client;
public function __construct()
{
$oAuth2Credential = (new OAuth2TokenBuilder())
->withClientId(config('google-ads.client_id'))
->withClientSecret(config('google-ads.client_secret'))
->withRefreshToken(config('google-ads.refresh_token'))
->build();
$this->client = (new GoogleAdsClientBuilder())
->withDeveloperToken(config('google-ads.developer_token'))
->withLoginCustomerId(config('google-ads.login_customer_id'))
->withOAuth2Credential($oAuth2Credential)
->build();
}
public function uploadConversion(string $email, ?string $gclid, string $conversionAction): void
{
// Enhanced Conversion Upload Implementation
// Siehe vollständige Implementierung im Code
}
}2.6 Event Listener für Registrierungen
Bei erfolgreicher Customer-Registrierung Conversion an Google senden:
// app/Listeners/SendGoogleAdsConversion.php
<?php
namespace App\Listeners;
use App\Events\CustomerRegistered;
use App\Services\GoogleAdsService;
class SendGoogleAdsConversion
{
public function handle(CustomerRegistered $event): void
{
$customer = $event->customer;
if ($customer->gclid) {
app(GoogleAdsService::class)->uploadConversion(
email: $customer->email,
gclid: $customer->gclid,
conversionAction: 'Registrierung'
);
}
}
}2.7 Conversion-Aktion in Google Ads erstellen
Im Google Ads UI (Tools → Conversions → Neue Conversion-Aktion):
- Name: "Registrierung"
- Kategorie: "Anmeldung"
- Wert: 50 € (geschätzter Customer Value)
- Zählmethode: "Eine" (pro User)
- Attribution: Datengetrieben oder linear
Phase 3: Google Ads Kampagne optimieren
3.1 Display-Netzwerk deaktivieren ✅ ERLEDIGT
- [x] Kampagne → Einstellungen → Netzwerke
- [x] "Google Displaynetzwerk" deaktiviert
- [x] Nur noch "Google Suche" aktiv
Erwarteter Effekt: Budget konzentriert sich auf Suchnetzwerk (14% CTR vs 1,23%)
3.2 Keywords reaktivieren/optimieren
Pausierte Keywords reaktivieren:
- "Hundetrainer software" (21,74% CTR!) - REAKTIVIEREN
- "hundeschule app" - prüfen
Neue Keywords hinzufügen:
- "software hundeschule kostenlos testen"
- "kursverwaltung hundetrainer"
- "terminbuchung hundeschule"
- "buchungssystem hundetraining"
- "hundeschule verwaltung online"
- "hundetrainer terminplanung"
3.3 Anzeigentexte erweitern
Aktuelle 10 Headlines auf 15 erweitern:
Neue Headlines:
- "30 Tage kostenlos testen"
- "Ohne Kreditkarte starten"
- "400+ Hundeschulen vertrauen uns"
- "Weniger Büro, mehr Training"
- "Automatische Rechnungen"
- "Online-Buchungskalender"
- "DSGVO-konform & sicher"
- "Support aus Deutschland"
Neue Beschreibungen:
- "Verwalte Kurse, Kunden & Rechnungen an einem Ort. 30 Tage kostenlos testen."
- "Die All-in-One Software für Hundetrainer. Mehrfachkarten, Buchungskalender & mehr."
3.4 Gebotsstrategie anpassen (NACH Conversion-Tracking)
Sobald Conversions gemessen werden:
- Von "Klicks maximieren" auf "Conversions maximieren" umstellen
- Nach 30+ Conversions: Ziel-CPA festlegen
Phase 4: Meta Ads mit Conversions API (nach Google Ads)
4.1 Meta Business Manager einrichten
- https://business.facebook.com → Account erstellen
- Facebook-Seite "123Hundeschule" verknüpfen
- Instagram Business-Account verknüpfen
- Werbekonto erstellen
- Domain verifizieren (Brand Safety → Domains)
4.2 Meta Conversions API (Server-side, kein Pixel)
Composer Package:
composer require facebook/php-business-sdkLaravel Config: config/meta-ads.php
<?php
return [
'pixel_id' => env('META_PIXEL_ID'),
'access_token' => env('META_ACCESS_TOKEN'),
];Service: app/Services/MetaAdsService.php
<?php
namespace App\Services;
use FacebookAds\Api;
use FacebookAds\Object\ServerSide\Event;
use FacebookAds\Object\ServerSide\EventRequest;
use FacebookAds\Object\ServerSide\UserData;
class MetaAdsService
{
public function __construct()
{
Api::init(null, null, config('meta-ads.access_token'));
}
public function sendConversion(string $email, ?string $fbclid): void
{
$userData = (new UserData())
->setEmail(hash('sha256', strtolower(trim($email))))
->setFbc($fbclid);
$event = (new Event())
->setEventName('CompleteRegistration')
->setEventTime(time())
->setUserData($userData)
->setEventSourceUrl('https://123hundeschule.de')
->setActionSource('website');
$request = (new EventRequest(config('meta-ads.pixel_id')))
->setEvents([$event]);
$request->execute();
}
}4.3 Kampagnenstruktur (Budget < 500 €/Monat)
Meta Ads Account
└── Kampagne: Conversions - Registrierungen
└── Ad Set: Interessen-Targeting DACH
├── Interessen: Hundeschule, Hundetraining, Selbstständigkeit, Kleinunternehmen
├── Alter: 25-55
├── Region: Deutschland, Österreich, Schweiz
└── Ads: 3-4 verschiedene Creatives4.4 Creative-Anforderungen
Bildformate:
- 1080x1080 (Feed quadratisch)
- 1080x1350 (Feed vertikal - beste Performance)
- 1080x1920 (Stories/Reels)
Creative-Konzepte:
- Problem-Fokus: "Zettelwirtschaft? WhatsApp-Chaos?"
- Software-Demo: Dashboard/Kalender-Screenshots
- Testimonial: Kundenzitat + Foto
- Vergleich: Vorher/Nachher (Chaos vs. Ordnung)
Implementierungs-Checkliste
Phase 1-2: Google Ads
- [x] MCC-Konto erstellt
- [x] Developer Token erhalten
- [x] OAuth2 Credentials erstellt
- [x] Refresh Token generiert
- [x] Display-Netzwerk deaktiviert
- [ ]
.envmit Google Ads Credentials konfigurieren - [ ]
composer require googleads/google-ads-php - [ ] Config
config/google-ads.phperstellen - [ ] Migration für
gclidSpalte - [ ] Middleware
TrackAdClickserstellen - [ ] Service
GoogleAdsServiceerstellen - [ ] Conversion-Aktion in Google Ads erstellen
- [ ] Event Listener für Registrierungen
Phase 3: Kampagne optimieren
- [x] Display-Netzwerk deaktiviert
- [ ] Keywords reaktivieren ("Hundetrainer software")
- [ ] Neue Keywords hinzufügen
- [ ] Headlines auf 15 erweitern
- [ ] Nach Conversion-Tracking: Gebotsstrategie umstellen
Phase 4: Meta Ads (NACH 2-4 Wochen Google)
- [ ] Meta Business Manager einrichten
- [ ] Domain verifizieren
- [ ] Conversions API implementieren
- [ ] Creatives erstellen lassen
- [ ] Erste Kampagne starten
Dateistruktur für Implementation
app/
├── Services/
│ ├── GoogleAdsService.php # Google Ads API Client
│ └── MetaAdsService.php # Meta Conversions API Client
├── Http/
│ └── Middleware/
│ └── TrackAdClicks.php # GCLID/FBCLID Tracking
├── Listeners/
│ ├── SendGoogleAdsConversion.php
│ └── SendMetaAdsConversion.php
└── Events/
└── CustomerRegistered.php # (falls nicht vorhanden)
config/
├── google-ads.php
└── meta-ads.php
database/migrations/
└── xxxx_add_ad_tracking_to_customers_table.phpZeitplan
gantt
title Paid Ads Implementation
dateFormat YYYY-MM-DD
section Google Ads
Laravel Integration :a1, 2026-02-08, 3d
Conversion-Aktion :a2, after a1, 1d
Keywords optimieren :a3, after a1, 2d
Daten sammeln :a4, after a2, 21d
section Meta Ads
Business Manager :b1, after a4, 2d
Conversions API :b2, after b1, 2d
Creatives erstellen :b3, after b1, 7d
Kampagne starten :b4, after b3, 1d