SteerAds
Microsoft AdsTutorielOptimisation

Skrypty Microsoft Ads: 8 automatyzacji gotowych do kopii

Microsoft Ads Scripts pozwalają zautomatyzować to, czego interfejs nie oferuje: alerty budżetowe, automatyczne wykluczenia, anomalie CPC, tygodniowy raporting. Oto 8 skryptów gotowych do wklejenia, testowanych produkcyjnie na kontach obserwowanych w publicznych benchmarkach Google Ads — z kompletnymi snippetami JavaScript, zmiennymi do dostosowania i pułapkami do unikania.

Matt
MattTracking & Data Lead
···10 min czytania

Na kontach obserwowanych w publicznych benchmarkach Google Ads, automatyzacja przez Microsoft Ads Scripts oszczędza 4-8 godzin tygodniowo pracy manualnej (weryfikacje budżetu, dodawanie wykluczeń, monitoring śledzenia) — czyli odpowiednik pół dnia pracy PPC managera odzyskanego na strategię. Microsoft Advertising posiada 9% desktop search w USA i 4% we Francji w Q4 2025 (StatCounter); przy takim poziomie rynku, automatyzacja nie jest już opcjonalna.

Ten przewodnik to gotowe repozytorium do wklejenia: 8 skryptów JavaScript testowanych produkcyjnie, ze zmiennymi do dostosowania, pułapkami do unikania i zalecaną częstotliwością wykonania dla każdego. Wszystkie mają jasną logikę biznesową — bez kodu dekoracyjnego. Jeśli zaczynasz z Microsoft Ads, przeczytaj najpierw nasz przewodnik dla początkujących Microsoft Ads i nasze porównanie Microsoft Ads vs Google Ads. Nasz kalkulator marnowania budżetu szacuje €/miesiąc spalone przez broad bez wykluczeń lub nadmierny bounce LP.

Microsoft Ads Scripts w 2026: co zmienia się vs Google Ads Scripts

Microsoft Ads Scripts (czasami zwany Microsoft Advertising Scripts) to bezpośredni odpowiednik Google Ads Scripts: środowisko JavaScript serverless zintegrowane z interfejsem Microsoft Advertising, pozwalające na wykonywanie kodu w regularnych odstępach czasu (hourly, daily, weekly) do odczytu lub modyfikowania encji konta. Składnia to JavaScript ES5 z kilkoma uzupełnieniami ES6 obsługiwanymi od 2024 (let, const, arrow functions, template strings).

API różni się od Google Ads Scripts. Gdzie Google eksponuje AdsApp.campaigns(), Microsoft eksponuje równoważny selektor z własnymi metodami. Oto tabela porównawcza głównych różnic:

Trzy praktyczne różnice do znania przed portowaniem skryptu Google:

  1. Brak natywnego SpreadsheetApp po stronie Microsoft. Jeśli przyzwyczaiłeś się do logowania outputów w Google Sheets, będziesz musiał używać API Google Sheets przez UrlFetchApp + token OAuth. To więcej hydrauliki dla identycznego rezultatu.
  2. Format daty po stronie raportów różni się nieznacznie. Microsoft akceptuje formaty ISO (YYYY-MM-DD), ale niektóre metody oczekują natywnych obiektów Date JS. Systematycznie testować w preview.
  3. System wysyłania emaila przechodzi przez UrlFetchApp + zewnętrzną usługę (SendGrid, Mailgun lub niestandardowy endpoint). Microsoft nie oferuje wbudowanego odpowiednika MailApp jak Google Ads Scripts.

Kompletna oficjalna dokumentacja na learn.microsoft.com/advertising/scripts. To go-to dla każdego pytania o sygnaturę API lub niejasną metodę.

Setup: gdzie wkleić skrypt i jak go zaplanować

Edytor Scripts jest dostępny w Microsoft Advertising przez Tools > Scripts. Procedura tworzenia nowego skryptu sprowadza się do 5 kroków: utwórz skrypt, wklej kod, dostosuj zmienne, przetestuj w preview, zaplanuj z odpowiednią częstotliwością.

Tryb Preview jest niezbędny. Wykonuje skrypt w trybie tylko do odczytu, bez modyfikowania encji, i wyświetla kompletny log w dolnym panelu edytora. To Twoja siatka bezpieczeństwa: źle napisany skrypt wstrzymujący 5 000 słów kluczowych może zablokować konto na tygodnie. Zawsze preview przed pierwszym zaplanowanym uruchomieniem.

Dostępne częstotliwości wykonania:

  • Hourly: co godzinę (24 razy dziennie). Dla krytycznych alertów lub automatyzacji o wysokiej częstotliwości (alert budżetu, monitoring śledzenia).
  • Daily: raz dziennie o wybranej godzinie. Dla większości automatyzacji (automatyczne wykluczenia, monitoring CPC, wstrzymywanie słów kluczowych).
  • Weekly: raz w tygodniu. Dla raportingów, analiz trendów, ciężkich operacji.
  • Monthly: raz w miesiącu. Dla audytów strukturalnych, czyszczeń.

Na kontach obserwowanych w publicznych benchmarkach Google Ads, dominujący wzorzec to: 1-2 skrypty hourly (krytyczny alert budżetu, monitoring śledzenia), 4-6 skryptów daily (wykluczenia, wstrzymywanie słów kluczowych, anomalie), 1-2 skrypty weekly (raporting, audyt). Kumulowanie ponad 12 aktywnych skryptów zaczyna tworzyć konflikty — dwa skrypty modyfikujące tę samą encję jednocześnie generują nieprzewidywalne zachowania.

Zewnętrzne autoryzacje HTTP: jeśli Twój skrypt używa UrlFetchApp do wysyłania emaila, pushowania do Slacka, odczytu Google Sheet, Microsoft prosi o jawną autoryzację za pierwszym razem. Okno zgody wyświetla domeny, do których skrypt może uzyskać dostęp. Ta autoryzacja jest odwoływalna w dowolnym momencie w Tools > Scripts > Authorizations.

Dev tip :

Zawsze umieszczaj Logger.log() (lub odpowiednik Microsoft) na początku i na końcu każdej krytycznej sekcji. Skrypty, które padają w ciszy, to piekło do debugowania 3 miesiące później, gdy wydajność spada. Marginalny koszt logu jest zerowy, korzyść operacyjna jest masywna.

Skrypt 1: alert przekroczonego budżetu

Funkcja: wysyłanie alertu emailowego (lub Slack, lub webhook) gdy tylko kampania konsumuje ponad 90% dziennego budżetu w ciągu dnia. Krytyczny podczas okresów wyprzedaży, sezonowych szczytów lub kont z napiętym budżetem.

Zalecana częstotliwość: Hourly.

// Microsoft Ads Script — Budget Alert Hourly
// Variables à customiser
var BUDGET_THRESHOLD_PCT = 0.90; // 90% du budget journalier
var ALERT_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";
var ACCOUNT_NAME = "Compte FR principal";

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 +
      " campagne(s) > " + (BUDGET_THRESHOLD_PCT * 100) + "% budget : " +
      alerts.map(function(a) {
        return a.name + " (" + a.pct + "% — " + a.spent + "/" + a.budget + " EUR)";
      }).join(" | ");

    UrlFetchApp.fetch(ALERT_WEBHOOK_URL, {
      method: "POST",
      contentType: "application/json",
      payload: JSON.stringify({ text: message })
    });
  }
}

Zmienne do dostosowania: BUDGET_THRESHOLD_PCT (0.90 = 90%), ALERT_WEBHOOK_URL (Slack, Discord, niestandardowy webhook), ACCOUNT_NAME (przydatne gdy wiele kont wysyła na ten sam kanał).

Pułapki do unikania:

  • Nigdy nie uruchamiać tego skryptu w częstotliwości Daily: o północy licznik resetuje się i wszystkie kampanie wyświetlają 0% — alert do niczego nie służy.
  • Jeśli masz budżet współdzielony (Shared budget), c.getBudget().getAmount() zwraca budżet współdzielony, nie budżet przydzielony kampanii — dostosować skrypt do iterowania po Shared budgets w razie potrzeby.

Skrypt 2: automatyczne wykluczenia z raportu zapytań

Funkcja: analiza Search Query Report (SQR) z ostatnich 30 dni, identyfikacja zapytań konsumujących budżet bez konwersji i automatyczne dodawanie ich jako wykluczeń na poziomie kampanii. Najbardziej rentowna dźwignia automatyzacji Microsoft Ads.

Zalecana częstotliwość: Daily.

// Microsoft Ads Script — Auto Negatives from SQR
// Variables à customiser
var MIN_CLICKS_THRESHOLD = 15; // au moins 15 clics
var MAX_CONVERSIONS_THRESHOLD = 0; // aucune conversion
var DATE_RANGE_DAYS = 30; // fenêtre d'analyse
var DRY_RUN = true; // false pour appliquer réellement

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] Would add negative: '" + queryText +
        "' to campaign " + 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("Added negative: '" + queryText + "' to " + campaignName);
    }
  }

  Logger.log("Total negatives added: " + added);
}

Zmienne do dostosowania:

  • MIN_CLICKS_THRESHOLD: minimalna liczba kliknięć przed dodaniem jako wykluczenie (15 = sweet spot, dostosuj według wolumenu).
  • MAX_CONVERSIONS_THRESHOLD: 0 = brak konwersji. Jeśli chcesz tolerować 1 izolowaną konwersję, ustaw 1.
  • DATE_RANGE_DAYS: 30 = standardowe okno. Dla konta z niskim wolumenem, rozszerzyć do 60 lub 90.
  • DRY_RUN: pozostawić true dla pierwszego uruchomienia, sprawdzić log, następnie ustawić false.

Pułapki do unikania:

  • Zawsze DRY_RUN: true przy pierwszym uruchomieniu. Przeczytać log, by zwalidować, że proponowane wykluczenia mają sens. Źle skalibrowany próg może dodać 200 wykluczeń w jedną noc.
  • Typ dopasowania: tutaj phrase match (z cudzysłowami). Dla exact match użyć '[' + queryText + ']'. Dla broad, bez opakowania.
  • Skrypt dodaje na poziomie kampanii. Aby dodać na poziomie konta (preferowane dla ultra-generycznych wykluczeń), użyć współdzielonej listy wykluczeń.

Skrypt 3: wstrzymanie słów kluczowych z niskim Quality Score

Funkcja: identyfikacja słów kluczowych z Quality Score (Microsoft) poniżej progu i automatyczne ich wstrzymywanie po okresie obserwacji. Pozwala czyścić konto bez ręcznej interwencji.

Zalecana częstotliwość: Daily.

// Microsoft Ads Script — Pause Low Quality Score Keywords
// Variables à customiser
var QS_THRESHOLD = 4; // pause si QS < 4 (sur 10)
var MIN_IMPRESSIONS = 500; // minimum d'impressions pour valider
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("Pausing: '" + keywordText + "' (QS=" + qs +
      ", Impr=" + impressions + ", Campaign=" + campaign + ")");

    k.pause();
    paused++;
  }

  Logger.log("Total keywords paused: " + paused);
}

Zmienne do dostosowania:

  • QS_THRESHOLD: 4 = rygorystyczny. Na start, ustaw 3, następnie stopniowo podnoś do 4-5 według wyników.
  • MIN_IMPRESSIONS: 500 minimum dla wiarygodnego QS (inaczej Microsoft zwraca niestabilny QS).

Pułapki do unikania:

  • Nigdy nie uruchamiać tego skryptu dla słów kluczowych brand: słowo kluczowe brand może mieć niski QS z powodu czynnika LP niezwiązanego z trafnością (np.: LP ładuje się źle, ale słowa kluczowe są bardzo trafne). Filtruj kampanie brand z góry.
  • QS to wskaźnik Microsoft, nie Google. W Microsoft QS może zmieniać się szybciej (prostszy algorytm) — słowo kluczowe wstrzymane w jeden dzień może stać się wydajne 2 tygodnie później. Traktuj ten skrypt jako czyszczenie, nie definitywną decyzję.

Skrypt 4: tygodniowy raport emailowy

Funkcja: generowanie syntetycznego raportu w każdy poniedziałek rano z kluczowymi KPI (kliknięcia, wyświetlenia, konwersje, CPA, ROAS) według kampanii i wysyłanie go emailem do zespołu. Unika ręcznego logowania się po liczby.

Zalecana częstotliwość: Weekly (poniedziałek rano).

// Microsoft Ads Script — Weekly Report Email
// Variables à customiser
var EMAIL_RECIPIENT = "team@votreentreprise.com";
var EMAIL_API_URL = "https://api.sendgrid.com/v3/mail/send"; // ou Mailgun, etc.
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"
    });
  }

  // Construction HTML
  var html = "<h2 data-speakable>Weekly Microsoft Ads Report — " + DATE_RANGE + "</h2>";
  html += "<table border='1' cellpadding='8' style='border-collapse:collapse;'>";
  html += "<tr><th>Campaign</th><th>Impr.</th><th>Clicks</th>" +
    "<th>Cost</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>";

  // Envoi via SendGrid (ou autre 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@votreentreprise.com" },
      subject: "Weekly Microsoft Ads Report",
      content: [{ type: "text/html", value: html }]
    })
  });
}

Zmienne do dostosowania: EMAIL_RECIPIENT, EMAIL_API_URL i EMAIL_API_KEY (SendGrid lub Mailgun lub odpowiednik), DATE_RANGE.

Pułapki do unikania:

  • Klucz API emaila jest wrażliwy: nigdy nie hardcodować w postaci jawnej w skrypcie współdzielonym. Używać secret managera lub dedykowanego proxy endpoint.
  • Uproszczony format HTML: dla bardziej wizualnego raportu, zintegrować CSS inline lub generować PDF przez zewnętrzne API (PDFShift, DocRaptor).

Skrypty 5-8: dynamiczne stawki, anomalie, publiczności, monitoring. Nasz darmowy kalkulator CPC Francja dostarcza benchmarki według sektora i zalecaną strefę docelową.

4 pozostałe skrypty obejmują zaawansowane przypadki użycia: korekty bid według przedziału czasowego, wykrywanie anomalii CPC, odświeżanie publiczności Customer Match i monitoring konwersji UET.

Skrypt 5 — Dynamiczne stawki według przedziału czasowego (dayparting)

Funkcja: automatyczne dostosowywanie stawek według przedziału czasowego na podstawie obserwowanych wzorców konwersji. Użyteczne dla SaaS B2B (szczyt w ciągu dnia, spadek wieczór/weekend) lub e-commerce z silną sezonowością dzień/noc.

Zalecana częstotliwość: Daily (o północy, stosuje korektę bid na następny dzień).

Skrypt odczytuje raport wydajności hour-of-day z ostatnich 30 dni, oblicza współczynnik korekty bid według przedziału (na podstawie wskaźnika konwersji), następnie stosuje przez setBidModifier() na poziomie kampanii. Nie stosować dla kampanii w Smart Bidding (Target CPA/ROAS), wyłącznie dla Manual CPC lub Maximize Clicks.

Skrypt 6 — Wykrywanie anomalii CPC

Funkcja: porównanie aktualnego średniego CPC z ostatnich 7 dni ze średnim CPC z ostatnich 30 dni według kampanii. Alert jeśli różnica przekracza +25%. Wykrywa deregulujące się stawki konkurencyjne (agresywny konkurent, nieprzewidziana sezonowość, zdarzenie rynkowe).

Zalecana częstotliwość: Daily.

// Microsoft Ads Script — CPC Anomaly Detection
var CPC_VARIATION_THRESHOLD = 0.25; // +25% = alerte
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; // skip low volume

    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) + " EUR)");
    }
  }

  if (alerts.length > 0) {
    UrlFetchApp.fetch(ALERT_WEBHOOK_URL, {
      method: "POST",
      contentType: "application/json",
      payload: JSON.stringify({
        text: "[Microsoft Ads] CPC anomalies detected: " + alerts.join(" | ")
      })
    });
  }
}

Skrypt 7 — Odświeżanie publiczności Customer Match

Funkcja: pobieranie najbardziej aktualnej listy CRM (przez API CRM lub Google Sheet), hashowanie SHA-256 i aktualizacja listy Customer Match po stronie Microsoft Advertising. Unika przestarzałych list degradujących matching.

Zalecana częstotliwość: Weekly.

Skrypt używa UrlFetchApp do wywoływania API CRM (HubSpot, Salesforce, niestandardowego), parsuje odpowiedź, hashuje każdy email/telefon, następnie pushuje do Microsoft Audiences API. Patrz nasz przewodnik Customer Match first-party data 2026 dla kompletnej strategii publiczności.

Skrypt 8 — Monitoring konwersji UET

Funkcja: weryfikacja co godzinę, że tag UET nadal raportuje konwersje. Alert jeśli przez ostatnie 6 godzin nie zarejestrowano żadnej konwersji, a konto jest aktywne. Wykrywa awarie śledzenia w mniej niż 6 godzin (vs 24-48h w manualnym monitoringu).

Zalecana częstotliwość: Hourly.

// Microsoft Ads Script — UET Conversion Monitoring
var ALERT_THRESHOLD_HOURS = 6;
var MIN_HOURLY_CLICKS = 20; // alerte uniquement si trafic significatif
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; // pas assez de trafic

  if (conv === 0) {
    UrlFetchApp.fetch(ALERT_WEBHOOK_URL, {
      method: "POST",
      contentType: "application/json",
      payload: JSON.stringify({
        text: "[Microsoft Ads] ALERTE : 0 conversion sur les " +
          ALERT_THRESHOLD_HOURS + " dernières heures avec " +
          clicks + " clicks. Vérifier le tag UET."
      })
    });
  }
}

Zmienne do dostosowania: ALERT_THRESHOLD_HOURS, MIN_HOURLY_CLICKS (dostosować do wolumenu konta), ALERT_WEBHOOK_URL.

Pułapki do unikania:

  • Skrypt musi pasować do profilu ruchu konta. Dla B2B z nielicznymi konwersjami dziennie, obniżyć MIN_HOURLY_CLICKS do 5-10; dla e-commerce dużego wolumenu, podnieść do 50.
  • Możliwe fałszywe pozytywy w weekendy lub w nocy jeśli konto działa 24/7, ale konwersje są skoncentrowane w ciągu dnia. Filtrować godziny biurowe w razie potrzeby.
Kluczowy insight :

Na kontach obserwowanych w publicznych benchmarkach Google Ads, konta, które aktywują co najmniej 4 z tych 8 skryptów, oszczędzają 4-8 godzin tygodniowo pracy manualnej i wykrywają 2-4 razy szybciej anomalie (śledzenie, budżet, CPC). To najbardziej rentowna dźwignia industrializacji po ustabilizowaniu konta na podstawach.

Aby pójść dalej w automatyzacji po stronie Google Ads (10 skryptów gotowych do wklejenia, składnia AdsApp), patrz nasz przewodnik 10 skryptów Google Ads gotowych do wklejenia. Dla podstawy audytu, która musi poprzedzać każdą automatyzację, przeczytaj naszą checklistę audytu Google Ads.

Dla kont, które chcą uprzemysłowić zarządzanie Microsoft Ads bez kodowania własnych skryptów, nasz moduł Auto-optymalizacji obejmuje odpowiednik 8 powyższych skryptów w trybie managed: ciągły monitoring, alerty Slack/email, codzienne korekty wykluczeń i stawek, tygodniowy raporting. Patrz też nasz kompletny przewodnik UET conversion tracking, nasz przewodnik importu Google → Microsoft i naszą analizę budżetu i CPC Microsoft Ads worldwide dla benchmarków według pionu.

Dla oficjalnej dokumentacji Microsoft, patrz portal Microsoft Advertising Scripts i ogólne centrum pomocy Microsoft Ads.

Źródła

Oficjalne źródła wykorzystane w tym przewodniku:

FAQ

Czy Microsoft Ads Scripts używają JavaScript jak Google Ads Scripts?

Tak, składnia to JavaScript ES5 (z kilkoma uzupełnieniami ES6 obsługiwanymi od 2024) — zbliżona do Google Ads Scripts, ale z odrębnym API. Dostępne obiekty różnią się: AdsApp po stronie Google staje się czymś w rodzaju MicrosoftAdsApp (czasami eksponowanym przez globalny obiekt środowiska Microsoft). Metody (getCampaigns, getAdGroups, getKeywords) mają podobne, ale nie identyczne sygnatury. W praktyce, skrypt Google Ads nie uruchomi się bezpośrednio po stronie Microsoft: trzeba go przeportować remapując wywołania API i testując każde twierdzenie. Licząc 30 minut do 2 godzin na skrypt dla czystego portu, zależnie od złożoności.

Ile skryptów może jednocześnie działać na koncie Microsoft Ads?

Microsoft Advertising zezwala na do 50 skryptów na konto według oficjalnej dokumentacji, z limitem wykonania 30 minut na skrypt i kwotą operacji API dziennie. Na kontach obserwowanych w publicznych benchmarkach Google Ads, 6-12 aktywnych skryptów to sweet spot — powyżej rośnie ryzyko konfliktu (dwa skrypty modyfikujące tę samą encję jednocześnie) i debugowanie staje się uciążliwe. Praktyczna zasada: 1 skrypt = 1 jasna funkcja biznesowa, lepiej 8 prostych skryptów niż 1 super-skrypt 500 linii robiący wszystko. Microsoft loguje każde wykonanie z znacznikami czasu i błędami, dostępnymi w Tools > Scripts.

Czy do Microsoft Ads Scripts potrzebna jest specjalna autoryzacja OAuth?

Nie, skrypty działają w kontekście konta Microsoft Advertising, do którego są dołączone, z uprawnieniami konta. Nie potrzeba osobnego OAuth do modyfikowania encji konta (kampanie, słowa kluczowe, wykluczenia). Natomiast jeśli skrypt wykonuje zewnętrzne wywołania HTTP (wysyłanie emaila, odczyt zewnętrznego API, push do Slacka), używa UrlFetchApp ze standardowymi ograniczeniami: timeout 30s, ograniczony rozmiar payload, wymagane ważne certyfikaty SSL. Dla wywołań wymagających uwierzytelniania (webhook Slack, API Google Sheets), przekazać token bezpośrednio w URL lub nagłówkach UrlFetchApp.fetch.

Jaką częstotliwość wykonania wybrać: hourly, daily, weekly?

Zależy od krytyczności skryptu. Hourly dla krytycznych alertów budżetowych (kampania, która może przekroczyć budżet w kilka godzin podczas wyprzedaży), Daily dla większości (automatyczne wykluczenia, monitoring CPC, anomalie), Weekly dla raportingów i analiz trendów. Na kontach obserwowanych w publicznych benchmarkach Google Ads, dominujący wzorzec to: 1-2 skrypty hourly (alert budżetu, monitoring śledzenia), 4-6 skryptów daily (wykluczenia, wstrzymywanie słów kluczowych, anomalie), 1-2 skrypty weekly (raporting, audyt). Unikaj nadmiernej częstotliwości: skrypt dotykający stawki co godzinę może zaszkodzić Smart Biddingowi, który potrzebuje stabilności.

Czy skrypty mogą modyfikować encje zarządzane przez Smart Bidding?

Technicznie tak, funkcjonalnie należy unikać. Modyfikowanie max CPC słowa kluczowego w kampanii Target ROAS desynchronizuje Smart Bidding, który przechodzi w stan nauki przez 7-14 dni. Praktyczna zasada: skrypty powinny dotykać encji strukturalnych (wykluczenia, status słów kluczowych, treść reklam, publiczności), ale pozostawiać Smart Biddingowi zarządzanie stawkami. Jeśli chcesz zautomatyzować korekty bid, rób to dla KAMPANII w Manual CPC lub Maximize Clicks — nie dla tych w Target CPA/ROAS. Oficjalna dokumentacja Microsoft Scripts API na learn.microsoft.com omawia dobre praktyki.

Ready to optimize your campaigns?

Start a free audit in 2 minutes and discover the ROI potential of your accounts.

Start my free audit

Free audit — no credit card required

Keep reading