Automatisierung & Skripte in Google Ads

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

  1. Tools → Regeln öffnen, „E-Mail senden, wenn …“ wählen.
  2. Bedingung: Kosten (heute) > 2× Tagesbudget oder IS (Budget) > 30 %.
  3. Planung: stündlich; Empfänger: Ops-Liste.

B) Bulk-Edit: Labels hinzufügen

  1. Kampagnen filtern (z. B. Non-Brand DE), alle auswählen.
  2. Bearbeiten → LabelsOBJ:Non-Brand, GEO:DE zuweisen.
  3. Speichern; als gespeicherte Ansicht sichern.

C) Skript: Workflow

  1. Tools → Skripte → Neu → Berechtigungen erteilen.
  2. Code einfügen (siehe Beispiele), Spreadsheet-URL & Empfänger setzen.
  3. „Vorschau“ testen (Dry-Run), dann Planung aktivieren (z. B. täglich 08:00).

Tabelle: Use Cases & passende Methode

Use CaseMethodeVorteilRisiko/Guardrail
Wochenend-Pause / AktionsendeRegelSchnell, UI-basiertEnddatum/Zeitzone prüfen
Massennamen/Labels ändernBulk-EditSehr effizientVorher Filter testen
Budget-Pacing-AlertSkriptE-Mail/Sheet-ReportDry-Run & Limits
Schwache Anzeigen pausierenSkriptKonsistentCV-Schwelle & Zeitraum absichern
Feed-/LP-ChecksSkript/APIAutom. QATimeouts, 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

Zuletzt aktualisiert am: 07.09.2025

Key Takeaways

  • Regeln/Bulk für Standardfälle, Skripte für komplexe Logik & Alerts.
  • Labels & Namenskonventionen sind die Basis robuster Automatisierung.
  • Dry-Run, Limits, Logs & Rollbacks minimieren Risiken.
  • Automatisierung steigert Reaktionsgeschwindigkeit und spart Ops-Zeit.
  • Policies/Consent immer respektieren – keine „Automatisierung um jeden Preis“.