N-Gram Lens zerlegt jeden Suchbegriff in Ein-, Zwei- und Dreiwort-Phrasen und aggregiert Kosten, Klicks und Conversions je Phrase — Muster, die Begriff für Begriff unsichtbar bleiben, werden so offensichtlich. Search, Shopping und DSA kommen aus search_term_view, Performance Max aus campaign_search_term_view, und das Skript weiß, welche Begriffe deine Negativen bereits blockieren.

So funktioniert es

Kampagnen mit Impressionen im Fenster werden gesammelt (gefiltert nach campaign_contains / campaign_not_contains und Status). Suchkampagnen werden auf Anzeigengruppenebene gelesen, damit Anzeigengruppen-Negative greifen; PMax-Kampagnen auf Kampagnenebene mit Kosten. Vorhandene Negative auf Anzeigengruppen-, Kampagnen-, Listen- (per ID) und Kontoebene werden mit Exact-/Phrase-/Broad-Semantik abgeglichen; getroffene Suchanfragen zählen als ausgeschlossen. Begriffe werden in der Build-Sprache mit optionalen Stoppwörtern tokenisiert, N-Gramme von min_ngram…max_ngram Wörtern einmal pro Anfrage gezählt, Schwellen entfernen das Rauschen. Negativkandidaten sind Phrasen mit Klicks, aber ohne oder mit teuren Conversions, jeweils mit Beleg („Kontorate erwartet ~N Conv.“); Erweiterungskandidaten konvertieren besser als das Konto.

Was in das Sheet geschrieben wird

  • Summary — Kampagnen im Umfang, Quellen, analysierte und durch Negative ausgeschlossene Anfragen, N-Gramm-Größen, Kontosummen, Anzahl Negativ- und Erweiterungskandidaten, Kosten auf Negativkandidaten, Hinweise und eventuelle ⚠-Warnungen (Leselimit, Konto-Negative nicht lesbar).
  • Account n-grams und Campaign n-grams — Phrase, n, Anfragen, Quelle, Impressionen, Klicks, CTR, Kosten, CPC, Conversions, Wert, Conv.-Rate, CPA, ROAS; die Kampagnentabelle ist je Kampagne segmentiert.
  • Word count — Metriken nach Wortanzahl der Anfrage.
  • Suggestions — Negativkandidaten (als Phrase-Negative einfügen) und Erweiterungskandidaten, jeweils mit „Why“-Spalte. Nichts wird automatisch angewendet.

Einrichtung

  1. Lege mit dem Google-Konto, mit dem du das Skript autorisierst, ein neues, leeres Google Sheet an und kopiere die URL. Verwende kein Sheet eines anderen Skripts — jedes Sheet ist an ein Skript und ein Google Ads-Konto gebunden.
  2. Öffne in Google Ads Tools → Skripts, lege ein neues Skript an, füge den gesamten Code ein und vergib einen Namen.
  3. Trage die Sheet-URL in CONFIG.spreadsheet_url ein. Läuft das Skript aus einem Verwaltungskonto (MCC), setze zusätzlich CONFIG.account_id auf die Kunden-ID (z. B. 123-456-7890); ohne diese Angabe bricht das Skript mit einer klaren Fehlermeldung ab.
  4. Optional: CONFIG.email (Empfänger durch Komma getrennt) und/oder CONFIG.slack_webhook befüllen. Der Webhook bleibt ausschließlich im Code und wird nie in das Sheet geschrieben.
  5. Skript autorisieren, einmal Vorschau ausführen und das Protokoll prüfen, dann Ausführen. Der erste Lauf erstellt die Tabs, die Kopfzeilen und den Tab _settings.
  6. Zeitplan einrichten: wöchentlich, montags ab 04:00 Uhr Kontozeit.
  7. Optional: das Excel-Dashboard herunterladen (Button oben), den Tab Read me öffnen und die Sheet-Tabs wie dort beschrieben einfügen — das Spaltenlayout entspricht der Skriptausgabe eins zu eins.

Parameter

ParameterBeschreibungStandard
spreadsheet_urlURL des leeren Google Sheets, in das das Skript schreibt.'YOUR_SPREADSHEET_URL'
account_idKunden-ID; nur nötig, wenn das Skript aus einem Verwaltungskonto (MCC) läuft.''
daysLänge des Analysefensters in Tagen.30
min_ngram / max_ngramKleinste und größte N-Gramm-Größe (1 = Einzelwörter, 3 = Dreiwort-Phrasen).1 / 3
include_search / include_pmaxSearch/Shopping/DSA und/oder Performance-Max-Kampagnen einbeziehen.true / true
campaign_containsNur Kampagnen, deren Name diesen Text enthält.''
campaign_not_containsKampagnen ausschließen, deren Name diesen Text enthält.''
enabled_campaigns_onlytrue = nur aktive Kampagnen; false = aktive und pausierte.true
min_query_impressionsMindestimpressionen, damit ein Suchbegriff gelesen wird.1
check_negativesSuchbegriffe mit vorhandenen Negativen abgleichen (Anzeigengruppe, Kampagne, geteilte Liste, Kontoebene).true
languageSprache des Tokenizers; standardmäßig die Build-Sprache (en / tr / de).L.text_lang
stopwordsZusätzliche Wörter, die beim N-Gramm-Aufbau ignoriert werden.[]
segment_by_campaignDie N-Gramm-Tabelle je Kampagne schreiben.true
max_rows_writtenZeilenlimit pro Tabelle; bei Überschreitung wird ein Hinweis ergänzt.20000
thresholdsMindestanzahl Suchanfragen / Impressionen / Klicks / Kosten, damit ein N-Gramm gelistet wird.1 / 20 / 0 / 0
suggestionsnegative_min_clicks, negative_max_cpa_multiple, expansion_min_conversions, list_size.30 / 3 / 3 / 50
Alle Werte stehen im CONFIG-Block am Anfang des Skripts; Schlüssel, die auch im Tab _settings existieren, lassen sich dort ändern.

Der Tab _settings

Beim ersten Lauf legt das Skript einen Tab _settings (Key / Value / Notes) an. Werte dort überschreiben die passenden CONFIG-Einträge, sodass das tägliche Feintuning im Sheet stattfindet, ohne Code zu ändern. Zahlen müssen ohne Tausendertrennzeichen und mit höchstens zwei Dezimalstellen geschrieben werden (0.5 oder 0,5). Die Zeilen script und account markieren den Besitzer des Sheets: Öffnet ein anderes Skript oder ein anderes Konto dasselbe Sheet, stoppt es, bevor etwas geschrieben wird. Interne Tabs mit Unterstrich (_settings, _history, _snapshot, _state, _baseline) sind sprachunabhängig; ein Wechsel zwischen den EN/TR/DE-Builds behält den gespeicherten Zustand.

Benachrichtigungen

Dieses Skript hat keine E-Mail- oder Slack-Option; Ausgabe sind das Sheet und das Dashboard.

Hinweise und Grenzen

  • Broad-Negative treffen jede Wortreihenfolge, Phrase-Negative zusammenhängende Wörter, Exact-Negative die gesamte Anfrage — dieselbe Semantik wie bei Google.
  • Erreicht eine Abfrage das Ads-Scripts-Leselimit, zeigt Summary eine ⚠-Zeile; Fenster oder Filter verkleinern.
  • Ob search_term_view auf deinem Konto Zeilen für Shopping-Kampagnen liefert, einmal mit dem Suchbegriffsbericht der Oberfläche abgleichen.
  • Jeder Berichts-Tab enthält eine kleine Attributionszelle (H1:K1, nur Warnschutz) und der Code-Header eine Copyright-Zeile; beides kann jeder entfernen, der die Quelle bearbeitet.