Aqui está um script AdWords que lhe permite otimizar os lances a cada hora do dia

A+ A-
Capture2

Otimizar suas palavras-chave e grupos de anúncios licitações, a fim de maximizar o desempenho pode ser um assunto complicado. Configurar um agendamento para gerenciar seus lances é uma ótima maneira de se certificar de que você não está gastando muito na hora errada e, mais importante que o tráfego valioso está ficando com você nos momentos certos.

built-in ferramenta AdWords para modificar lances com base na hora do dia - a programação de anúncios - só permite até seis janelas de licitação por dia.

Para contas de grande escala que exigem uma abordagem mais granular, com lances que precisam ser trocadas a cada hora, as limitações acima só não vai fazer. Como um exemplo, as taxas de conversão para Domino variar dramaticamente durante diferentes intervalos de hora em hora em dias diferentes; a empresa não quer concorrer nos mesmos níveis às 7:00 pm, 9:00 e 23:00 às quartas-feiras e sábados.

Assim, os comerciantes matemáticas em Brainlabs (minha empresa) escreveu um roteiro AdWords - publicado na íntegra abaixo - que lhe dá o controle de seus lances para cada hora do dia. Se você nunca usou scripts, você pode ler nossa série recente sobre Scripts do Google AdWords ou apenas copiar e colar o código em sua conta para começar.

O script funciona alterando o modificador de lances da programação de anúncios, referindo-se a uma planilha gestão central. Seu primeiro trabalho será o de criar uma planilha correta. Copie e cole este cronograma anúncio genérico em um doc Google de sua preferência. Certifique-se de mudar o nome da folha para o nome da conta real a partir do qual será executado o script.

Em seguida, digite seus próprios valores modificador de lances na tabela. Entrando 100% vai deixar o lance como é, enquanto que 150% será um multiplicador de 1,5.

Faça uma nota do seu URL planilha, porque você vai precisar dele para a próxima seção.

O próximo passo é copiar e colar o script na parte inferior do artigo em sua conta. Existem algumas opções para definir. Ter um olhar para a parte inicial do script chamado Opções.

  • Defina a variável FirstRun a verdade; como é o primeiro script tempo está sendo executado, há um procedimento de inicialização.
  • Digite o URL para a folha do Google usada anteriormente para o spreadsheetUrl, substituindo o valor atualmente lá.
  • excludeCampaignNameContains irá excluir todas as campanhas que têm isso em seu nome. Deixe em branco para não excluir quaisquer campanhas.
  • includeCampaignNameContains só incluirá campanhas que têm isso em seu nome. Deixe em branco para incluir todas as campanhas.

Uma vez que as configurações opcionais foram inseridos, executar o script manualmente uma vez, em seguida, alterar a variável FirstRun como falsa.

Agora você está pronto para configurar uma programação para o script. Nós recomendamos que você executar o script de hora em hora. Se você não tiver certeza de que suas taxas de conversão são em momentos diferentes, nós estaremos seguindo-se com um outro artigo sobre como calcular os multiplicadores de licitação por hora.

Nota: Para todas as campanhas afetadas, este script irá apagar todas as programações de anúncios existentes.

 / **
*
* Programação de anúncios avançada
*
* Este script irá aplicar programações de anúncios e definir o modificador de lances para a programação
* Em cada hora de acordo com um calendário multiplicador numa folha Google.
*
* Versão: 1.0
* brainlabsdigital.com
*
** /

funcionar main () {

  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
  // Opções
  
  // Certifique-se de definir FirstRun para false depois de executar o script pela primeira vez
  var FirstRun = true;
  
  // A folha Google para usar
  // O valor padrão é a folha de exemplo com link no artigo
  var spreadsheetUrl = "https://docs.google.com/a/brainlabsdigital.com/spreadsheets/d/1JDGBPs2qyGdHd94BRZw9lE9JFtoTaB2AmlL7xcmLx2g/edit#gid=0";
  
  // Parâmetros opcionais para nomes de campanha de filtragem. 
  // Deixe em branco para usar filtros. A correspondência é caso insensível.
  var excludeCampaignNameContains = ""; // Seleciona que faz campanha para excluir. Deixe em branco para não excluir quaisquer campanhas.
  var includeCampaignNameContains = ""; // Seleciona que faz campanha para incluir. Deixe em branco para incluir todas as campanhas.
  
  // Quando você quer parar de correr a programação de anúncios para o bem, definir
  // a variável LASTRUN como true para remover todas as programações de anúncios.
  var LASTRUN = false;
  
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
  
  // Recuperando-se de dados de hora em hora
  var scheduleRange = "B2: H25";
  . Var ACCOUNTNAME = AdWordsApp.currentAccount () getNome ();
  var folha de cálculo = SpreadsheetApp.openByUrl (spreadsheetUrl);
  folha var = spreadsheet.getSheetByName (ACCOUNTNAME);
  var dados = sheet.getRange (scheduleRange) .getValues ​​();
  
  var timeZone = AdWordsApp.currentAccount () getTimeZone ().;
  var data = new Date ();
  var diaDaSemana = parselnt (Utilities.formatDate (data, timeZone, "uu")) - 1;
  var horas = parselnt (Utilities.formatDate (data, timeZone, "HH"));
  
  // oferta deste hora multiplicador.
  var thisHourMultiplier = dados [horas] [diaDaSemana];
  var lastHourCell = "I2";
  sheet.getRange (lastHourCell) .setValue (thisHourMultiplier);
  
  // Inicializar para uso posterior.
  var WEEKDAYS = [ "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado", "domingo"];
  var adScheduleCodes = [];
  
  // nome do manequim para excluir
  if (excludeCampaignNameContains === "") {
    excludeCampaignNameContains + = "# @%" + data + "~};";
  }
  
  var campaignIds = [];
  
  // Puxe uma lista de todos os IDs de campanha relevantes na conta.
  var campaignIterator = AdWordsApp.campaigns ()
  .withCondition ( 'Nome DOES_NOT_CONTAIN_IGNORE_CASE "' + excludeCampaignNameContains + '"')
  .withCondition ( 'Nome CONTAINS_IGNORE_CASE "' + includeCampaignNameContains + '"')
  .obter();
  enquanto (campaignIterator.hasNext ()) {
    var campanha = campaignIterator.next ();
    var campaignId = campaign.getId ();
    campaignIds.push (campaignId);
  }
  
  // Retorna se não existem campanhas.
  if (campaignIds.length === 0) {
    Logger.log ( "Não há campanhas correspondentes aos seus critérios.");
    Retorna;
  }
  
  // remove toda a programação de anúncios para a última corrida.
  if (LASTRUN) {
    RemoveAdSchedules (campaignIds);
    Retorna;
  }
  
  // remove toda a programação de anúncios existente e adicionar novos horários para a primeira corrida.
  if (FirstRun) {
    RemoveAdSchedules (campaignIds);
    AddAdSchedules (campaignIds, dias da semana);
	Logger.log ( "Defina a variável FirstRun para false");
  }
  
  // preencher a matriz adScheduleCodes com o ID programação de anúncios correspondente à matriz semana. 
  var campaignIterator = AdWordsApp.campaigns ()
  .withIds (campaignIds)
  .withLimit (1)
  .obter();
  enquanto (campaignIterator.hasNext ()) {
    var campanha = campaignIterator.next ();
    var adSchedules = campaign.targeting () adSchedules () get ()..;
	if (adSchedules.totalNumEntities () === 0) {
      Logger.log ( "Algumas campanhas não têm a programação de anúncios, volte a fazer a primeira corrida");
      Retorna;
    }
    enquanto (adSchedules.hasNext ()) {
      var AdSchedule = adSchedules.next ();
      var adScheduleDay = adSchedule.getDayOfWeek ();
      var adScheduleId = adSchedule.getId ();
      adScheduleCodes [weekDays.indexOf (adScheduleDay)] = adScheduleId;
    }
  }
  
  var adScheduleCode = adScheduleCodes [diaDaSemana];
  
  // Aplique o modificador de lances da programação de anúncios
  ModifyAdSchedule (campaignIds, adScheduleCode, thisHourMultiplier);
  
  // Definir programação de anúncios de ontem a um modificador de lances 0%
  se (=== hora 1) {
    var yesterdayIndex = diaDaSemana - 1;
    se (yesterdayIndex === -1) yesterdayIndex = 6;
    var yesterdayAdScheduleCode = adScheduleCodes [yesterdayIndex];
    ModifyAdSchedule (campaignIds, yesterdayAdScheduleCode, 1);
  }
  
}

/ **
 * Função para adicionar programações de anúncios para todas as campanhas na conta. A programação será 
 * Adicionado como um período de dia inteiro para cada dia especificado na matriz de parâmetro transmitido e irá
 * Ser adicionado com um modificador de lances de 0%.
 *
 * Dias @param array a matriz de dias em que para adicionar a programação de anúncios
 * Vazio @return
 * /
AddAdSchedules função (campaignIds, dias) {
  
  var campaignIterator = AdWordsApp.campaigns ()
  .withIds (campaignIds)
  .obter();
  enquanto (campaignIterator.hasNext ()) {
    var campanha = campaignIterator.next ();
    para (var i = 0; i <days.length; i ++) {
      campaign.addAdSchedule ({
        diaDaSemana: dia [i],
        startHour: 0,
        startMinute: 0,
        endHour: 24,
        endMinute: 0,
        bidModifier: 1
      });
    }
  }
}

/ **
 * Função de remover todas as programações de anúncios de todas as campanhas refernced na matriz passada.
 *
 * CampaignIds @param array matriz de IDs de campanha para remover a programação de anúncios de
 * Vazio @return
 * /
RemoveAdSchedules função (campaignIds) {
  
  var adScheduleIds = [];
  
  relatório var = AdWordsApp.report (
    'SELECT CampaignId, Id' + 
    'FROM CAMPAIGN_AD_SCHEDULE_TARGET_REPORT' +
    'ONDE EM CampaignId [ " "+ ''(+ campaignIds.join",') '"]' +
    'DURANTE ONTEM');
  
  var fileiras = report.rows ();
  enquanto (rows.hasNext ()) {
    var fileira = rows.next ();
    var adScheduleId = row [ 'id'];
    var campaignId = fileira [ 'CampaignId'];
    adScheduleIds.push ([campaignId, adScheduleId]);
  }
  
  var chunkedArray = [];
  var chunkSize = 50000;
  
  para (var i = 0; i <adScheduleIds.length; i + = chunkSize) {
    chunkedArray.push (adScheduleIds.slice (i, i + chunkSize));
  }
  
  para (var i = 0; i <chunkedArray.length; i ++) {
    
    var adScheduleArray = [];
    
    var adScheduleIterator = AdWordsApp.targeting ()
    .adSchedules ()
    .withIds (chunkedArray [i])
    .obter();
    enquanto (adScheduleIterator.hasNext ()) {
      var AdSchedule = adScheduleIterator.next ();
      adScheduleArray.push (AdSchedule);
    }
    
    para (var j = 0; j <adScheduleArray.length; j ++) {
      adScheduleArray [j] .remove ();
    }
  }
  
}

/ **
 * Função para definir o modificador de lances para um período de programação de anúncios específico para um conjunto de campanhas.
 *
 * @param array campaignIds a matriz de IDs de campanha para ter vários daqueles programações de anúncios modificado
 * AdScheduleCode @ param int o ID do AdSchedule a ser modificado
 * @param flutuador bidModifier o modificador de lances multiplicativo
 * Vazio @return
 * /
função ModifyAdSchedule (campaignIds, adScheduleCode, bidModifier) ​​{
  
  var adScheduleIds = [];
  
  para (var i = 0; i <campaignIds.length; i ++) {
    adScheduleIds.push ([campaignIds [i], adScheduleCode]);
  }
  
  var adScheduleIterator = AdWordsApp.targeting ()
  .adSchedules ()
  .withIds (adScheduleIds)
  .obter();
  enquanto (adScheduleIterator.hasNext ()) {
    var AdSchedule = adScheduleIterator.next ();
    adSchedule.setBidModifier (bidModifier);
  }
}


As opiniões expressas neste artigo são as do autor convidado e não necessariamente Search Engine Land. Autores pessoal aqui.


Ads

Compartilhar