SteerAds
Microsoft AdsTutorielOptimisation

Scripts Microsoft Ads: 8 automações para copiar

Microsoft Ads Scripts permitem automatizar o que a interface não oferece: alertas de orçamento, negativos automáticos, anomalias CPC, reporting semanal. Aqui estão 8 scripts prontos para colar, testados em produção em contas observadas nos benchmarks públicos do Google Ads — com snippets JavaScript completos, variáveis a customizar e armadilhas a evitar.

Matt
MattTracking & Data Lead
···10 min de leitura

Nas contas observadas nos benchmarks públicos do Google Ads, automatizar via Microsoft Ads Scripts economiza 4 a 8 horas por semana de trabalho manual (verificações de orçamento, adição de negativos, monitoramento de tracking) — ou seja, o equivalente a meio dia de PPC manager recuperado para a estratégia. O Microsoft Advertising detém 9% do desktop search nos EUA e 4% na França no Q4 2025 (StatCounter); neste nível de mercado, automatizar não é mais opcional.

Este guia é um repositório pronto para colar: 8 scripts JavaScript testados em produção, com as variáveis a customizar, as armadilhas a evitar, e a frequência de execução recomendada para cada um. Todos carregam uma lógica de negócio clara — sem código decorativo. Se você está começando no Microsoft Ads, leia primeiro nosso guia iniciante Microsoft Ads e nosso comparativo Microsoft Ads vs Google Ads. Nosso calculador de desperdício de orçamento estima os euros queimados/mês por broad sem negativos ou bounce LP excessivo.

Microsoft Ads Scripts em 2026: o que muda vs Google Ads Scripts

Microsoft Ads Scripts (às vezes chamado Microsoft Advertising Scripts) é o equivalente direto do Google Ads Scripts: um ambiente JavaScript serverless integrado à interface Microsoft Advertising, que permite executar código em intervalos regulares (hourly, daily, weekly) para ler ou modificar as entidades da conta. A sintaxe é JavaScript ES5 com alguns recursos ES6 suportados desde 2024 (let, const, arrow functions, template strings).

A API difere da do Google Ads Scripts. Onde o Google expõe AdsApp.campaigns(), o Microsoft expõe um seletor equivalente mas com métodos proprietários. Eis a tabela comparativa das diferenças principais:

Três diferenças práticas a conhecer antes de portar um script Google:

  1. Sem SpreadsheetApp nativo do lado Microsoft. Se você tem o hábito de registrar outputs no Google Sheets, terá que usar a API Google Sheets via UrlFetchApp + um token OAuth. É mais encanamento para um resultado idêntico.
  2. O formato de data do lado reports difere ligeiramente. O Microsoft aceita formatos ISO (YYYY-MM-DD) mas certos métodos esperam objetos Date nativos JS. Testar sistematicamente em preview.
  3. O sistema de envio de email passa por UrlFetchApp + um serviço externo (SendGrid, Mailgun, ou um endpoint custom). A Microsoft não propõe um MailApp built-in equivalente ao Google Ads Scripts.

Documentação oficial completa em learn.microsoft.com/advertising/scripts. É a referência para qualquer questão de assinatura API ou método obscuro.

Setup: onde colar um script e como schedulá-lo

O editor Scripts é acessível no Microsoft Advertising via Tools > Scripts. O procedimento de criação de um novo script tem 5 etapas: criar o script, colar o código, customizar as variáveis, testar em preview, schedular na frequência correta.

O modo Preview é inegociável. Ele executa o script em modo somente leitura, sem modificar as entidades, e exibe o log completo no painel inferior do editor. É sua rede de segurança: um script mal escrito que pausa 5.000 keywords pode bloquear a conta por semanas. Sempre preview antes da primeira execução programada.

As frequências de execução disponíveis:

  • Hourly: a cada hora (24 vezes por dia). Para alertas críticas ou automatizações de alta frequência (alerta orçamento, monitoramento tracking).
  • Daily: uma vez por dia na hora escolhida. Para a maioria das automatizações (negativos automáticos, monitoramento CPC, pause keywords).
  • Weekly: uma vez por semana. Para reportings, análises de tendência, operações pesadas.
  • Monthly: uma vez por mês. Para auditorias estruturais, limpezas.

Nas contas observadas nos benchmarks públicos do Google Ads, o padrão dominante é: 1-2 scripts hourly (alerta orçamento crítico, monitoramento tracking), 4-6 scripts daily (negativos, pause keywords, anomalias), 1-2 scripts weekly (reporting, auditoria). Acumular mais de 12 scripts ativos começa a criar conflitos — dois scripts que modificam a mesma entidade ao mesmo tempo geram comportamentos imprevisíveis.

Autorizações HTTP externas: se seu script usa UrlFetchApp para enviar email, push no Slack, ler Google Sheet, a Microsoft pede autorização explícita na primeira vez. A janela de consentimento lista os domínios aos quais o script pode acessar. Esta autorização é revogável a qualquer momento em Tools > Scripts > Authorizations.

Dica dev :

Sempre colocar um Logger.log() (ou equivalente Microsoft) no início e no final de cada seção crítica. Scripts que falham em silêncio são o inferno para debugar 3 meses depois quando a performance cai. O custo marginal de um log é zero, o benefício operacional é massivo.

Script 1: alerta orçamento excedido

Função: enviar um alerta email (ou Slack, ou webhook) assim que uma campanha consome mais de 90% de seu orçamento diário durante o dia. Crítico durante períodos de promoção, picos sazonais, ou contas com orçamento apertado.

Frequência recomendada: 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 })
    });
  }
}

Variáveis a customizar: BUDGET_THRESHOLD_PCT (0.90 = 90%), ALERT_WEBHOOK_URL (Slack, Discord, custom webhook), ACCOUNT_NAME (útil se várias contas enviam no mesmo channel).

Armadilhas a evitar:

  • Nunca executar este script em frequência Daily: à meia-noite, o contador reseta e todas as campanhas exibem 0% — o alerta não serve para nada.
  • Se você tem orçamento compartilhado (Shared budget), c.getBudget().getAmount() retorna o orçamento compartilhado, não o alocado à campanha — adaptar o script para iterar sobre os Shared budgets se necessário.

Script 2: negativos automáticos a partir do search query report

Função: analisar o Search Query Report (SQR) nos últimos 30 dias, identificar as consultas que consomem orçamento sem converter, e adicioná-las automaticamente como negativos no nível campanha. A alavanca mais rentável da automatização Microsoft Ads.

Frequência recomendada: 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);
}

Variáveis a customizar:

  • MIN_CLICKS_THRESHOLD: mínimo de cliques antes de adicionar como negativo (15 = sweet spot, ajuste conforme volume).
  • MAX_CONVERSIONS_THRESHOLD: 0 = nenhuma conversão. Se quiser tolerar 1 conversão isolada, coloque 1.
  • DATE_RANGE_DAYS: 30 = janela padrão. Para conta com baixo volume, estender a 60 ou 90.
  • DRY_RUN: deixar true na primeira execução, verificar o log, depois passar a false.

Armadilhas a evitar:

  • Sempre DRY_RUN: true na primeira execução. Ler o log para validar que os negativos propostos fazem sentido. Um limiar mal calibrado pode adicionar 200 negativos em uma noite.
  • Match type: aqui phrase match (com aspas). Para exact match, usar '[' + queryText + ']'. Para broad, sem delimitador.
  • O script adiciona no nível campanha. Para adicionar no nível conta (preferível para negativos ultragenéricos), usar uma Negative keyword list compartilhada.

Script 3: pause de keywords com low quality score

Função: identificar as keywords com Quality Score (Microsoft) inferior a um limiar, e pausá-las automaticamente após um período de observação. Permite limpar a conta sem intervenção manual.

Frequência recomendada: 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);
}

Variáveis a customizar:

  • QS_THRESHOLD: 4 = estrito. Para começar, coloque 3 e suba progressivamente para 4-5 conforme retornos.
  • MIN_IMPRESSIONS: 500 mínimo para ter um QS confiável (senão Microsoft retorna QS instável).

Armadilhas a evitar:

  • Nunca executar este script em keywords brand: um keyword brand pode ter QS baixo por causa de um fator LP não relacionado à pertinência (ex: LP que carrega mal, mas palavras-chave muito pertinentes). Filtre as campanhas brand antecipadamente.
  • O QS é um indicador Microsoft, não Google. No Microsoft, o QS pode mudar mais rápido (algoritmo mais simples) — um keyword pausado um dia pode voltar a ser performante 2 semanas depois. Considere este script como limpeza, não decisão definitiva.

Script 4: reporting semanal por email

Função: gerar um relatório sintético toda segunda-feira de manhã com os KPIs chave (cliques, impressões, conversões, CPA, ROAS) por campanha, e enviá-lo por email à equipe. Evita a conexão manual para recuperar os números.

Frequência recomendada: Weekly (segunda-feira de manhã).

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

Variáveis a customizar: EMAIL_RECIPIENT, EMAIL_API_URL e EMAIL_API_KEY (SendGrid ou Mailgun ou equivalente), DATE_RANGE.

Armadilhas a evitar:

  • A chave API de email é sensível: nunca hardcode em texto claro em um script compartilhado. Usar um secret manager ou um endpoint proxy dedicado.
  • Formato HTML simplista: para um relatório mais visual, integrar CSS inline ou gerar um PDF via uma API terceira (PDFShift, DocRaptor).

Scripts 5 a 8: lances dinâmicos, anomalias, audiências, monitoramento. Nosso calculador CPC França gratuito fornece os benchmarks por setor e a zona-alvo recomendada.

Os 4 scripts restantes cobrem os casos de uso avançados: ajustes de bid por faixa horária, detecção de anomalias CPC, refresh de audiências Customer Match, e monitoramento das conversões UET.

Script 5 — Lances dinâmicos por faixa horária (dayparting)

Função: ajustar os lances automaticamente por faixa horária segundo os padrões de conversão observados. Útil para SaaS B2B (pico durante o dia, queda noite/fim de semana) ou e-com com sazonalidade dia/noite forte.

Frequência recomendada: Daily (à meia-noite, aplica o bid adjustment do dia seguinte).

O script lê o relatório de performance por hour-of-day nos últimos 30 dias, calcula um coeficiente de bid adjustment por faixa (baseado na taxa de conversão), depois aplica via setBidModifier() no nível campanha. A não aplicar nas campanhas em Smart Bidding (Target CPA/ROAS), apenas em Manual CPC ou Maximize Clicks.

Script 6 — Detecção de anomalias CPC

Função: comparar o CPC médio atual dos últimos 7 dias ao CPC médio dos últimos 30 dias por campanha. Alertar se a diferença excede +25%. Detecta os lances concorrenciais que derrapam (competidor agressivo, sazonalidade não antecipada, evento de mercado).

Frequência recomendada: 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(" | ")
      })
    });
  }
}

Script 7 — Refresh audiências Customer Match

Função: recuperar a lista CRM mais atualizada (via API CRM ou Google Sheet), hashear em SHA-256, e atualizar a lista Customer Match do lado Microsoft Advertising. Evita listas desatualizadas que degradam o matching.

Frequência recomendada: Weekly.

O script usa UrlFetchApp para chamar a API CRM (HubSpot, Salesforce, custom), parseia a resposta, hasheia cada email/telefone, depois envia para Microsoft Audiences API. Veja nosso guia Customer Match first-party data 2026 para a estratégia de audiência completa.

Script 8 — Monitoramento conversões UET

Função: verificar a cada hora que a tag UET continua reportando conversões. Alertar se nenhuma conversão foi registrada nas últimas 6 horas enquanto a conta está em atividade. Detecta falhas de tracking em menos de 6 horas (vs 24-48h em monitoramento manual).

Frequência recomendada: 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] ALERTA: 0 conversão nas últimas " +
          ALERT_THRESHOLD_HOURS + " horas com " +
          clicks + " clicks. Verificar a tag UET."
      })
    });
  }
}

Variáveis a customizar: ALERT_THRESHOLD_HOURS, MIN_HOURLY_CLICKS (ajustar conforme volume da conta), ALERT_WEBHOOK_URL.

Armadilhas a evitar:

  • O script deve se adequar ao perfil de tráfego da conta. Para B2B com poucas conversões/dia, baixar MIN_HOURLY_CLICKS para 5-10; para e-com de grande volume, subir para 50.
  • Falsos positivos possíveis no fim de semana ou à noite se a conta opera 24/7 mas com conversões concentradas durante o dia. Filtrar as horas de escritório se aplicável.
Insight chave :

Nas contas observadas nos benchmarks públicos do Google Ads, as contas que ativam pelo menos 4 destes 8 scripts economizam 4 a 8 horas por semana de trabalho manual e detectam 2 a 4 vezes mais rápido as anomalias (tracking, orçamento, CPC). É a alavanca de industrialização mais rentável uma vez a conta estabilizada nos fundamentos.

Para ir além na automatização do lado Google Ads (10 scripts prontos para colar, sintaxe AdsApp), veja nosso guia dos 10 scripts Google Ads prontos para colar. Para a base de auditoria que deve preceder toda automatização, leia nossa checklist de auditoria Google Ads.

Para as contas que querem industrializar a pilotagem Microsoft Ads sem codificar seus próprios scripts, nosso módulo Auto-otimização cobre o equivalente dos 8 scripts acima em modo gerenciado: monitoramento contínuo, alertas Slack/email, ajustes de negativos e bid diários, reporting semanal. Veja também nosso guia completo UET conversion tracking, nosso guia de importação Google → Microsoft e nossa análise orçamento e CPC Microsoft Ads worldwide para os benchmarks por vertical.

Para a documentação oficial Microsoft, veja o portal Microsoft Advertising Scripts e o help center geral Microsoft Ads.

Fontes

Fontes oficiais consultadas para este guia:

FAQ

Microsoft Ads Scripts usam JavaScript como Google Ads Scripts?

Sim, a sintaxe é JavaScript ES5 (com alguns recursos ES6 suportados desde 2024) — próxima do Google Ads Scripts mas com uma API distinta. Os objetos acessíveis diferem: AdsApp do lado Google se torna algo como MicrosoftAdsApp (às vezes exposto via o objeto global do ambiente Microsoft). Os métodos (getCampaigns, getAdGroups, getKeywords) têm assinaturas similares mas não idênticas. Concretamente, um script Google Ads não executa tal qual do lado Microsoft: é preciso portá-lo remapeando as chamadas API e testando cada asserção. Conte 30 minutos a 2 horas por script para uma portagem limpa conforme a complexidade.

Quantos scripts uma conta Microsoft Ads pode executar simultaneamente?

O Microsoft Advertising autoriza até 50 scripts por conta segundo a documentação oficial, com um limite de execução de 30 minutos por script e uma cota de operações API por dia. Nas contas observadas nos benchmarks públicos do Google Ads, 6 a 12 scripts ativos representam o sweet spot — além disso, o risco de conflito (dois scripts modificando a mesma entidade simultaneamente) aumenta, e o debug se torna penoso. A regra prática: 1 script = 1 função de negócio clara, melhor 8 scripts simples do que um super-script de 500 linhas que faz tudo. A Microsoft registra cada execução com timestamps e erros, acessível em Tools > Scripts.

É necessária uma autorização OAuth particular para os Microsoft Ads Scripts?

Não, os scripts se executam no contexto da conta Microsoft Advertising à qual estão vinculados, com as permissões da conta. Não é necessário OAuth separado para modificar as entidades da conta (campanhas, keywords, negativos). Porém, se o script faz chamadas HTTP externas (envio email, leitura API terceira, push para Slack), ele usa UrlFetchApp com as restrições padrão: timeout 30s, tamanho payload limitado, certificados SSL válidos obrigatórios. Para chamadas que requerem autenticação (Slack webhook, Google Sheets API), passar o token diretamente na URL ou nos headers do UrlFetchApp.fetch.

Qual frequência de execução escolher: hourly, daily, weekly?

Depende da criticidade do script. Hourly para alertas de orçamento críticas (campanha que pode exceder seu orçamento em poucas horas durante uma promoção), Daily para a maioria (negativos automáticos, monitoramento CPC, anomalias), Weekly para reportings e análises de tendência. Nas contas observadas nos benchmarks públicos do Google Ads, o padrão dominante é: 1-2 scripts hourly (alerta orçamento, monitoramento tracking), 4-6 scripts daily (negativos, pause keywords, anomalias), 1-2 scripts weekly (reporting, auditoria). Evite over-frequency: um script que toca nos lances em frequência horária pode prejudicar o Smart Bidding que precisa de estabilidade.

Os scripts podem modificar as entidades gerenciadas pelo Smart Bidding?

Tecnicamente sim, funcionalmente a evitar. Modificar os CPC max de um keyword em uma campanha Target ROAS dessincroniza o Smart Bidding, que entra em learning state durante 7 a 14 dias. A regra prática: os scripts devem tocar nas entidades estruturais (negativos, status de keywords, ad copy, audiências) mas deixar o Smart Bidding gerenciar os lances. Se você quer automatizar ajustes de bid, faça nas CAMPANHAS em Manual CPC ou Maximize Clicks — não nas de Target CPA/ROAS. Documentação oficial Microsoft Scripts API em learn.microsoft.com cobre as boas práticas.

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