SteerAds
Microsoft AdsTutorielOptimisation

Script Microsoft Ads: 8 automazioni pronte

Microsoft Ads Scripts permettono di automatizzare ciò che l'interfaccia non propone: alert budget, negativi auto, anomalie CPC, reporting settimanale. Ecco 8 script pronti da incollare, testati in produzione su conti osservati nei benchmark Google Ads pubblici — con snippet JavaScript completi, variabili da personalizzare e trappole da evitare.

Matt
MattTracking & Data Lead
···10 min di lettura

Sui conti osservati nei benchmark Google Ads pubblici, automatizzare tramite Microsoft Ads Scripts fa risparmiare 4-8 ore a settimana di lavoro manuale (verifiche budget, aggiunta di negativi, monitoring tracking) — ovvero l'equivalente di un mezzo-giorno di PPC manager recuperato per la strategia. Microsoft Advertising detiene il 9% del desktop search negli US e il 4% in Italia al Q4 2025 (StatCounter); a questo livello di mercato, automatizzare non è più opzionale.

Questa guida è un deposito pronto da incollare: 8 script JavaScript testati in produzione, con le variabili da personalizzare, le trappole da evitare, e la frequenza di esecuzione raccomandata per ciascuno. Tutti portano una logica business chiara — niente codice decorativo. Se state iniziando su Microsoft Ads, leggete prima la nostra guida per principianti Microsoft Ads e il nostro confronto Microsoft Ads vs Google Ads. Il nostro calcolatore di spreco budget stima gli € bruciati/mese da broad senza negativi o bounce LP eccessivo.

Microsoft Ads Scripts nel 2026: cosa cambia vs Google Ads Scripts

Microsoft Ads Scripts (talvolta chiamato Microsoft Advertising Scripts) è l'equivalente diretto di Google Ads Scripts: un ambiente JavaScript serverless integrato nell'interfaccia Microsoft Advertising, che permette di eseguire codice a intervalli regolari (hourly, daily, weekly) per leggere o modificare le entità dell'account. La sintassi è JavaScript ES5 con alcuni apporti ES6 supportati dal 2024 (let, const, arrow function, template string).

L'API differisce da quella di Google Ads Scripts. Laddove Google espone AdsApp.campaigns(), Microsoft espone un selettore equivalente ma con metodi proprietari. Ecco la tabella comparativa delle differenze principali:

Tre differenze pratiche da conoscere prima di portare uno script Google:

  1. Nessun SpreadsheetApp nativo lato Microsoft. Se avete l'abitudine di loggare gli output su Google Sheets, dovrete utilizzare l'API Google Sheets tramite UrlFetchApp + un token OAuth. È più impiantistica per un risultato identico.
  2. Il formato data lato report differisce leggermente. Microsoft accetta i formati ISO (YYYY-MM-DD) ma certi metodi attendono oggetti Date nativi JS. Testare sistematicamente in preview.
  3. Il sistema di invio email passa per UrlFetchApp + un servizio esterno (SendGrid, Mailgun, o un endpoint custom). Microsoft non propone un MailApp built-in equivalente a Google Ads Scripts.

Documentazione ufficiale completa su learn.microsoft.com/advertising/scripts. È il riferimento per qualsiasi domanda di firma API o metodo poco documentato.

Setup: dove incollare uno script e come schedularlo

L'editor Scripts è accessibile in Microsoft Advertising tramite Tools > Scripts. La procedura di creazione di un nuovo script si articola in 5 step: creare lo script, incollare il codice, personalizzare le variabili, testare in preview, schedulare alla frequenza giusta.

La modalità Preview è non negoziabile. Esegue lo script in sola lettura, senza modificare le entità, e mostra il log completo nel pannello inferiore dell'editor. È la vostra rete di sicurezza: uno script mal scritto che pausa 5.000 keyword può bloccare l'account per settimane. Sempre preview prima del primo run programmato.

Le frequenze di esecuzione disponibili:

  • Hourly: ogni ora (24 volte al giorno). Per gli alert critici o le automazioni ad alta frequenza (alert budget, monitoring tracking).
  • Daily: una volta al giorno all'ora scelta. Per la maggioranza delle automazioni (negativi auto, monitoring CPC, pausa keyword).
  • Weekly: una volta a settimana. Per i reporting, le analisi trend, le operazioni pesanti.
  • Monthly: una volta al mese. Per gli audit strutturali, le pulizie.

Sui conti osservati nei benchmark Google Ads pubblici, il pattern dominante è: 1-2 script hourly (alert budget critico, monitoring tracking), 4-6 script daily (negativi, pausa keyword, anomalie), 1-2 script weekly (reporting, audit). Cumulare più di 12 script attivi inizia a creare conflitti — due script che modificano la stessa entità allo stesso momento generano comportamenti imprevedibili.

Autorizzazioni HTTP esterne: se il vostro script utilizza UrlFetchApp per inviare un'email, pushare su Slack, leggere un Google Sheet, Microsoft richiede un'autorizzazione esplicita la prima volta. La finestra di consenso elenca i domini a cui lo script può accedere. Questa autorizzazione è revocabile in qualsiasi momento in Tools > Scripts > Authorizations.

Tip dev :

Inserire sempre un Logger.log() (o equivalente Microsoft) all'inizio e alla fine di ogni sezione critica. Gli script che crashano in silenzio sono un inferno da debuggare 3 mesi dopo quando la performance cala. Il costo marginale di un log è zero, il beneficio operativo è massiccio.

Script 1: alert budget superato

Funzione: inviare un alert email (o Slack, o webhook) non appena una campagna consuma più del 90% del budget giornaliero in corso di giornata. Critico durante i periodi di sale, i picchi stagionali, o gli account a budget serrato.

Frequenza raccomandata: Hourly.

// Microsoft Ads Script — Budget Alert Hourly
// Variabili da personalizzare
var BUDGET_THRESHOLD_PCT = 0.90; // 90% del budget giornaliero
var ALERT_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL";
var ACCOUNT_NAME = "Account IT principale";

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 +
      " campagna/e > " + (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 })
    });
  }
}

Variabili da personalizzare: BUDGET_THRESHOLD_PCT (0.90 = 90%), ALERT_WEBHOOK_URL (Slack, Discord, webhook custom), ACCOUNT_NAME (utile se più account inviano sullo stesso canale).

Trappole da evitare:

  • Non lanciare mai questo script con frequenza Daily: a mezzanotte, il contatore resetta e tutte le campagne mostrano 0% — l'alert non serve a nulla.
  • Se avete un budget condiviso (Shared budget), c.getBudget().getAmount() restituisce il budget condiviso, non il budget allocato alla campagna — adattare lo script per iterare sugli Shared budget se necessario.

Script 2: negativi auto dal search query report

Funzione: analizzare il Search Query Report (SQR) sugli ultimi 30 giorni, identificare le query che consumano budget senza convertire, e aggiungerle automaticamente come negativi a livello campagna. La leva più redditizia dell'automazione Microsoft Ads.

Frequenza raccomandata: Daily.

// Microsoft Ads Script — Auto Negatives from SQR
// Variabili da personalizzare
var MIN_CLICKS_THRESHOLD = 15; // almeno 15 clic
var MAX_CONVERSIONS_THRESHOLD = 0; // nessuna conversione
var DATE_RANGE_DAYS = 30; // finestra di analisi
var DRY_RUN = true; // false per applicare realmente

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);
}

Variabili da personalizzare:

  • MIN_CLICKS_THRESHOLD: minimo di clic prima di aggiungere come negativo (15 = sweet spot, regolate secondo il volume).
  • MAX_CONVERSIONS_THRESHOLD: 0 = nessuna conversione. Se volete tollerare 1 conversione isolata, impostate 1.
  • DATE_RANGE_DAYS: 30 = finestra standard. Per un account a basso volume, estendere a 60 o 90.
  • DRY_RUN: lasciare true per il primo run, verificare il log, poi passare a false.

Trappole da evitare:

  • Sempre DRY_RUN: true al primo run. Leggere il log per validare che i negativi proposti abbiano senso. Una soglia mal calibrata può aggiungere 200 negativi in una notte.
  • Match type: qui phrase match (con virgolette). Per exact match, utilizzare '[' + queryText + ']'. Per broad, senza delimitatori.
  • Lo script aggiunge a livello campagna. Per aggiungere a livello account (preferibile per i negativi ultra-generici), utilizzare una Negative keyword list condivisa.

Script 3: pausa delle keyword low quality score

Funzione: identificare le keyword con Quality Score (Microsoft) inferiore a una soglia, e pausarle automaticamente dopo un periodo di osservazione. Permette di pulire l'account senza intervento manuale.

Frequenza raccomandata: Daily.

// Microsoft Ads Script — Pause Low Quality Score Keywords
// Variabili da personalizzare
var QS_THRESHOLD = 4; // pausa se QS < 4 (su 10)
var MIN_IMPRESSIONS = 500; // minimo di impression per validare
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);
}

Variabili da personalizzare:

  • QS_THRESHOLD: 4 = severo. Per iniziare, impostate 3 poi salite progressivamente a 4-5 secondo i risultati.
  • MIN_IMPRESSIONS: 500 minimo per avere un QS affidabile (altrimenti Microsoft restituisce un QS instabile).

Trappole da evitare:

  • Non lanciare mai questo script su keyword brand: una keyword brand può avere un QS basso a causa di un fattore LP non legato alla pertinenza (es.: LP che carica male, ma parole chiave molto pertinenti). Filtrate le campagne brand a monte.
  • Il QS è un indicatore Microsoft, non Google. Su Microsoft, il QS può variare più rapidamente (algoritmo più semplice) — una keyword pausata un giorno può ridiventare performante 2 settimane dopo. Considerate questo script come una pulizia, non una decisione definitiva.

Script 4: reporting settimanale email

Funzione: generare un report sintetico ogni lunedì mattina con i KPI chiave (clic, impression, conversioni, CPA, ROAS) per campagna, e inviarlo per email al team. Evita la connessione manuale per recuperare i numeri.

Frequenza raccomandata: Weekly (lunedì mattina).

// Microsoft Ads Script — Weekly Report Email
// Variabili da personalizzare
var EMAIL_RECIPIENT = "team@vostraazienda.com";
var EMAIL_API_URL = "https://api.sendgrid.com/v3/mail/send"; // o Mailgun, ecc.
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"
    });
  }

  // Costruzione 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>";

  // Invio tramite SendGrid (o altro 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@vostraazienda.com" },
      subject: "Weekly Microsoft Ads Report",
      content: [{ type: "text/html", value: html }]
    })
  });
}

Variabili da personalizzare: EMAIL_RECIPIENT, EMAIL_API_URL e EMAIL_API_KEY (SendGrid o Mailgun o equivalente), DATE_RANGE.

Trappole da evitare:

  • L'email API key è sensibile: non hardcodare mai in chiaro in uno script condiviso. Utilizzare un secret manager o un endpoint proxy dedicato.
  • Formato HTML semplicistico: per un report più visuale, integrare CSS inline o generare un PDF tramite un'API terza (PDFShift, DocRaptor).

Script 5-8: offerte dinamiche, anomalie, audience, monitoring Il nostro calcolatore CPC Italia gratuito fornisce i benchmark per settore e la zona-target raccomandata.

I 4 script restanti coprono i casi d'uso avanzati: aggiustamenti bid per fascia oraria, rilevamento anomalie CPC, refresh delle audience Customer Match, e monitoring delle conversioni UET.

Script 5 — Offerte dinamiche per fascia oraria (dayparting)

Funzione: aggiustare le offerte automaticamente per fascia oraria secondo i pattern di conversione osservati. Utile per i SaaS B2B (picco in giornata, calo sera/weekend) o gli e-com con stagionalità giorno/notte forte.

Frequenza raccomandata: Daily (a mezzanotte, applica il bid adjustment del giorno successivo).

Lo script legge il report di performance per hour-of-day sugli ultimi 30 giorni, calcola un coefficiente di bid adjustment per fascia (basato sul conv. rate), poi applica tramite setBidModifier() a livello campagna. Da non applicare sulle campagne in Smart Bidding (Target CPA/ROAS), solo su Manual CPC o Maximize Clicks.

Script 6 — Rilevamento anomalie CPC

Funzione: confrontare il CPC medio attuale degli ultimi 7 giorni con il CPC medio degli ultimi 30 giorni per campagna. Alertare se lo scarto supera il +25%. Rileva le offerte competitive che sbandano (concorrente aggressivo, stagionalità non anticipata, evento di mercato).

Frequenza raccomandata: Daily.

// Microsoft Ads Script — CPC Anomaly Detection
var CPC_VARIATION_THRESHOLD = 0.25; // +25% = alert
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] Anomalie CPC rilevate: " + alerts.join(" | ")
      })
    });
  }
}

Script 7 — Refresh audience Customer Match

Funzione: recuperare la lista CRM più aggiornata (tramite API CRM o Google Sheet), hasharla in SHA-256, e aggiornare la lista Customer Match lato Microsoft Advertising. Evita le liste obsolete che degradano il matching.

Frequenza raccomandata: Weekly.

Lo script utilizza UrlFetchApp per chiamare l'API CRM (HubSpot, Salesforce, custom), parsare la risposta, hashare ogni email/telefono, poi pushare verso Microsoft Audiences API. Consultate la nostra guida Customer Match first-party data 2026 per la strategia di audience completa.

Script 8 — Monitoring conversioni UET

Funzione: verificare ogni ora che il tag UET continui a far risalire conversioni. Alertare se nessuna conversione è stata registrata nelle ultime 6 ore mentre l'account è in attività. Rileva i guasti di tracking in meno di 6 ore (vs 24-48h in monitoring manuale).

Frequenza raccomandata: Hourly.

// Microsoft Ads Script — UET Conversion Monitoring
var ALERT_THRESHOLD_HOURS = 6;
var MIN_HOURLY_CLICKS = 20; // alert solo se traffico significativo
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; // traffico insufficiente

  if (conv === 0) {
    UrlFetchApp.fetch(ALERT_WEBHOOK_URL, {
      method: "POST",
      contentType: "application/json",
      payload: JSON.stringify({
        text: "[Microsoft Ads] ALERT: 0 conversioni nelle ultime " +
          ALERT_THRESHOLD_HOURS + " ore con " +
          clicks + " clic. Verificare il tag UET."
      })
    });
  }
}

Variabili da personalizzare: ALERT_THRESHOLD_HOURS, MIN_HOURLY_CLICKS (regolare secondo il volume dell'account), ALERT_WEBHOOK_URL.

Trappole da evitare:

  • Lo script deve adattarsi al profilo di traffico dell'account. Per un B2B con poche conversioni/giorno, abbassare MIN_HOURLY_CLICKS a 5-10; per un e-com grosso volume, alzare a 50.
  • Falsi positivi possibili il weekend o la notte se l'account gira 24/7 ma con conversioni concentrate in giornata. Filtrare le ore lavorative se applicabile.
Insight chiave :

Sui conti osservati nei benchmark Google Ads pubblici, gli account che attivano almeno 4 di questi 8 script risparmiano 4-8 ore a settimana di lavoro manuale e rilevano 2-4 volte più velocemente le anomalie (tracking, budget, CPC). È la leva di industrializzazione più redditizia una volta che l'account è stabilizzato sui fondamentali.

Per andare oltre sull'automazione lato Google Ads (10 script pronti da incollare, sintassi AdsApp), consultate la nostra guida dei 10 script Google Ads pronti da incollare. Per la base di audit che deve precedere ogni automazione, leggete la nostra checklist di audit Google Ads.

Per gli account che vogliono industrializzare il pilotaggio Microsoft Ads senza codificare i propri script, il nostro modulo Auto-ottimizzazione copre l'equivalente degli 8 script sopra in modalità gestita: monitoring continuo, alert Slack/email, aggiustamenti negativi e bid quotidiani, reporting settimanale. Consultate anche la nostra guida completa UET conversion tracking, la nostra guida all'import Google → Microsoft e la nostra analisi budget e CPC Microsoft Ads worldwide per i benchmark per verticale.

Per la documentazione ufficiale Microsoft, consultate il portale Microsoft Advertising Scripts e l'help center generale Microsoft Ads.

Fonti

Fonti ufficiali consultate per questa guida:

FAQ

Microsoft Ads Scripts utilizzano JavaScript come Google Ads Scripts?

Sì, la sintassi è JavaScript ES5 (con alcuni apporti ES6 supportati dal 2024) — vicina a Google Ads Scripts ma con un'API distinta. Gli oggetti accessibili differiscono: AdsApp lato Google diventa qualcosa come MicrosoftAdsApp (talvolta esposto tramite l'oggetto globale dell'ambiente Microsoft). I metodi (getCampaigns, getAdGroups, getKeywords) hanno signature simili ma non identiche. Concretamente, uno script Google Ads non si esegue tale e quale lato Microsoft: bisogna portarlo rimappando le chiamate API e testando ogni asserzione. Contate da 30 minuti a 2 ore per script per un porting pulito secondo la complessità.

Quanti script un account Microsoft Ads può far girare simultaneamente?

Microsoft Advertising autorizza fino a 50 script per account secondo la documentazione ufficiale, con un limite di esecuzione di 30 minuti per script e una quota di operazioni API al giorno. Sui conti osservati nei benchmark Google Ads pubblici, 6-12 script attivi rappresentano il sweet spot — oltre, il rischio di conflitto (due script che modificano la stessa entità simultaneamente) aumenta, e il debug diventa penoso. La regola pratica: 1 script = 1 funzione business chiara, meglio 8 script semplici che un super-script da 500 righe che fa tutto. Microsoft logga ogni esecuzione con timestamp ed errori, accessibile in Tools > Scripts.

Serve un'autorizzazione OAuth particolare per i Microsoft Ads Scripts?

No, gli script si eseguono nel contesto dell'account Microsoft Advertising a cui sono allegati, con i permessi dell'account. Non serve OAuth separato per modificare le entità dell'account (campagne, keyword, negativi). Tuttavia, se lo script fa chiamate HTTP esterne (invio email, lettura API terze, push verso Slack), utilizza UrlFetchApp con le restrizioni standard: timeout 30s, dimensione payload limitata, certificati SSL validi obbligatori. Per le chiamate che richiedono autenticazione (Slack webhook, Google Sheets API), passare il token direttamente nell'URL o negli header di UrlFetchApp.fetch.

Quale frequenza di esecuzione scegliere: hourly, daily, weekly?

Dipende dalla criticità dello script. Hourly per gli alert budget critici (campagna che può sforare il budget in poche ore durante un sale), Daily per la maggioranza (negativi auto, monitoring CPC, anomalie), Weekly per i reporting e le analisi trend. Sui conti osservati nei benchmark Google Ads pubblici, il pattern dominante è: 1-2 script hourly (alert budget, monitoring tracking), 4-6 script daily (negativi, pausa keyword, anomalie), 1-2 script weekly (reporting, audit). Evitate la sovra-frequenza: uno script che modifica le offerte a frequenza oraria può nuocere a Smart Bidding che ha bisogno di stabilità.

Gli script possono modificare le entità gestite da Smart Bidding?

Tecnicamente sì, funzionalmente da evitare. Modificare i CPC max di una keyword in una campagna Target ROAS desincronizza Smart Bidding, che passa in learning state per 7-14 giorni. La regola pratica: gli script devono toccare le entità strutturali (negativi, stato keyword, copy annuncio, audience) ma lasciare che Smart Bidding gestisca le offerte. Se volete automatizzare aggiustamenti bid, fatelo sulle CAMPAGNE in Manual CPC o Maximize Clicks — non su quelle in Target CPA/ROAS. La documentazione ufficiale Microsoft Scripts API su learn.microsoft.com copre le best practice.

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