Automação de Palavras-chave Negativas no Google Ads com IA

A FlowHunt automatiza a gestão de palavras-chave negativas no Google Ads com IA, ajudando empresas a reduzir custos, otimizar investimentos em anúncios e melhorar os resultados de campanhas sem esforço.

Automação de Palavras-chave Negativas no Google Ads com IA

Entendendo o Gasto com Palavras-chave Indesejadas

O gasto com palavras-chave indesejadas acontece quando seus anúncios aparecem em resultados de busca que não correspondem ao que você está vendendo. Isso pode rapidamente consumir seu orçamento, já que cada clique irrelevante custa dinheiro sem gerar uma venda. Por exemplo, se uma empresa que vende sapatos de couro de alto padrão segmenta palavras-chave amplas como “comprar sapatos”, pode atrair cliques de pessoas interessadas em tênis ou sandálias, que não são o seu público. Esse descompasso na segmentação de palavras-chave pode levar a desperdício no investimento em anúncios e a um ROI mais baixo. É fundamental que as empresas compreendam esse conceito para evitar perdas financeiras desnecessárias e focar o orçamento nas palavras-chave corretas.

O Papel das Palavras-chave Negativas

Palavras-chave negativas são uma ferramenta essencial em qualquer campanha do Google Ads. Elas permitem que os anunciantes excluam termos de busca específicos para que apenas pesquisas relevantes levem à exibição dos anúncios. Por exemplo, ao usar palavras-chave negativas como “barato” ou “desconto”, a empresa de sapatos de couro evita cliques de pessoas que não buscam produtos premium. Ao elaborar cuidadosamente uma lista de palavras-chave negativas, as empresas podem otimizar o investimento, reduzir cliques indesejados e aumentar a eficácia geral da campanha.

Usando IA para Gestão de Palavras-chave

A Inteligência Artificial (IA) está mudando a forma como os anunciantes gerenciam campanhas no Google Ads. Ferramentas de IA como a FlowHunt são feitas para agrupamento de palavras-chave, ajudando empresas a identificar e organizar palavras-chave relacionadas de forma mais eficiente. Essa automação simplifica o processo de encontrar tanto palavras-chave positivas quanto negativas, reduzindo o trabalho manual envolvido na gestão das campanhas. A gestão de palavras-chave com IA permite ajustes em tempo real com base nos dados de desempenho, garantindo que o investimento em anúncios esteja sempre otimizado para o melhor ROI.

Estratégias para Reduzir o Gasto com Palavras-chave Indesejadas

Para reduzir o gasto com palavras-chave indesejadas, as empresas devem adotar várias estratégias:

  • Atualize regularmente sua lista de palavras-chave para acompanhar tendências de mercado e interesses dos consumidores.
  • Implemente uma forte estratégia de palavras-chave negativas pesquisando e atualizando constantemente os termos que deseja excluir.
  • Monitore e ajuste as campanhas com base nos dados de desempenho.
  • Analise quais palavras-chave geram vendas e quais não para refinar a segmentação e maximizar o investimento em anúncios.

Estudo de Caso: Abordagem da PostAffiliatePro

A PostAffiliatePro enfrentava problemas com o gasto mensal em anúncios, tendo dificuldade em obter o ROI desejado de suas campanhas no Google Ads. Eles decidiram usar IA para resolver esse problema. Incorporando ferramentas baseadas em IA, automatizaram o processo de gestão de palavras-chave, identificando positivas e negativas com mais precisão. Essa mudança permitiu otimizar o investimento, reduzir custos significativamente e melhorar a eficiência das campanhas. A experiência destaca os benefícios de usar tecnologia de IA para gerenciar o gasto com palavras-chave de forma eficaz. As análises de cada nova palavra-chave são feitas em até uma hora após a primeira impressão da palavra. Essa velocidade ajuda a identificar palavras negativas antes mesmo que visitantes possam clicar no anúncio do Google.

improved conversion rate Taxa de conversão aprimorada (somente buscas relevantes geram mais vendas)

Recursos Adicionais

Para quem deseja aprender mais sobre gestão eficiente de palavras-chave e otimização com IA, considere explorar estes recursos:

Script Google Ads para Avaliar Cada Nova Palavra-chave

Aqui está nosso script, que executamos a cada hora para avaliar clusters de palavras-chave.

Esse script tem como objetivo automatizar várias tarefas relacionadas à gestão de campanhas do Google Ads. Ele interage com o Google Sheets para configuração e definições, e realiza operações nas contas Google Ads, como analisar termos de pesquisa, adicionar ou excluir palavras-chave e integrar com a API do FlowHunt para agrupamento avançado com IA.

Google Sheet to manage script settings Google Sheet para gerenciar as configurações do script

Negative keywords automatically applied to Ad groups Palavras-chave negativas aplicadas automaticamente aos grupos de anúncios

Função Principal

  • A lógica principal está na função main(). Ela abre o documento Google Sheets especificado por spreadsheetURL, recupera configurações como apiKey, country, language e outras.
  • Inicialmente, o sistema tenta adicionar palavras-chave positivas ao cluster do FlowHunt. Se for bem-sucedido, prossegue para analisar termos de pesquisa não atribuídos.

Análise de Palavras-chave

  • Analisando Palavras Não Atribuídas: A função percorre todos os grupos de anúncios da conta marcados com um rótulo específico. Recupera termos de pesquisa do Google Ads que não estão atualmente segmentados e tiveram pelo menos uma impressão.
  • O sistema utiliza a API do FlowHunt para encontrar palavras semelhantes à que está sendo analisada, filtrando-as por um critério de minimumMatch especificado.
  • Termos de pesquisa que atendem aos critérios são adicionados como palavras-chave positivas ou marcados como negativas se não atenderem ao mínimo, atualizando a Google Sheet relevante e também suas campanhas no Google Ads.

Integração com FlowHunt

  • Interação com a API: O script usa a função callFlowHuntApi() para interagir com a API do FlowHunt em diversas tarefas, como recuperar IDs de workspace e agrupar palavras-chave.
  • Adicionar Palavras ao Cluster: Essa função envia palavras-chave positivas de volta ao FlowHunt para agrupamento, garantindo que sejam informadas por dados de busca em tempo real do Google Ads.
  • Palavras-chave adicionadas e negativas são registradas em sheets separadas para acompanhamento e revisão contínua.

Uso

Para implantar esse script, os usuários precisam:

  • Informar a URL válida do Google Sheets e garantir que as sheets necessárias (“Settings”, “AddedKW”, “NegativeKW”) estejam presentes.
  • Configurar o Google Sheets com a chave API do FlowHunt, códigos de país e outras definições operacionais.
  • Garantir que o script seja executado em ambiente de Script do Google Ads com o acesso API habilitado.

Add script to your Google Ads in menu Tools -> Bulk Actions -> Scripts Adicione o script ao seu Google Ads no menu Ferramentas -> Ações em Massa -> Scripts.

Não esqueça de definir o link real para seu documento Google Sheet. O resto é nossa mágica. Identificamos palavras-chave que pertencem à campanha e automatizamos o gerenciamento (tanto negativas quanto positivas).

Script Google Ads para Gerenciar Palavras-chave Negativas Automaticamente

//Global variables
var spreadsheetURL;
var spreadsheet;
var sheetSettings; 
var sheetAddedKW;
var sheetNegativeKW;
var apiKey;
var labelName;
var country;
var language;
var location;
var urlsCount;
var minimumMatch;
var workspaceId;

function main() {
    // Provide the Google Sheets URL here
  spreadsheetURL = "https://docs.google.com/spreadsheets/d/....... FULL URL TO GOOGLE SHEET";
  spreadsheet = SpreadsheetApp.openByUrl(spreadsheetURL);
  sheetSettings = spreadsheet.getSheetByName("Settings"); 
  sheetAddedKW = spreadsheet.getSheetByName("AddedKW");
  sheetNegativeKW = spreadsheet.getSheetByName("NegativeKW");
  apiKey = getSettingValue("FlowHuntAPIkey")
  labelName = getSettingValue("LabelName")
  country = getSettingValue("CountryCode")
  language = getSettingValue("LanguageCode")
  location = getSettingValue("Location")

  urlsCount = getSettingValue("TopUrlsCount")
  minimumMatch = getSettingValue("MinimumMatch")
  workspaceId = getWorkspaceId()
  
  if (workspaceId.length < 10) {
    Logger.log("Failed to load workspace id from FlowHunt, check API key");
    return;
  }
  
  Logger.log("FlowHunt WorkspaceId: " + workspaceId);
  
  if (addPositiveKWsToCluster() == 0) {
    // Analyze new keywords just if all positive keywords added already
    analyzeNotAssignedWords();
  }
}

function analyzeNotAssignedWords() {
  Logger.log("*** START Checking not assigned keywords");
  
  // Iterate through all ad groups in the account
  var adGroupsIterator = AdsApp.adGroups().get();
  
  while (adGroupsIterator.hasNext()) {
    var adGroup = adGroupsIterator.next();
    var groupName = adGroup.getId() + " - " + adGroup.getName();
    if (hasLabel(adGroup, labelName)) {
      // Get the search terms for the current ad group ordered by clicks in the last X days
      var searchTermsQuery = "SELECT Query FROM SEARCH_QUERY_PERFORMANCE_REPORT " +
        "WHERE AdGroupId = " + adGroup.getId() +
        " AND QueryTargetingStatus = \"NONE\" " +
        "DURING TODAY";

      var searchTermsIterator = AdsApp.report(searchTermsQuery).rows();
      var adGroupKeywords = [];
      while (searchTermsIterator.hasNext()) {
        var searchTerm = searchTermsIterator.next();
        var searchTermText = searchTerm["Query"].trim();
        var similarQueries = getSimilarQueries(groupName, searchTermText)
        var filteredSimilarQueries = getFilteredSimilarQueries(similarQueries);
        if (filteredSimilarQueries.length > 0) {
          var keywordOperation = adGroup.newKeywordBuilder().withText("[" + searchTermText + "]").build();
          if (keywordOperation.isSuccessful()) {
            adGroupKeywords.push(searchTermText);
            var rowData = [groupName, searchTermText, new Date(), "ADDING AS POSITIVE, REVIEW!", JSON.stringify(filteredSimilarQueries)];
            sheetAddedKW.appendRow(rowData);
          } else {
            Logger.log("Failed to add keyword as positive:" + searchTermText)
          }
        } else {
          // add to negative
           adGroup.createNegativeKeyword("[" + searchTermText + "]");
          Logger.log("Excluded search term in ad group '" + groupName + "': " + searchTermText);
          var rowData = [groupName, "[" + searchTermText + "]", new Date(), JSON.stringify(similarQueries)];
          sheetNegativeKW.appendRow(rowData);
        }
      }
      if (adGroupKeywords.length > 0) {
        //Add all keywords in the list to FlowHunt Cluster
        addKeywordsToFlowHunt(groupName, adGroupKeywords);
      }
    }
  }
  Logger.log("*** FINISHED Checking not assigned keywords");
}

function getSimilarQueries(groupName, query) {
  result = callFlowHuntApi("/serp/serp/cluster/query_intersections?workspace_id="+workspaceId, "POST", {
    "query": query,
    "country": country,
    "language": language,
    "location": location,
    "group_name": groupName,
    "live_mode": true,
    "max_position": urlsCount
  });
  Logger.log(result)
  if (result.status=="SUCCESS") {
    return JSON.parse(result.result);
  }
  return []
}

function getFilteredSimilarQueries(similarQueries) {
  filtered = [];
  for (var i=1; i<similarQueries.length; i++){
    if (similarQueries[i].count>=minimumMatch) {
      filtered.push(similarQueries[i]);
    }
  }
  return filtered;
}

function addPositiveKWsToCluster() {
  Logger.log("*** START Checking new campaign keywords");
  // Iterate through all ad groups in the account
  var adGroupsIterator = AdsApp.adGroups().get();
  var processedKWs = sheetAddedKW.getDataRange().getValues();
  var processedKWsMap = {};
  var rowsAdded = 0;
  
  for (var i = 1; i < processedKWs.length; i++) { // Start at 1 to skip header row if exists
    var groupName = processedKWs[i][0];
    var keyword = processedKWs[i][1];
    processedKWsMap[groupName + '|' + keyword] = true;
  }
  
  while (adGroupsIterator.hasNext()) {
    var adGroup = adGroupsIterator.next();
    var groupName = adGroup.getId() + " - " + adGroup.getName();
    if (hasLabel(adGroup, labelName)) {
      var keywordsIterator = adGroup.keywords().get();
      var adGroupKeywords = [];
      while (keywordsIterator.hasNext()) {
        var keyword = keywordsIterator.next();
        if (keyword.isEnabled()) {
          var key = groupName + '|' + keyword.getText();
          if (!processedKWsMap[key]) {
            adGroupKeywords.push(keyword.getText());
            var rowData = [groupName, keyword.getText(), new Date(), "Already present in campaign"];
            sheetAddedKW.appendRow(rowData);
            processedKWsMap[key] = true; 
          }
        }
      }
      if (adGroupKeywords.length > 0) {
        //Add all keywords in the list to FlowHunt Cluster
        addKeywordsToFlowHunt(groupName, adGroupKeywords);
      } else {
        Logger.log("No new keywords in Group: " + groupName);
      }
      rowsAdded = rowsAdded + adGroupKeywords.length
    }
  }
  Logger.log("*** FINISHED Checking new campaign keywords");
  return rowsAdded;
}

function addKeywordsToFlowHunt(GroupName, adGroupKeywords) {
  requests = []
  adGroupKeywords.forEach(function(keyword) {
    requests.push(
        {
          "query": keyword,
          "country": country,
          "language": language,
          "location": location,
          "group_name": GroupName,
          "count_urls": 30
        }
      );
    });
  callFlowHuntApi("/serp/serp/cluster/add_queries?workspace_id="+workspaceId, "POST", {"requests":requests});
}

function getSettingValue(settingName) {
    var data = sheetSettings.getDataRange().getValues();
    for (var i = 0; i < data.length; i++) {
        if (data[i][0] === settingName) {
            return data[i][1];
        }
    }
    return null;
}
  
function getWorkspaceId() {
  result = callFlowHuntApi("/auth/me", "GET")
  if (result !== null) {
    return result.api_key_workspace_id;
  }
}

function callFlowHuntApi(endpoint, method, requestBody) {
    var url = "https://api.flowhunt.io/v2" + endpoint;
    var headers = {
        "Api-Key": apiKey,
        "Content-Type": "application/json"
    };
    var options = {
        "method" : method,  // or "post", "put", etc.
        "headers" : headers,
        "payload": JSON.stringify(requestBody)
    };
    
    try {
        var response = UrlFetchApp.fetch(url, options);
        var responseData = JSON.parse(response.getContentText());
        Logger.log(responseData);
        return responseData;
    } catch (e) {
        Logger.log("An error occurred: " + e.message);
    }
    return null;
}

function hasLabel(adGroup, labelName) {
  var labels = adGroup.labels().get();
  while (labels.hasNext()) {
    var label = labels.next();
    if (label.getName() === labelName) {
      Logger.log("Processing Adgroup " + adGroup.getName());
      return true;
    }
  }
  return false;
}

Perguntas frequentes

Por que palavras-chave negativas são importantes no Google Ads?

Palavras-chave negativas impedem que seus anúncios apareçam em buscas irrelevantes, reduzindo gastos desnecessários e melhorando o ROI da campanha ao focar apenas nas consultas mais relevantes.

Como a IA automatiza o gerenciamento de palavras-chave negativas?

Ferramentas de IA como o FlowHunt analisam dados de busca em tempo real, identificam palavras-chave irrelevantes e atualizam automaticamente suas campanhas com palavras-chave negativas, economizando tempo e aumentando a eficiência.

Quais resultados posso esperar ao automatizar palavras-chave negativas com IA?

Espere taxas de conversão mais altas, redução de gastos com cliques irrelevantes e campanhas mais eficientes, já que a IA otimiza continuamente suas listas e segmentação de palavras-chave.

Como configuro a automação do FlowHunt para meu Google Ads?

Você precisará conectar sua conta do Google Ads, configurar definições em uma Google Sheet e implementar o script fornecido para habilitar a gestão automatizada de palavras-chave alimentada pela IA do FlowHunt.

Viktor Zeman é co-proprietário da QualityUnit. Mesmo após 20 anos liderando a empresa, ele continua sendo principalmente um engenheiro de software, especializado em IA, SEO programático e desenvolvimento backend. Ele contribuiu para inúmeros projetos, incluindo LiveAgent, PostAffiliatePro, FlowHunt, UrlsLab e muitos outros.

Viktor Zeman
Viktor Zeman
CEO, Engenheiro de IA

Automatize seu Google Ads com IA

Pronto para maximizar o ROI do seu Google Ads? Descubra como a automação com IA gerencia suas palavras-chave negativas e otimiza o investimento em anúncios.

Saiba mais