Google Ads Scripts · Diagnóstico
Script para encontrar campanhas com gasto e zero conversões no Google Ads
Uma fila automática de revisão para encontrar onde existe gasto registrado sem conversão, sem transformar o alerta em pausa cega.
“Gastou e não converteu” parece um diagnóstico pronto, mas não é. A coluna de conversões pode estar atrasada, a ação primária pode estar errada, uma importação offline pode ainda não ter chegado ou a venda pode acontecer depois de vários dias. O papel do script é priorizar onde olhar primeiro.
Critério do alerta
Você define um período e um gasto mínimo. O script lista apenas campanhas ativas que atingiram esse investimento e continuam com zero conversões registradas.
Script completo
/**
* CAMPANHAS COM GASTO E ZERO CONVERSÕES
* Somente leitura: gera uma lista para revisão humana.
*/
const CONFIG = {
EMAIL: 'seu-email@empresa.com.br',
LOOKBACK_DAYS: 7,
MIN_COST: 200,
MAX_ROWS: 50
};
function main() {
const account = AdsApp.currentAccount();
const timezone = account.getTimeZone();
const end = new Date();
const start = new Date(end.getTime());
start.setDate(start.getDate() - (CONFIG.LOOKBACK_DAYS - 1));
const minCostMicros = Math.round(CONFIG.MIN_COST * 1e6);
const query = `
SELECT
campaign.id,
campaign.name,
metrics.cost_micros,
metrics.clicks,
metrics.conversions
FROM campaign
WHERE segments.date BETWEEN '${formatDate(start, timezone)}'
AND '${formatDate(end, timezone)}'
AND campaign.status = 'ENABLED'
AND metrics.cost_micros >= ${minCostMicros}
AND metrics.conversions = 0
ORDER BY metrics.cost_micros DESC
LIMIT ${CONFIG.MAX_ROWS}
`;
const rows = AdsApp.search(query);
const problems = [];
while (rows.hasNext()) {
const row = rows.next();
problems.push({
id: row.campaign.id,
name: row.campaign.name,
cost: Number(row.metrics.costMicros || 0) / 1e6,
clicks: Number(row.metrics.clicks || 0)
});
}
if (!problems.length) {
Logger.log('Nenhuma campanha atingiu o limite com zero conversões.');
return;
}
const body = problems.map((item, i) =>
`${i + 1}. ${item.name} [${item.id}] - ${money(item.cost)} - ${item.clicks} cliques`
).join('\n');
Logger.log(body);
if (!AdsApp.getExecutionInfo().isPreview()) {
MailApp.sendEmail(
CONFIG.EMAIL,
`[Google Ads] Gasto sem conversão - ${account.getName()}`,
body + '\n\nAntes de pausar, valide tracking, atraso de conversão, CRM e objetivo primário.'
);
}
}
function formatDate(date, timezone) {
return Utilities.formatDate(date, timezone, 'yyyy-MM-dd');
}
function money(value) {
return Number(value || 0).toLocaleString('pt-BR', {
style: 'currency',
currency: AdsApp.currentAccount().getCurrencyCode()
});
}Antes de pausar uma campanha
- confirme se a ação em “Conversões” é realmente a conversão primária;
- avalie atraso entre clique, lead e venda;
- confira importações offline e integrações com CRM;
- compare termos, páginas e qualidade da demanda;
- verifique se o período tem volume estatístico suficiente.
Quando o alerta é mais útil?
Em contas com muitas campanhas, o script reduz a dependência de uma revisão manual completa todo dia. Ele cria uma fila objetiva: quais campanhas merecem investigação agora.
Quando ajustar o gasto mínimo
O valor depende do ticket, CPC, taxa de conversão e volume. Um limite de R$ 200 pode ser irrelevante em uma conta e agressivo demais em outra. Comece com um valor que represente um volume minimamente analisável para sua operação.