Kurz-Antwortblock
- Was? Wiederkehrende Aufgaben mit Regeln, Bulk-Edits und Google Ads Skripten automatisieren.
- Warum? Zeit sparen, Reaktionsgeschwindigkeit erhöhen, Fehler minimieren, Skalierung ermöglichen.
- Wie? Standardfälle via Regeln/Bulk, komplexe Logik via Skripte (JavaScript/AdsApp).
- Best Practices: Labels & Namenskonventionen, „Dry-Run“ testen, E-Mail-Alerts, Versionskontrolle.
- Compliance: Richtlinien & Consent/Tracking respektieren; Skripte dürfen keine Policies umgehen.
Automatisierungsoptionen
1) Automatisierte Regeln
Aktionen zeit-/ereignisbasiert auslösen (z. B. Kampagne pausieren, wenn Kosten > Ziel-CPA; E-Mail senden, wenn Impression Share < x %).
2) Bulk-Edits
Massenänderungen direkt im Interface (Suchen/Ersetzen, Gebote/Labels anpassen, CSV-Uploads). Ideal für strukturierte Anpassungen.
3) Google Ads Skripte
JavaScript-basierte Automatisierung mit AdsApp (im Konto unter „Skripte“). Unterstützt Planungen (stündlich/täglich), E-Mail, Spreadsheet-I/O, komplexe Logik.
4) (Optional) Google Ads API
Für Enterprise-Integrationen & Custom-Tools (Entwicklerressourcen nötig). Für die meisten Konten reichen Regeln/Skripte.
Labels & Naming-Konventionen
- Label-Schlüssel:
OBJ:Brand,OBJ:Non-Brand,GEO:DE,PRIO:High,TEST:Exp-2025Q3. - Namen strukturieren:
[Netz]-[Ziel]-[Thema]-[Geo]-[Match](z. B. SEA-Lead-CRM-DE-Phrase). - Skripte nutzen Labels: Filter für Ziele, Ausschlüsse, Experimente; erzeugen Änderungs-Logs (z. B. AUTO:Paused-HC).
Sicherheits-Guidelines & Guardrails
- Dry-Run: Skript zuerst ohne Änderungen ausführen (nur Report/E-Mail), dann live schalten.
- Limits: Tages-/Änderungs-Limits definieren (z. B. max. 50 Entitäten/Run).
- Zeitraum-Fenster: Entscheidungen auf ≥7-Tage-Datenbasis; Feiertage/Sales ausklammern.
- Rollbacks & Logs: Jede Änderung protokollieren (Spreadsheet/Label/Notiz) + Rückgängig-Option.
- Policy & Datenschutz: Keine dynamischen Texte mit verbotenen Inhalten; Tracking/Consent unangetastet lassen.
So setzt du es um (Schritt-für-Schritt)
A) Regel: Budget-Warnung
- Tools → Regeln öffnen, „E-Mail senden, wenn …“ wählen.
- Bedingung: Kosten (heute) > 2× Tagesbudget oder IS (Budget) > 30 %.
- Planung: stündlich; Empfänger: Ops-Liste.
B) Bulk-Edit: Labels hinzufügen
- Kampagnen filtern (z. B. Non-Brand DE), alle auswählen.
- Bearbeiten → Labels → OBJ:Non-Brand, GEO:DE zuweisen.
- Speichern; als gespeicherte Ansicht sichern.
C) Skript: Workflow
- Tools → Skripte → Neu → Berechtigungen erteilen.
- Code einfügen (siehe Beispiele), Spreadsheet-URL & Empfänger setzen.
- „Vorschau“ testen (Dry-Run), dann Planung aktivieren (z. B. täglich 08:00).
Tabelle: Use Cases & passende Methode
| Use Case | Methode | Vorteil | Risiko/Guardrail |
|---|---|---|---|
| Wochenend-Pause / Aktionsende | Regel | Schnell, UI-basiert | Enddatum/Zeitzone prüfen |
| Massennamen/Labels ändern | Bulk-Edit | Sehr effizient | Vorher Filter testen |
| Budget-Pacing-Alert | Skript | E-Mail/Sheet-Report | Dry-Run & Limits |
| Schwache Anzeigen pausieren | Skript | Konsistent | CV-Schwelle & Zeitraum absichern |
| Feed-/LP-Checks | Skript/API | Autom. QA | Timeouts, Rate-Limits |
Skript-Beispiele (Code)
1) Budget-Pacing-Alert (E-Mail & Spreadsheet)
Hinweis: Werte/Empfänger/Spreadsheet-ID anpassen. Erst im „Vorschau/Dry-Run“ prüfen.
// Google Ads Skript – Budget Pacing Alert
function main() {
var EMAIL = "ops@dein-team.de";
var SPREADSHEET_URL = "https://docs.google.com/spreadsheets/d/DEINE_ID/edit";
var today = new Date();
var firstDay = new Date(today.getFullYear(), today.getMonth(), 1);
var spentThisMonth = 0, budgetThisMonth = 0;
var it = AdsApp.campaigns().withCondition("Status = ENABLED").get();
var rows = [["Kampagne","Kosten (Monat)","Tagesbudget","IS (Budget)"]];
while (it.hasNext()) {
var c = it.next();
var stats = c.getStatsFor(firstDay, today);
var cost = stats.getCost();
var isBudget = c.getBudgetLostImpressionShare(); // ggf. null
spentThisMonth += cost;
budgetThisMonth += c.getBudget().getAmount() * daysPassedInMonth_(today);
rows.push([c.getName(), cost, c.getBudget().getAmount(), isBudget]);
}
var pacing = spentThisMonth / Math.max(1, budgetThisMonth);
var subject = "[Ads] Pacing " + (pacing*100).toFixed(0) + "% – " + Utilities.formatDate(today, AdsApp.currentAccount().getTimeZone(), "YYYY-MM-dd");
var body = "Gesamtausgaben MTD: " + spentThisMonth.toFixed(2) + " | Soll: " + budgetThisMonth.toFixed(2) + " | Pacing: " + (pacing*100).toFixed(0) + "%";
try {
var sheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL).getActiveSheet();
sheet.clear();
sheet.getRange(1,1,rows.length,rows[0].length).setValues(rows);
} catch(e) {}
if (pacing > 1.15 || pacing < 0.75) {
MailApp.sendEmail(EMAIL, subject, body);
}
}
function daysPassedInMonth_(d){ return d.getDate(); }
2) Niedrig performende Anzeigen pausieren (sicher mit Mindestdaten)
Beispiel: pausiere RSAs mit ≥1 000 Impressionen, CTR < 1,5 % und 0 Conversions in den letzten 30 Tagen. Vorher Labels setzen.
// Google Ads Skript – Low Performer Ads pausieren
function main(){
var MIN_IMPR = 1000, CTR_CUTOFF = 0.015;
var dateRange = "LAST_30_DAYS";
var labelPaused = "AUTO:Paused-LowCTR";
var ads = AdsApp.ads()
.withCondition("CampaignStatus = ENABLED")
.withCondition("AdGroupStatus = ENABLED")
.withCondition("Status = ENABLED")
.forDateRange(dateRange)
.withCondition("Impressions >= " + MIN_IMPR)
.get();
while (ads.hasNext()){
var ad = ads.next();
var stats = ad.getStatsFor(dateRange);
var ctr = stats.getCtr(); // 0..1
var conv = stats.getConversions(); // Zahl
if (ctr < CTR_CUTOFF && conv === 0){
ad.pause();
ad.applyLabel(labelPaused);
}
}
}
Varianten: Statt pausieren nur Label setzen (zweistufiger Prozess); Mindest-Conversions fordern; nach Gerät/Netz/Geo segmentieren.
Mini-Case
Ausgangslage: Retail-Konto (DE/AT), 120 Kampagnen. Manuelle Pacing-Kontrolle & Anzeigenreviews kosteten ~6 Std/Woche.
- Implementiert: Budget-Pacing-Alert + Low-Performer-Labeling (2-stufig), Wochenend-Pause-Regel, Bulk-Label-Harmonisierung.
- Ergebnis (8 Wochen): −75 % Ops-Zeit, Reaktionszeit auf Budgetabweichungen < 1 h, CTR +9 % (durch konsequentes Anzeigen-Hygiene).
Checkliste & Fehler vermeiden
Checkliste
- Namenskonvention & Label-System definiert
- Regeln für Standardfälle (Pause/Alerts) aktiv
- Skripte mit Dry-Run getestet und geplant
- Änderungs-Logs & Rollback-Pfad vorhanden
- Policy/Consent/Tracking nicht verletzt
Fehler vermeiden (Anti-Pattern)
- „Alles sofort pausieren“ ohne Mindestdaten/Zeitraum
- Keine Limits/Logs → schwer rückgängig zu machen
- Ungeprüfte Massen-Suchen/Ersetzen im Bulk
- Skripte ohne E-Mail-Alert & Ownership
FAQ
- Wie oft können Skripte laufen?
- Typisch stündlich/täglich/benutzerdefiniert planbar. Wähle Frequenz nach Use Case und Quoten.
- Brauche ich Entwicklerwissen?
- Für Regeln/Bulk: nein. Für Skripte: grundlegendes JavaScript und AdsApp-Objektmodell genügen.
- Wie teste ich sicher?
- „Vorschau/Dry-Run“, nur Labeln statt Pausieren, Separates Test-Label & Limit je Durchlauf.
- Können Skripte Policy-Ablehnungen beheben?
- Nein. Skripte dürfen Policies nicht umgehen; sie können aber markieren/alarmieren.
- Wann Ads API statt Skript?
- Bei sehr großen Konten, komplexer Datenintegration, Near-Real-Time-Anforderungen.
Externe Quellen
- Google Ads Hilfe – Automatisierte Regeln (abgerufen am 07.09.2025)
- Google Ads Hilfe – Bulk-Bearbeitung (abgerufen am 07.09.2025)
- Google Ads Scripts Doku (abgerufen am 07.09.2025)
- Google Ads API – Einstieg (abgerufen am 07.09.2025)
