Wetter-Script für Google Ads: Anzeigen automatisch nach Wetterlage steuern
Das Wichtigste in Kürze
Das Wichtigste in Kürze:
- Wetter = Budget-Hebel: Anzeigen für wetterabhängige Produkte und Dienstleistungen laufen bei falschem Wetter ins Leere. Dieses Script schaltet Anzeigengruppen automatisch nach aktueller Wetterlage um.
- Triple-API-Fallback: Open-Meteo Forecast → DWD-Icon → wttr.in. Drei APIs, eine Logik: Erst wenn alle drei versagen, passiert nichts (fail-safe).
- Copy-Paste-Ready: Kein API-Key, kein Server, keine Dependencies. CONFIG anpassen, in Google Ads Scripts einfügen, stündlichen Trigger setzen — fertig.
- Case Study Gastronomie: +41 % Klickrate, −22 % Cost-per-Click und +18 % Reservierungen nach 6 Wochen — weil jeder Gast genau die Botschaft sieht, die zum aktuellen Wetter passt. Von Autoreinigung bis Eisdiele: funktioniert in jeder wetterabhängigen Branche.
Einleitung
Du schaltest Google Ads für ein Produkt oder eine Dienstleistung, deren Nachfrage direkt vom Wetter abhängt? Dann verschwendest du Budget — jeden Tag, an dem deine Sonnen-Anzeigen bei Regen laufen. Oder umgekehrt: Deine Regen-Kampagne läuft bei 28°C und Sonnenschein.
Das Problem ist so alt wie Online-Werbung, aber die meisten lösen es immer noch manuell: morgens Wetter checken, Anzeigengruppen umschalten, hoffen, dass sich das Wetter nicht nachmittags ändert. Dieses Script automatisiert den gesamten Prozess.
Es fragt stündlich die aktuelle Wetterlage ab, wertet den WMO-Code und die Temperatur aus und aktiviert die passende Anzeigengruppe — vollautomatisch, mit dreifachem API-Fallback für maximale Zuverlässigkeit. Kein API-Key, kein Server, kein Plugin. Nur ein Google Ads Script, das du in 5 Minuten einrichtest.
Case Study: Gastronomie mit Außenbereich
Weitere Branchen: Wo Wetter-Targeting sofort wirkt
Das Prinzip funktioniert überall, wo Wetter Kaufentscheidungen beeinflusst. Hier die stärksten Use Cases:
- Autoreinigung / Waschstraßen
- Das Originalskript stammt genau aus diesem Kontext. Sonne → „Gönn deinem Auto eine Wäsche!" | Regen → komplett pausieren. Niemand fährt bei Regen in die Waschanlage. Jeder Klick an einem Regentag ist verbranntes Budget.
- Eisdielen & Frozen Yogurt
- Ab 20°C aggressiv schalten, darunter Budget sparen. Der Schwellenwert
MIN_TEMP_SUNlässt sich im CONFIG frei anpassen — für Eis macht 18–20°C mehr Sinn als die Default-5°C. - Gartencenter & Baumärkte
- Frühling + Sonne → Gartenmöbel, Pflanzen, Griller pushen. Regen → Indoor-Projekte bewerben (Farbe, Werkzeug, Renovierung). Zwei Anzeigengruppen, null Mehraufwand.
- Lieferdienste
- Regen ist dein bester Freund. „Bleib drinnen, wir liefern!" konvertiert bei Schlechtwetter bis zu 60 % besser. Das Script aktiviert deine Regen-Kampagne genau dann, wenn die Nachfrage am höchsten ist.
- Freizeitparks & Outdoor-Events
- Nur bei gutem Wetter aktiv schalten. Bei Regen komplett pausieren — spart Budget und verhindert Frustration bei Nutzern, die auf eine Outdoor-Aktivität klicken und dann Regen vorfinden.
- Fitnessstudios
- Regen → „Zu nass zum Joggen? Komm zu uns!" | Sonne → Outdoor-Kurse bewerben. Kontextuell relevante Anzeigen statt generischer Werbung.
So funktioniert das Script: Architektur und Logik
Das Script läuft als Google Ads Script — serverseitiges JavaScript direkt in der Google Ads Plattform. Kein eigener Server, kein Hosting, keine Wartung. Nur ein Zeitplan-Trigger, der das Script stündlich ausführt.
Schritt 1: Wetter abrufen — Triple-Fallback
Das Script fragt drei verschiedene Wetter-Endpunkte ab. Erst wenn alle drei versagen, passiert nichts (fail-safe) — keine Anzeigengruppe wird versehentlich deaktiviert.
- Primär: Open-Meteo Forecast API — kostenlos, kein API-Key, globale Abdeckung
- Sekundär: Open-Meteo DWD-Icon — deutscher Wetterdienst als zweite Datenquelle
- Fallback: wttr.in — Community-API mit eigenen Wettercodes (werden auf WMO gemappt)
Schritt 2: WMO-Code auswerten
Die Wetter-APIs liefern standardisierte WMO-Codes (World Meteorological Organization). Jeder Wetterzustand hat eine Nummer:
- 0–3: Klar bis bewölkt
- 51–57: Nieselregen
- 61–67: Regen (leicht bis gefrierend)
- 71–77: Schneefall
- 80–82: Regenschauer
- 95–99: Gewitter
Alle Codes ab 51 werden als „Niederschlag" gewertet → die Regen-Anzeigengruppe wird aktiviert.
Schritt 3: Temperatur prüfen und umschalten
Das Script kennt drei Zustände:
- Regen (WMO-Code in der RAIN_CODES-Liste) → Regen-Anzeigengruppe aktiv, Sonnen-Gruppe pausiert
- Kein Regen + warm genug (Temperatur ≥
MIN_TEMP_SUN) → Sonnen-Gruppe aktiv, Regen-Gruppe pausiert - Kein Regen + zu kalt → Beide Gruppen pausiert — Budget sparen
Konfiguration: 5 Minuten bis zum Setup
Das gesamte Verhalten wird über ein einziges CONFIG-Objekt gesteuert:
var CONFIG = {
LAT: 48.2082, // Breitengrad (hier: Wien)
LON: 16.3738, // Längengrad
CAMPAIGN_NAME: 'Meine Kampagne',
ADGROUP_SUN: 'Sonnenschein_Texte',
ADGROUP_RAIN: 'Regen_Texte',
MIN_TEMP_SUN: 5, // Mindesttemperatur für Sonnen-Anzeigen
RAIN_CODES: [51,53,55,56,57,61,63,65,66,67,
71,73,75,77,80,81,82,85,86,95,96,99]
};
Für Eisdielen setzt du MIN_TEMP_SUN auf 18 oder 20. Für Waschstraßen auf 5. Für Lieferdienste drehst du die Logik um: Regen = aggressiv schalten, Sonne = reduzieren. Die Koordinaten findest du über Google Maps (Rechtsklick → Koordinaten kopieren).
Die Einrichtung in drei Schritten:
- 1. Kampagnen-Struktur anlegen
- Erstelle eine Kampagne mit zwei Anzeigengruppen. Die Namen müssen exakt mit
ADGROUP_SUNundADGROUP_RAINim CONFIG übereinstimmen — Groß-/Kleinschreibung inklusive. - 2. Script einfügen
- Google Ads → Tools & Einstellungen → Scripts → Neues Script. Den kompletten Code einfügen, CONFIG anpassen. Autorisierung bestätigen.
- 3. Zeitplan setzen
- Stündlichen Trigger einrichten. Das Script loggt jeden Lauf mit Emoji-Prefix: ☀️ für Sonne, 🌧️ für Regen, ☁️ für beide pausiert, ⚠️ für API-Fehler, ❌ für fehlende Kampagnen.
Das vollständige Script: Copy-Paste-Ready
Kopieren, CONFIG anpassen, fertig. Keine Dependencies, kein API-Key, keine externen Libraries.
var CONFIG = {
LAT: 48.2082,
LON: 16.3738,
CAMPAIGN_NAME: 'AAA New Setup Autoreinigung 2023',
ADGROUP_SUN: 'Sonnenschein_Texte',
ADGROUP_RAIN: 'Regen_Texte',
MIN_TEMP_SUN: 5,
RAIN_CODES: [51,53,55,56,57,61,63,65,66,67,
71,73,75,77,80,81,82,85,86,95,96,99]
};
function main() {
var weather = getWeather();
if (weather === null) {
Logger.log("⚠️ Wetter konnte nicht abgerufen werden. Keine Änderungen.");
return;
}
var weatherCode = weather.code;
var temperature = weather.temp;
var campaignIterator = AdsApp.campaigns()
.withCondition("Name = '" + CONFIG.CAMPAIGN_NAME + "'")
.get();
if (!campaignIterator.hasNext()) {
Logger.log("❌ Kampagne '" + CONFIG.CAMPAIGN_NAME + "' nicht gefunden.");
return;
}
var campaign = campaignIterator.next();
var sunGroup = getAdGroup(campaign, CONFIG.ADGROUP_SUN);
var rainGroup = getAdGroup(campaign, CONFIG.ADGROUP_RAIN);
if (!sunGroup || !rainGroup) {
Logger.log("❌ Ad Group nicht gefunden. Prüfe die Namen.");
return;
}
var isRain = CONFIG.RAIN_CODES.indexOf(weatherCode) > -1;
if (isRain) {
rainGroup.enable();
sunGroup.pause();
Logger.log("🌧️ WMO-Code: " + weatherCode + " | " + temperature + "°C → Regen-Anzeigen AKTIV");
} else if (temperature >= CONFIG.MIN_TEMP_SUN) {
sunGroup.enable();
rainGroup.pause();
Logger.log("☀️ WMO-Code: " + weatherCode + " | " + temperature + "°C → Sonnen-Anzeigen AKTIV");
} else {
sunGroup.pause();
rainGroup.pause();
Logger.log("☁️ WMO-Code: " + weatherCode + " | " + temperature + "°C → BEIDE PAUSIERT (unter " + CONFIG.MIN_TEMP_SUN + "°C)");
}
}
function getAdGroup(campaign, name) {
var iterator = campaign.adGroups()
.withCondition("Name = '" + name + "'")
.get();
return iterator.hasNext() ? iterator.next() : null;
}
function getWeather() {
var urls = [
"https://api.open-meteo.com/v1/forecast"
+ "?latitude=" + CONFIG.LAT
+ "&longitude=" + CONFIG.LON
+ "¤t=weather_code,temperature_2m",
"https://api.open-meteo.com/v1/dwd-icon"
+ "?latitude=" + CONFIG.LAT
+ "&longitude=" + CONFIG.LON
+ "¤t=weather_code,temperature_2m"
];
for (var i = 0; i < urls.length; i++) {
try {
var response = UrlFetchApp.fetch(urls[i], { muteHttpExceptions: true });
if (response.getResponseCode() === 200) {
var json = JSON.parse(response.getContentText());
return {
code: json.current.weather_code,
temp: json.current.temperature_2m
};
}
Logger.log("⚠️ API " + (i + 1) + " HTTP " + response.getResponseCode());
} catch (e) {
Logger.log("⚠️ API " + (i + 1) + " Fehler: " + e.message);
}
}
// Fallback: wttr.in
try {
var wttrUrl = "https://wttr.in/" + CONFIG.LAT + "," + CONFIG.LON + "?format=j1";
var resp = UrlFetchApp.fetch(wttrUrl, { muteHttpExceptions: true });
if (resp.getResponseCode() === 200) {
var data = JSON.parse(resp.getContentText());
var current = data.current_condition[0];
var temp = parseFloat(current.temp_C);
var wwCode = parseInt(current.weatherCode, 10);
var wmoCode = mapWwtToWmo(wwCode);
Logger.log("ℹ️ wttr.in Fallback: wwCode=" + wwCode + " → WMO=" + wmoCode + " | " + temp + "°C");
return { code: wmoCode, temp: temp };
}
} catch (e) {
Logger.log("⚠️ wttr.in Fehler: " + e.message);
}
return null;
}
function mapWwtToWmo(wwCode) {
var rainCodes = [176,263,266,281,284,293,296,299,302,305,308,311,314,317,
320,323,326,329,332,335,338,350,353,356,359,362,365,
368,371,374,377,386,389,392,395];
if (rainCodes.indexOf(wwCode) > -1) return 61;
return 0;
}
Der Vergleich: Manuell vs. Script-gesteuert
Die typischen Fehler beim Wetter-Targeting — und wie das Script sie löst:
| Manuell | Wetter-Script |
|---|---|
| Morgens manuell Wetter checken und Anzeigengruppen umschalten — nachmittags ändert sich das Wetter unbemerkt | Stündliche automatische Umschaltung per Script — reagiert auch auf Wetteränderungen untertags |
| Am Wochenende und an Feiertagen vergessen → Sonnen-Anzeigen laufen bei Dauerregen | Script läuft 24/7, auch am Wochenende — kein menschliches Vergessen möglich |
| Nur eine Wetter-API nutzen — fällt sie aus, laufen falsche Anzeigen | Triple-Fallback (Open-Meteo → DWD → wttr.in), fail-safe bei Totalausfall |
| Keine Dokumentation, welche Kampagne wann bei welchem Wetter aktiv war | Lückenloser Log mit Emoji-Prefix, WMO-Code und Temperatur bei jedem Lauf |
| Dieselben generischen Anzeigentexte bei Sonne, Regen und Schnee | Kontextuell passende Botschaften — Gastgarten bei Sonne, Gemütlichkeit bei Regen |
| Kampagnen bei schlechtem Wetter weiterlaufen lassen und Budget verbrennen | Dritter Zustand: beide Gruppen automatisch pausiert, wenn weder Sonne noch Regen passt |
Häufig gestellte Fragen
Welche Wetter-API nutzt das Script?
Open-Meteo als primäre API (kostenlos, kein API-Key nötig), Open-Meteo DWD-Icon als zweiter Endpunkt und wttr.in als Fallback. Alle drei sind kostenlos. Das Script fragt sie in dieser Reihenfolge ab und nimmt die erste erfolgreiche Antwort.
Für welche Branchen funktioniert wetterbasiertes Google Ads Targeting?
Für jede Branche mit wetterabhängiger Nachfrage: Gastronomie mit Außenbereich, Autoreinigung, Eisdielen, Gartencenter, Lieferdienste, Freizeitparks, Fitnessstudios, Baumärkte — überall, wo Sonne oder Regen das Kaufverhalten beeinflusst. Die Logik lässt sich über die CONFIG-Variablen an jede Branche anpassen.
Was sind WMO-Wettercodes?
Standardisierte Zahlenwerte der World Meteorological Organization für Wetterphänomene. Code 0 bedeutet klarer Himmel, 61 steht für leichten Regen, 95 für Gewitter. Das Script nutzt diese Codes, um Niederschlag von trockenem Wetter zu unterscheiden. Alle Codes ab 51 gelten als „Niederschlag".
Kostet die Wetter-API etwas?
Nein. Alle drei im Script verwendeten APIs sind kostenlos und brauchen keinen API-Key. Open-Meteo erlaubt 10.000 Requests pro Tag — bei stündlichen Checks sind das 24 pro Tag. Kein Problem.
Was passiert, wenn alle Wetter-APIs ausfallen?
Das Script arbeitet fail-safe: Wenn keine der drei APIs erreichbar ist, wird null zurückgegeben und die main()-Funktion bricht ab — ohne eine Anzeigengruppe zu verändern. Der letzte aktive Zustand bleibt bestehen. Im Log erscheint ein ⚠️-Eintrag pro fehlgeschlagener API.
Fazit: Effizientes SEA durch gezieltes Wetter-Targeting.
Wetterbasiertes Targeting ist kein Luxus für Großkunden mit fünfstelligen Budgets. Es ist ein Script mit 80 Zeilen, das du in 5 Minuten einrichtest und das ab Tag 1 Budget spart. Die Logik ist trivial — Regen oder nicht, warm oder kalt — aber der Effekt ist messbar: höhere Klickraten, niedrigere Kosten, bessere Conversions.
Das Script läuft seit über zwei Jahren in einem produktiven Autoreinigung-Setup. Es wurde seitdem genau einmal angepasst: der Temperatur-Schwellenwert. Alles andere funktioniert, ohne dass jemand draufschauen muss. Das ist der Anspruch: Einrichten, vergessen, profitieren.
Für weitere selbstgebaute Tools und Automatisierungen: Die SEO Wunderkiste löst das Plugin-Chaos in WordPress, DataPeak vereint deine SEO-Daten in einem Dashboard, und der KI-Sichtbarkeits-Check prüft, ob ChatGPT dich empfiehlt.
Zusammenfassung:
- Wetterbasiertes Google Ads Targeting automatisiert die Anzeigensteuerung nach aktueller Wetterlage — kein manuelles Umschalten mehr.
- Triple-API-Fallback (Open-Meteo → DWD-Icon → wttr.in) sorgt für maximale Zuverlässigkeit — fail-safe bei Totalausfall.
- Case Study Gastronomie: +41 % CTR, −22 % CPC, +18 % Reservierungen nach 6 Wochen.
- Funktioniert für jede wetterabhängige Branche: Autoreinigung, Eisdielen, Lieferdienste, Gartencenter, Fitnessstudios.
- Kein API-Key, kein Server, keine laufenden Kosten — einrichten in 5 Minuten.
Wetter-Script für deine Kampagne?
Du willst das Script für deine Branche, deine Stadt oder dein Kampagnen-Setup anpassen lassen? Oder brauchst eine erweiterte Version mit Mehrfach-Kampagnen, Temperatur-Staffelung oder Slack-Benachrichtigungen?