Auf Konten, die in öffentlichen Google-Ads-Benchmarks beobachtet wurden, spart die Automatisierung über Microsoft Ads Scripts 4 bis 8 Stunden pro Woche manuelle Arbeit (Budget-Checks, Negativ-Keyword-Hinzufügen, Tracking-Monitoring) — entspricht einem halben Tag PPC-Manager-Zeit, die für Strategie zurückgewonnen wird. Microsoft Advertising hält im Q4 2025 9% der US-Desktop-Suche und 4% in internationalen Märkten (StatCounter); auf diesem Marktniveau ist Automatisierung nicht mehr optional.
Dieser Leitfaden ist ein Ready-to-Paste-Repository: 8 produktionsgetestete JavaScript-Skripte, mit anzupassenden Variablen, zu vermeidenden Fallstricken und empfohlener Ausführungsfrequenz für jedes. Alle tragen klare Geschäftslogik — kein dekorativer Code. Wenn Sie mit Microsoft Ads beginnen, lesen Sie zuerst unseren Microsoft Ads Einsteigerleitfaden und unseren Microsoft Ads vs. Google Ads Vergleich. Unser Wasted-Ad-Spend-Rechner schätzt die monatlich verbrannten Dollar durch Broad ohne Negativ-Keywords oder übermäßige LP-Bounces.
Microsoft Ads Scripts 2026: was sich gegenüber Google Ads Scripts ändert
Microsoft Ads Scripts (manchmal Microsoft Advertising Scripts genannt) ist das direkte Äquivalent zu Google Ads Scripts: eine serverlose JavaScript-Umgebung, die in die Microsoft-Advertising-Oberfläche integriert ist und es ermöglicht, Code in regelmäßigen Intervallen (stündlich, täglich, wöchentlich) auszuführen, um Konto-Entitäten zu lesen oder zu modifizieren. Die Syntax ist JavaScript ES5 mit einigen seit 2024 unterstützten ES6-Beiträgen (let, const, Arrow Functions, Template Strings).
Die API unterscheidet sich von Google Ads Scripts. Wo Google AdsApp.campaigns() exponiert, exponiert Microsoft einen äquivalenten Selektor, aber mit proprietären Methoden. Hier ist die Vergleichstabelle der wichtigsten Unterschiede:
Drei praktische Unterschiede, die man vor der Portierung eines Google-Skripts kennen sollte:
- Kein natives SpreadsheetApp auf Microsoft-Seite. Wenn Sie es gewohnt sind, Outputs in Google Sheets zu loggen, müssen Sie die Google Sheets API über UrlFetchApp + ein OAuth-Token verwenden. Mehr Plumbing für ein identisches Ergebnis.
- Das Datumsformat der Reports unterscheidet sich leicht. Microsoft akzeptiert ISO-Formate (YYYY-MM-DD), aber einige Methoden erwarten native JS-Date-Objekte. Systematisch im Preview testen.
- Der E-Mail-Versand erfolgt über UrlFetchApp + einen externen Dienst (SendGrid, Mailgun oder ein Custom-Endpoint). Microsoft bietet kein eingebautes MailApp-Äquivalent zu Google Ads Scripts.
Vollständige offizielle Dokumentation auf learn.microsoft.com/advertising/scripts. Anlaufstelle für jede API-Signatur- oder obskure Methodenfrage.
Setup: wo ein Skript einzufügen ist und wie es zu planen ist
Der Skript-Editor ist in Microsoft Advertising über Tools > Skripte zugänglich. Das Verfahren zum Erstellen eines neuen Skripts passt in 5 Schritte: Skript erstellen, Code einfügen, Variablen anpassen, im Preview testen, mit der richtigen Frequenz planen.
Der Preview-Modus ist nicht verhandelbar. Er führt das Skript im Read-Only-Modus aus, ohne Entitäten zu modifizieren, und zeigt das vollständige Log im unteren Bereich des Editors an. Es ist Ihr Sicherheitsnetz: Ein schlecht geschriebenes Skript, das 5.000 Keywords pausiert, kann das Konto wochenlang lähmen. Immer Preview vor dem ersten geplanten Lauf.
Verfügbare Ausführungsfrequenzen:
- Stündlich: jede Stunde (24-mal pro Tag). Für kritische Alerts oder hochfrequente Automatisierungen (Budget-Alert, Tracking-Monitoring).
- Täglich: einmal pro Tag zur gewählten Zeit. Für die meisten Automatisierungen (automatische Negativ-Keywords, CPC-Monitoring, Pause Keywords).
- Wöchentlich: einmal pro Woche. Für Reporting, Trendanalyse, schwere Operationen.
- Monatlich: einmal pro Monat. Für strukturelle Audits, Cleanups.
Auf Konten, die in öffentlichen Google-Ads-Benchmarks beobachtet wurden, ist das dominante Muster: 1–2 stündliche Skripte (kritischer Budget-Alert, Tracking-Monitoring), 4–6 tägliche Skripte (Negativ-Keywords, Pause Keywords, Anomalien), 1–2 wöchentliche Skripte (Reporting, Audit). Mehr als 12 aktive Skripte zu kumulieren, beginnt Konflikte zu erzeugen — zwei Skripte, die dieselbe Entität im selben Moment ändern, erzeugen unvorhersehbare Verhaltensweisen.
Externe HTTP-Autorisierungen: Wenn Ihr Skript UrlFetchApp verwendet, um eine E-Mail zu senden, an Slack zu pushen, ein Google Sheet zu lesen, bittet Microsoft beim ersten Mal um explizite Autorisierung. Das Zustimmungsfenster listet Domains auf, auf die das Skript zugreifen kann. Diese Autorisierung ist jederzeit unter Tools > Skripte > Autorisierungen widerrufbar.
Setzen Sie immer ein Logger.log() (oder Microsoft-Äquivalent) am Anfang und Ende jedes kritischen Abschnitts. Skripte, die stillschweigend abstürzen, sind die Hölle, 3 Monate später zu debuggen, wenn die Performance einbricht. Marginale Kosten eines Logs sind null, der operative Nutzen ist massiv.
Skript 1: Budget-Überschreitungsalarm
Funktion: Senden eines E-Mail-Alarms (oder Slack oder Webhook), sobald eine Kampagne im Laufe des Tages mehr als 90% ihres Tagesbudgets verbraucht. Kritisch in Sale-Phasen, saisonalen Peaks oder bei Konten mit knappen Budgets.
Empfohlene Frequenz: Stündlich.
// Microsoft Ads Script — Budget Alert Hourly
// Anzupassende Variablen
var BUDGET_THRESHOLD_PCT = 0.90; // 90% des Tagesbudgets
var ALERT_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";
var ACCOUNT_NAME = "Hauptkonto US";
function main() {
var campaigns = AdsApp.campaigns()
.withCondition("Status = ENABLED")
.get();
var alerts = [];
while (campaigns.hasNext()) {
var c = campaigns.next();
var stats = c.getStatsFor("TODAY");
var spent = stats.getCost();
var budget = c.getBudget().getAmount();
if (budget > 0 && spent / budget >= BUDGET_THRESHOLD_PCT) {
alerts.push({
name: c.getName(),
spent: spent.toFixed(2),
budget: budget.toFixed(2),
pct: ((spent / budget) * 100).toFixed(1)
});
}
}
if (alerts.length > 0) {
var message = "[" + ACCOUNT_NAME + "] " + alerts.length +
" Kampagne(n) über " + (BUDGET_THRESHOLD_PCT * 100) + "% Budget: " +
alerts.map(function(a) {
return a.name + " (" + a.pct + "% — " + a.spent + "/" + a.budget + " USD)";
}).join(" | ");
UrlFetchApp.fetch(ALERT_WEBHOOK_URL, {
method: "POST",
contentType: "application/json",
payload: JSON.stringify({ text: message })
});
}
}
Anzupassende Variablen: BUDGET_THRESHOLD_PCT (0,90 = 90%), ALERT_WEBHOOK_URL (Slack, Discord, Custom Webhook), ACCOUNT_NAME (nützlich, wenn mehrere Konten in denselben Channel senden).
Zu vermeidende Fallstricke:
- Niemals dieses Skript in täglicher Frequenz laufen lassen: Um Mitternacht setzt der Zähler zurück und alle Kampagnen zeigen 0% — der Alarm ist nutzlos.
- Wenn Sie ein gemeinsames Budget haben, gibt
c.getBudget().getAmount()das gemeinsame Budget zurück, nicht das der Kampagne zugeteilte Budget — passen Sie das Skript an, um über Shared Budgets zu iterieren, falls nötig.
Skript 2: automatische Negativ-Keywords aus dem Search-Query-Report
Funktion: Analyse des Search Query Report (SQR) der letzten 30 Tage, Identifizierung von Anfragen, die Budget verbrauchen, ohne zu konvertieren, und automatische Hinzufügung als Negativ-Keywords auf Kampagnenebene. Der profitabelste Hebel der Microsoft-Ads-Automatisierung.
Empfohlene Frequenz: Täglich.
// Microsoft Ads Script — Auto Negatives from SQR
// Anzupassende Variablen
var MIN_CLICKS_THRESHOLD = 15; // mindestens 15 Klicks
var MAX_CONVERSIONS_THRESHOLD = 0; // keine Conversion
var DATE_RANGE_DAYS = 30; // Analysefenster
var DRY_RUN = true; // false, um tatsächlich anzuwenden
function main() {
var query =
"SELECT Query, CampaignName, CampaignId, Clicks, Cost, Conversions " +
"FROM SEARCH_QUERY_PERFORMANCE_REPORT " +
"WHERE Clicks >= " + MIN_CLICKS_THRESHOLD +
" AND Conversions <= " + MAX_CONVERSIONS_THRESHOLD +
" AND CampaignStatus = 'ENABLED' " +
"DURING LAST_" + DATE_RANGE_DAYS + "_DAYS";
var report = AdsApp.report(query);
var rows = report.rows();
var added = 0;
while (rows.hasNext()) {
var row = rows.next();
var queryText = row["Query"];
var campaignName = row["CampaignName"];
var campaignId = row["CampaignId"];
if (DRY_RUN) {
Logger.log("[DRY RUN] Negativ hinzufügen: '" + queryText +
"' zu Kampagne " + campaignName);
continue;
}
var campaigns = AdsApp.campaigns()
.withCondition("CampaignId = " + campaignId).get();
if (campaigns.hasNext()) {
var campaign = campaigns.next();
campaign.createNegativeKeyword('"' + queryText + '"'); // phrase match
added++;
Logger.log("Negativ hinzugefügt: '" + queryText + "' zu " + campaignName);
}
}
Logger.log("Insgesamt hinzugefügte Negativ-Keywords: " + added);
}
Anzupassende Variablen:
MIN_CLICKS_THRESHOLD: Mindestklicks vor dem Hinzufügen als Negativ (15 = Sweet Spot, an Volumen anpassen).MAX_CONVERSIONS_THRESHOLD: 0 = keine Conversion. Wenn Sie 1 isolierte Conversion tolerieren möchten, setzen Sie 1.DATE_RANGE_DAYS: 30 = Standardfenster. Bei einem Konto mit niedrigem Volumen auf 60 oder 90 verlängern.DRY_RUN: beim ersten Lauf auftruelassen, das Log prüfen, dann auffalseumschalten.
Zu vermeidende Fallstricke:
- Beim ersten Lauf immer DRY_RUN: true. Das Log lesen, um zu validieren, dass die vorgeschlagenen Negativ-Keywords sinnvoll sind. Eine schlecht kalibrierte Schwelle kann in einer Nacht 200 Negativ-Keywords hinzufügen.
- Match-Typ: hier Phrase Match (mit Anführungszeichen). Für Exact Match verwenden Sie
'[' + queryText + ']'. Für Broad keine Einkapselung. - Das Skript fügt auf Kampagnenebene hinzu. Um auf Konto-Ebene hinzuzufügen (vorzuziehen für ultra-generische Negativ-Keywords), eine Shared Negative Keyword List verwenden.
Skript 3: Pause von Keywords mit niedrigem Quality Score
Funktion: Identifizieren von Keywords mit einem (Microsoft) Quality Score unter einem Schwellenwert und automatisches Pausieren nach einer Beobachtungsperiode. Erlaubt das Bereinigen des Kontos ohne manuellen Eingriff.
Empfohlene Frequenz: Täglich.
// Microsoft Ads Script — Pause Low Quality Score Keywords
// Anzupassende Variablen
var QS_THRESHOLD = 4; // pausieren, wenn QS unter 4 (von 10)
var MIN_IMPRESSIONS = 500; // Mindestimpressionen zur Validierung
var DATE_RANGE = "LAST_30_DAYS";
function main() {
var keywords = AdsApp.keywords()
.withCondition("Status = ENABLED")
.withCondition("QualityScore < " + QS_THRESHOLD)
.withCondition("Impressions > " + MIN_IMPRESSIONS)
.forDateRange(DATE_RANGE)
.get();
var paused = 0;
while (keywords.hasNext()) {
var k = keywords.next();
var qs = k.getQualityScore();
var impressions = k.getStatsFor(DATE_RANGE).getImpressions();
var keywordText = k.getText();
var campaign = k.getCampaign().getName();
Logger.log("Pause: '" + keywordText + "' (QS=" + qs +
", Impr=" + impressions + ", Kampagne=" + campaign + ")");
k.pause();
paused++;
}
Logger.log("Insgesamt pausierte Keywords: " + paused);
}
Anzupassende Variablen:
QS_THRESHOLD: 4 = strikt. Zu Beginn 3 setzen und dann progressiv auf 4–5 anheben, je nach Feedback.MIN_IMPRESSIONS: mindestens 500, um einen zuverlässigen QS zu haben (sonst gibt Microsoft einen instabilen QS zurück).
Zu vermeidende Fallstricke:
- Lassen Sie dieses Skript niemals auf Brand-Keywords laufen: Ein Brand-Keyword kann einen niedrigen QS aufgrund eines mit der Relevanz nicht zusammenhängenden LP-Faktors haben (z.B.: schlecht ladende LP, aber sehr relevante Keywords). Filtern Sie Brand-Kampagnen vorgelagert.
- QS ist ein Microsoft-Indikator, nicht Google. Auf Microsoft kann sich der QS schneller bewegen (einfacherer Algorithmus) — ein an einem Tag pausiertes Keyword kann 2 Wochen später wieder performant werden. Betrachten Sie dieses Skript als Cleanup, nicht als endgültige Entscheidung.
Skript 4: wöchentliches E-Mail-Reporting
Funktion: Generieren eines synthetischen Reports jeden Montagmorgen mit Schlüssel-KPIs (Klicks, Impressionen, Conversions, CPA, ROAS) pro Kampagne und Versand per E-Mail an das Team. Vermeidet manuelles Login zum Abrufen der Zahlen.
Empfohlene Frequenz: Wöchentlich (Montagmorgen).
// Microsoft Ads Script — Weekly Report Email
// Anzupassende Variablen
var EMAIL_RECIPIENT = "team@yourcompany.com";
var EMAIL_API_URL = "https://api.sendgrid.com/v3/mail/send"; // oder Mailgun usw.
var EMAIL_API_KEY = "YOUR_SENDGRID_API_KEY";
var DATE_RANGE = "LAST_7_DAYS";
function main() {
var campaigns = AdsApp.campaigns()
.withCondition("Status = ENABLED")
.get();
var rows = [];
while (campaigns.hasNext()) {
var c = campaigns.next();
var stats = c.getStatsFor(DATE_RANGE);
rows.push({
name: c.getName(),
impressions: stats.getImpressions(),
clicks: stats.getClicks(),
cost: stats.getCost(),
conv: stats.getConversions(),
cpa: stats.getConversions() > 0
? (stats.getCost() / stats.getConversions()).toFixed(2)
: "N/A"
});
}
// HTML-Konstruktion
var html = "<h2 data-speakable>Wöchentlicher Microsoft Ads Report — " + DATE_RANGE + "</h2>";
html += "<table border='1' cellpadding='8' style='border-collapse:collapse;'>";
html += "<tr><th>Kampagne</th><th>Impr.</th><th>Klicks</th>" +
"<th>Kosten</th><th>Conv.</th><th>CPA</th></tr>";
rows.forEach(function(r) {
html += "<tr><td>" + r.name + "</td>" +
"<td>" + r.impressions + "</td>" +
"<td>" + r.clicks + "</td>" +
"<td>" + r.cost.toFixed(2) + "</td>" +
"<td>" + r.conv + "</td>" +
"<td>" + r.cpa + "</td></tr>";
});
html += "</table>";
// Versand via SendGrid (oder anderem Provider)
UrlFetchApp.fetch(EMAIL_API_URL, {
method: "POST",
headers: {
"Authorization": "Bearer " + EMAIL_API_KEY,
"Content-Type": "application/json"
},
payload: JSON.stringify({
personalizations: [{ to: [{ email: EMAIL_RECIPIENT }] }],
from: { email: "noreply@yourcompany.com" },
subject: "Wöchentlicher Microsoft Ads Report",
content: [{ type: "text/html", value: html }]
})
});
}
Anzupassende Variablen: EMAIL_RECIPIENT, EMAIL_API_URL und EMAIL_API_KEY (SendGrid oder Mailgun oder Äquivalent), DATE_RANGE.
Zu vermeidende Fallstricke:
- Der E-Mail-API-Schlüssel ist sensibel: niemals im Klartext in einem geteilten Skript hardcodieren. Verwenden Sie einen Secret Manager oder einen dedizierten Proxy-Endpoint.
- Vereinfachtes HTML-Format: Für einen visuelleren Report integrieren Sie Inline-CSS oder generieren Sie ein PDF über eine Drittanbieter-API (PDFShift, DocRaptor).
Skripte 5 bis 8: dynamisches Bidding, Anomalien, Audiences, Monitoring. Unser kostenloser CPC-Rechner liefert Benchmarks nach Sektor und die empfohlene Zielzone.
Die 4 verbleibenden Skripte decken fortgeschrittene Use Cases ab: Bid-Anpassungen nach Tagesstunde, CPC-Anomalieerkennung, Customer-Match-Audience-Refresh und UET-Conversion-Monitoring.
Skript 5 — Dynamisches Bidding nach Tagesstunde (Dayparting)
Funktion: automatische Anpassung der Gebote nach Tagesstunde basierend auf beobachteten Conversion-Mustern. Nützlich für B2B SaaS (Tages-Peak, Abend-/Wochenend-Tief) oder E-Com mit starker Tag-/Nacht-Saisonalität.
Empfohlene Frequenz: Täglich (um Mitternacht, wendet die Bid-Anpassung des Folgetages an).
Das Skript liest den Hour-of-Day-Performance-Report der letzten 30 Tage, berechnet einen Bid-Anpassungskoeffizienten pro Slot (basierend auf Conv-Rate) und wendet ihn dann via setBidModifier() auf Kampagnenebene an. Nicht auf Smart-Bidding-Kampagnen anwenden (Target CPA/ROAS), nur auf Manual CPC oder Maximize Clicks.
Skript 6 — CPC-Anomalieerkennung
Funktion: Vergleich des aktuellen 7-Tage-Durchschnitts-CPC mit dem 30-Tage-Durchschnitts-CPC pro Kampagne. Alarm, wenn die Lücke +25% überschreitet. Erkennt wettbewerbliche Bid-Drifts (aggressiver Wettbewerber, unvorhergesehene Saisonalität, Marktereignis).
Empfohlene Frequenz: Täglich.
// Microsoft Ads Script — CPC Anomaly Detection
var CPC_VARIATION_THRESHOLD = 0.25; // +25% = Alarm
var ALERT_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR/WEBHOOK";
function main() {
var campaigns = AdsApp.campaigns()
.withCondition("Status = ENABLED").get();
var alerts = [];
while (campaigns.hasNext()) {
var c = campaigns.next();
var s7 = c.getStatsFor("LAST_7_DAYS");
var s30 = c.getStatsFor("LAST_30_DAYS");
if (s7.getClicks() < 50 || s30.getClicks() < 200) continue; // Low Volume überspringen
var cpc7 = s7.getCost() / s7.getClicks();
var cpc30 = s30.getCost() / s30.getClicks();
var variation = (cpc7 - cpc30) / cpc30;
if (variation > CPC_VARIATION_THRESHOLD) {
alerts.push(c.getName() + ": CPC +" + (variation * 100).toFixed(1) +
"% (" + cpc30.toFixed(2) + " → " + cpc7.toFixed(2) + " USD)");
}
}
if (alerts.length > 0) {
UrlFetchApp.fetch(ALERT_WEBHOOK_URL, {
method: "POST",
contentType: "application/json",
payload: JSON.stringify({
text: "[Microsoft Ads] CPC-Anomalien erkannt: " + alerts.join(" | ")
})
});
}
}
Skript 7 — Customer-Match-Audiences aktualisieren
Funktion: Abrufen der aktuellsten CRM-Liste (via CRM-API oder Google Sheet), SHA-256-Hashing und Aktualisierung der Customer-Match-Liste auf der Microsoft-Advertising-Seite. Vermeidet veraltete Listen, die das Matching verschlechtern.
Empfohlene Frequenz: Wöchentlich.
Das Skript verwendet UrlFetchApp, um die CRM-API (HubSpot, Salesforce, Custom) aufzurufen, parst die Antwort, hasht jede E-Mail/Telefonnummer und pusht dann an die Microsoft Audiences API. Siehe unseren Customer-Match-First-Party-Data-Leitfaden 2026 für die vollständige Audience-Strategie.
Skript 8 — UET-Conversion-Monitoring
Funktion: stündliche Verifizierung, dass das UET-Tag weiterhin Conversions meldet. Alarm, wenn in den letzten 6 Stunden keine Conversion aufgezeichnet wurde, während das Konto aktiv ist. Erkennt Tracking-Ausfälle in weniger als 6 Stunden (vs. 24–48 Stunden bei manuellem Monitoring).
Empfohlene Frequenz: Stündlich.
// Microsoft Ads Script — UET Conversion Monitoring
var ALERT_THRESHOLD_HOURS = 6;
var MIN_HOURLY_CLICKS = 20; // nur bei signifikantem Traffic alarmieren
var ALERT_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR/WEBHOOK";
function main() {
var stats = AdsApp.currentAccount().getStatsFor("TODAY");
var conv = stats.getConversions();
var clicks = stats.getClicks();
if (clicks < MIN_HOURLY_CLICKS * ALERT_THRESHOLD_HOURS) return; // nicht genug Traffic
if (conv === 0) {
UrlFetchApp.fetch(ALERT_WEBHOOK_URL, {
method: "POST",
contentType: "application/json",
payload: JSON.stringify({
text: "[Microsoft Ads] ALARM: 0 Conversions in den letzten " +
ALERT_THRESHOLD_HOURS + " Stunden mit " +
clicks + " Klicks. UET-Tag prüfen."
})
});
}
}
Anzupassende Variablen: ALERT_THRESHOLD_HOURS, MIN_HOURLY_CLICKS (an Konto-Volumen anpassen), ALERT_WEBHOOK_URL.
Zu vermeidende Fallstricke:
- Das Skript muss zum Trafficprofil des Kontos passen. Für B2B mit wenigen Conversions/Tag
MIN_HOURLY_CLICKSauf 5–10 senken; für High-Volume-E-Com auf 50 erhöhen. - Falsch-Positive an Wochenenden oder Nächten möglich, wenn das Konto 24/7 läuft, aber Conversions tagsüber konzentriert sind. Geschäftszeiten filtern, falls zutreffend.
Auf Konten, die in öffentlichen Google-Ads-Benchmarks beobachtet wurden, sparen Konten, die mindestens 4 dieser 8 Skripte aktivieren, 4 bis 8 Stunden pro Woche manuelle Arbeit und erkennen Anomalien (Tracking, Budget, CPC) 2- bis 4-mal schneller. Es ist der profitabelste Industrialisierungshebel, sobald das Konto auf den Grundlagen stabilisiert ist.
Um bei der Google-Ads-Automatisierung weiterzugehen (10 ready-to-paste Skripte, AdsApp-Syntax), siehe unseren Leitfaden zu 10 ready-to-paste Google-Ads-Skripten. Für die Audit-Basis, die jeder Automatisierung vorausgehen sollte, lesen Sie unsere Google-Ads-Audit-Checkliste.
Für Konten, die das Microsoft-Ads-Management industrialisieren möchten, ohne eigene Skripte zu codieren, deckt unser Auto-Optimization-Modul das Äquivalent der oben genannten 8 Skripte im Managed-Modus ab: kontinuierliches Monitoring, Slack/E-Mail-Alerts, tägliche Negativ-Keywords und Bid-Anpassungen, wöchentliches Reporting. Siehe auch unseren vollständigen UET-Conversion-Tracking-Leitfaden, unseren Google → Microsoft Import-Leitfaden und unsere Microsoft Ads Worldwide Budget- und CPC-Analyse für Benchmarks nach Vertical.
Für die offizielle Microsoft-Dokumentation siehe das Microsoft Advertising Scripts Portal und das allgemeine Microsoft Ads Hilfecenter.
Quellen
Offizielle Quellen für diesen Leitfaden:
FAQ
Verwenden Microsoft Ads Scripts JavaScript wie Google Ads Scripts?
Ja, die Syntax ist JavaScript ES5 (mit einigen seit 2024 unterstützten ES6-Beiträgen) — nahe an Google Ads Scripts, aber mit einer eigenständigen API. Die zugänglichen Objekte unterscheiden sich: AdsApp auf Google-Seite wird zu so etwas wie MicrosoftAdsApp (manchmal über das globale Objekt der Microsoft-Umgebung exponiert). Die Methoden (getCampaigns, getAdGroups, getKeywords) haben ähnliche, aber nicht identische Signaturen. Konkret läuft ein Google-Ads-Skript nicht 1:1 auf Microsoft-Seite: Sie müssen es portieren, indem Sie API-Aufrufe neu mappen und jede Assertion testen. Planen Sie 30 Minuten bis 2 Stunden pro Skript für eine saubere Portierung je nach Komplexität.
Wie viele Skripte kann ein Microsoft-Ads-Konto gleichzeitig ausführen?
Microsoft Advertising erlaubt laut offizieller Dokumentation bis zu 50 Skripte pro Konto, mit einem Ausführungslimit von 30 Minuten pro Skript und einer täglichen API-Operations-Quote. Auf Konten, die in öffentlichen Google-Ads-Benchmarks beobachtet wurden, stellen 6 bis 12 aktive Skripte den Sweet Spot dar — darüber hinaus steigt das Konfliktrisiko (zwei Skripte, die dieselbe Entität gleichzeitig ändern), und das Debugging wird schmerzhaft. Praktische Regel: 1 Skript = 1 klare Geschäftsfunktion, lieber 8 einfache Skripte als ein 500-zeiliges Super-Skript, das alles macht. Microsoft loggt jede Ausführung mit Zeitstempeln und Fehlern, zugänglich unter Tools > Skripte.
Benötigt man eine besondere OAuth-Autorisierung für Microsoft Ads Scripts?
Nein, Skripte laufen im Kontext des Microsoft-Advertising-Kontos, an das sie angehängt sind, mit den Berechtigungen des Kontos. Keine separate OAuth nötig, um Konto-Entitäten (Kampagnen, Keywords, Negativ-Keywords) zu ändern. Wenn das Skript jedoch externe HTTP-Aufrufe tätigt (E-Mail-Versand, Drittanbieter-API-Lesen, Slack-Push), verwendet es UrlFetchApp mit Standardbeschränkungen: 30 Sekunden Timeout, begrenzte Payload-Größe, gültige SSL-Zertifikate erforderlich. Für Aufrufe, die Authentifizierung erfordern (Slack-Webhook, Google Sheets API), übergeben Sie das Token direkt in der URL oder in den Headern des UrlFetchApp.fetch.
Welche Ausführungsfrequenz wählen: stündlich, täglich, wöchentlich?
Hängt von der Kritikalität des Skripts ab. Stündlich für kritische Budget-Alerts (Kampagne, die ihr Budget bei einer Sale in wenigen Stunden überschreiten kann), Täglich für die Mehrheit (automatische Negativ-Keywords, CPC-Monitoring, Anomalien), Wöchentlich für Reporting und Trendanalyse. Auf Konten, die in öffentlichen Google-Ads-Benchmarks beobachtet wurden, ist das dominante Muster: 1–2 stündliche Skripte (Budget-Alert, Tracking-Monitoring), 4–6 tägliche Skripte (Negativ-Keywords, Pause Keywords, Anomalien), 1–2 wöchentliche Skripte (Reporting, Audit). Vermeiden Sie Über-Frequenz: Ein Skript, das Gebote stündlich anfasst, kann Smart Bidding schaden, das Stabilität benötigt.
Können Skripte von Smart Bidding verwaltete Entitäten ändern?
Technisch ja, funktional zu vermeiden. Das Ändern der Max-CPCs eines Keywords in einer Target-ROAS-Kampagne desynchronisiert Smart Bidding, das 7 bis 14 Tage in Lernzustand geht. Praktische Regel: Skripte sollten strukturelle Entitäten anfassen (Negativ-Keywords, Keyword-Status, Anzeigentexte, Audiences), aber Smart Bidding die Gebote verwalten lassen. Wenn Sie Bid-Anpassungen automatisieren wollen, tun Sie dies auf KAMPAGNEN in Manual CPC oder Maximize Clicks — nicht auf solchen in Target CPA/ROAS. Die offizielle Microsoft-Scripts-API-Dokumentation auf learn.microsoft.com behandelt Best Practices.