AdWords
917 Usuários online agora
917 Usuários online agora
Otimização de ROI, CTR, índice de Qualidade, segmentação, página de destino.
Guie-me
star_border
Responder

Scripts do Google AdWords

Calouro ✭ ✭

Fala galera, blz?

Estou querendo entender um pouco mais sobre a utilização dos Scripts do Adwords...

Alguém aqui já utilizou o Script do Google Adwords para fazer alterações automatizadas? Ele funciona da mesma forma que as API's do google, mas de forma gratuita?

Abç!

Especialistas responderamverified_user

Soluções aceitas
Marcado como Melhor Resposta.
Solução
Aceita por Gravity (Principal Colaborador)
Setembro 2015

Oi Bronx, bom dia. Os escripts servem principalmente para...

[ Editado ]
Principal Colaborador

Oi Bronx, bom dia.

Os scripts servem principalmente para automatizar processos que antes tinham que ser feitos manualmente sendo muito mais simples que com o uso de uma API.

O uso das API é um processo mais complexo e lento, pois precisa que os utilizadores tenham bons conhecimentos em desenvolvimento e também necessita de autorização para funcionar.

Já o uso de scripts é simples e rápido. Terminou de configurar já pode colocar para funcionar.

É muito legal...rs.

--

Google+ | LinkedIn | Twitter


"O primeiro passo para aprender a pensar, curiosamente, é aprender a observar. Só que isso, infelizmente, ninguém ensina." (Stephen Kanitz)

Exibir solução no post original

Marcado como Melhor Resposta.
Solução
Aceita por JoseDantas (Principal Colaborador)
Setembro 2015

Eu também sou fã de scripts, eles tem suas limitações poi...

Principal Colaborador
Eu também sou fã de scripts, eles tem suas limitações pois é bem novo - por exemplo não trabalham com extensões de anúncios.

Mas é uma ferramenta muito poderosa e simples de usar - se você conhecer programação - pegue um dos vários exemplos que existem na própria ferramenta e comece a brincar.

Mas depende do que você for fazer, API é melhor - por exemplo se deseja integrar os dados com um banco de dados externos, ou trabalhar com várias contas ao mesmo tempo - você deve usar API.

___

"Você não precisa de uma empresa de 100 funcionários para desenvolver aquela ideia" ~Larry Page

Exibir solução no post original


Todas as respostas
Marcado como Melhor Resposta.
Solução
Aceita por Gravity (Principal Colaborador)
Setembro 2015

Oi Bronx, bom dia. Os escripts servem principalmente para...

[ Editado ]
Principal Colaborador

Oi Bronx, bom dia.

Os scripts servem principalmente para automatizar processos que antes tinham que ser feitos manualmente sendo muito mais simples que com o uso de uma API.

O uso das API é um processo mais complexo e lento, pois precisa que os utilizadores tenham bons conhecimentos em desenvolvimento e também necessita de autorização para funcionar.

Já o uso de scripts é simples e rápido. Terminou de configurar já pode colocar para funcionar.

É muito legal...rs.

--

Google+ | LinkedIn | Twitter


"O primeiro passo para aprender a pensar, curiosamente, é aprender a observar. Só que isso, infelizmente, ninguém ensina." (Stephen Kanitz)
Marcado como Melhor Resposta.
Solução
Aceita por JoseDantas (Principal Colaborador)
Setembro 2015

Eu também sou fã de scripts, eles tem suas limitações poi...

Principal Colaborador
Eu também sou fã de scripts, eles tem suas limitações pois é bem novo - por exemplo não trabalham com extensões de anúncios.

Mas é uma ferramenta muito poderosa e simples de usar - se você conhecer programação - pegue um dos vários exemplos que existem na própria ferramenta e comece a brincar.

Mas depende do que você for fazer, API é melhor - por exemplo se deseja integrar os dados com um banco de dados externos, ou trabalhar com várias contas ao mesmo tempo - você deve usar API.

___

"Você não precisa de uma empresa de 100 funcionários para desenvolver aquela ideia" ~Larry Page

Eu estava esperando o Érico comentar. Foi ele que me apre...

[ Editado ]
Principal Colaborador

Eu estava esperando o Érico comentar. Foi ele que me apresentou o mundo dos scripts. Show!

--

Google+ | LinkedIn | Twitter


"O primeiro passo para aprender a pensar, curiosamente, é aprender a observar. Só que isso, infelizmente, ninguém ensina." (Stephen Kanitz)

Bacana, obrigado pela explicação JoseDantas e Gravity!...

[ Editado ]
Calouro ✭ ✭

Bacana, obrigado pela explicação JoseDantas e Gravity!

 

Gravity,

Estou querendo usá-la inicialmente apenas para ativar e pausar Grupos de Anúncios, já que o fluxo de alterações nesse sentido é MUITO grande e acabo perdendo algumas conversões por conta disso. Nesse caso eu creio que tenha que integrar os dados com um banco de dados externo, deixa eu explicar melhor:

 

Alguns grupos de anúncio zeram o número de ofertas na página, ou seja, quando o usuário clicar no meu anúncio eu perco a conversão, pois nessa página não terá nenhum produto.

Nesse caso, o Script funcionará cada vez que minha página zerar o número de ofertas, ele automaticamente PAUSE esse grupo de anúncio. Sendo assim, com suas experiências nessa ferramenta, você sabe me dizer se é possível eu utilizar o Script dessa forma?

 

Obg

Sim, é possível.   Eu tenho um script que inclusive faz a...

Principal Colaborador

Bronx escreveu:

 

Alguns grupos de anúncio zeram o número de ofertas na página, ou seja, quando o usuário clicar no meu anúncio eu perco a conversão, pois nessa página não terá nenhum produto.

Nesse caso, o Script funcionará cada vez que minha página zerar o número de ofertas, ele automaticamente PAUSE esse grupo de anúncio. Sendo assim, com suas experiências nessa ferramenta, você sabe me dizer se é possível eu utilizar o Script dessa forma?

 

Obg


Sim, é possível.

 

Eu tenho um script que inclusive faz algo parecido... poderia passar ele para você tentar adaptar.

 

Eu tinha passado ele para o Dantas, que acho que até melhorou ele.

 

Vou dar uma limpada nele e posto ele aqui para você.

___

"Você não precisa de uma empresa de 100 funcionários para desenvolver aquela ideia" ~Larry Page

Bacana cara, se puder me passar ficaria muito agradecido!...

[ Editado ]
Calouro ✭ ✭

Gravity escreveu:

Bronx escreveu:

 

Alguns grupos de anúncio zeram o número de ofertas na página, ou seja, quando o usuário clicar no meu anúncio eu perco a conversão, pois nessa página não terá nenhum produto.

Nesse caso, o Script funcionará cada vez que minha página zerar o número de ofertas, ele automaticamente PAUSE esse grupo de anúncio. Sendo assim, com suas experiências nessa ferramenta, você sabe me dizer se é possível eu utilizar o Script dessa forma?

 

Obg


Sim, é possível.

 

Eu tenho um script que inclusive faz algo parecido... poderia passar ele para você tentar adaptar.

 

Eu tinha passado ele para o Dantas, que acho que até melhorou ele.

 

Vou dar uma limpada nele e posto ele aqui para você.


Bacana cara, se puder me passar ficaria muito agradecido! Eu passo ele pro pessoal TI e se houver necessidade eles editam alguma coisa.
Prefere que eu te passe meu email?

 

Abs.

[script] Pausar anúncios fora de estoque

[ Editado ]
Principal Colaborador

Script atualizado em 01/04/2016.

Com o update das URL ele não estava funcionando corretamente.

===========================

Oi Bronx, Segue o Script abaixo. Eu dei uma mexida bem pequena no original do Érico, mas para deixar mais genérico. Está funcionando bem legal. Qualquer coisa é só falar. Valeu!

// Campaign Name Wing Search
campaign_name = "Nome";

function main() {
Logger.log("Início...");

// adgroup limit
// adgroup_limit = 900;

_tag_ok = "sku-ok"; //1
_tag_non_stock = "sku-out"; //2
_tag_error = "sku-err"; //3
_tag_404 = "sku-404"; //4 

Logger.log("Puxando Grupos...");
var adGroupIterator = AdWordsApp.adGroups()
//.withCondition(campaign_name)
.withCondition("Name CONTAINS 'Termo contido no Grupo a ser perquisado'") 
.withCondition("KeywordMaxCpc > 0.02")
.orderBy("Cost DESC")
// .withLimit(adgroup_limit)
.forDateRange(" LAST_30_DAYS")
.get();

if (!adGroupIterator.hasNext()) {
Logger.log("No ad group found");
return;
} 
Logger.log("Verificando Grupos...");
while (adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();

state = check_landing(adGroup);

switch(state)
{

case 0: //_tag_non_stock

if (adGroup.isEnabled()){
adGroup.pause();
}

break; 

case 1: //_tag_ok
if (adGroup.isPaused()){
adGroup.enable();
}

break;

case 2: //_tag_error
if (adGroup.isEnabled()){
adGroup.pause();
}
adGroup.setKeywordMaxCpc(0.02);
break;

case 3: //_tag_404
adGroup.pause();
adGroup.setKeywordMaxCpc(0.02);
break; 
default:
//code to be executed if n is different from case 1 and 2
}

//adGroup.enable();
}
Logger.log("...Fim");
}

function check_landing(adGroup){

Logger.log("adgroup=[" + adGroup.getName() + "]");

//pega 1 anúncio qualquer do grupo 
var adIterator = AdWordsApp.ads() //(line 68)
.withCondition("AdGroupName = '" + adGroup.getName() + "'")
.withCondition("Status = ENABLED")
.get();

if (!adIterator.hasNext()){ 
return 2; //grupo sem nenhum anúncio.
}

var ad = adIterator.next(); 

var destinationUrl = ad.urls().getFinalUrl(); 
// Logger.log("Destination_Url=[" + destinationUrl + "]");

if (!destinationUrl){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");
Logger.log("Url Inválido");
return 0;
}


var options = {
// method: 'put',
// payload: payload
muteHttpExceptions: true
}

//vefifica se o url do anúncio possui o termo desejado.
var response = UrlFetchApp.fetch(destinationUrl, options); //Request failed for http://www.nomedosite.com.br<?> returned code 404. Server response: 

responseCode=response.getResponseCode();

if (responseCode == 404){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");
Logger.log("Url_code=[404]");
return 3;
} 

if (responseCode != 200){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");

Logger.log("Url_code=[" + responseCode + "]");
return 2;
}

content = response.getContentText();

//Logger.log(content);

var foradeestoque = content.indexOf("Texto contido na página quando o produto estiver fora de estoque");


//Logger.log("foradeestoque="+foradeestoque);

if (foradeestoque != -1){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");
Logger.log("Fora de estoque!"); 
// Logger.log("Em estoque!");
return 0;
}

return 1;

}

 

--

Google+ | LinkedIn | Twitter


"O primeiro passo para aprender a pensar, curiosamente, é aprender a observar. Só que isso, infelizmente, ninguém ensina." (Stephen Kanitz)

Muito obrigado, JoseDantas e Gravity pela ajuda. Abraço

Calouro ✭ ✭

JoseDantas escreveu:
Oi Bronx, Segue o Script abaixo. Eu dei uma mexida bem pequena no original do Érico, mas para deixar mais genérico. Está funcionando bem legal. Qualquer coisa é só falar. Valeu!
// Campaign Name Wing Search
campaign_name = "Nome";

function main() {
Logger.log("Início...");

// adgroup limit
// adgroup_limit = 900;

_tag_ok = "sku-ok"; //1
_tag_non_stock = "sku-out"; //2
_tag_error = "sku-err"; //3
_tag_404 = "sku-404"; //4 

Logger.log("Puxando Grupos...");
var adGroupIterator = AdWordsApp.adGroups()
//.withCondition(campaign_name)
.withCondition("Name CONTAINS 'Termo contido no Grupo a ser perquisado'") 
.withCondition("KeywordMaxCpc > 0.02")
.orderBy("Cost DESC")
// .withLimit(adgroup_limit)
.forDateRange(" LAST_30_DAYS")
.get();

if (!adGroupIterator.hasNext()) {
Logger.log("No ad group found");
return;
} 
Logger.log("Verificando Grupos...");
while (adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();

state = check_landing(adGroup);

switch(state)
{

case 0: //_tag_non_stock

if (adGroup.isEnabled()){
adGroup.pause();
}

break; 

case 1: //_tag_ok
if (adGroup.isPaused()){
adGroup.enable();
}

break;

case 2: //_tag_error
if (adGroup.isEnabled()){
adGroup.pause();
}
adGroup.setKeywordMaxCpc(0.02);
break;

case 3: //_tag_404
adGroup.pause();
adGroup.setKeywordMaxCpc(0.02);
break; 
default:
//code to be executed if n is different from case 1 and 2
}

//adGroup.enable();
}
Logger.log("...Fim");
}

function check_landing(adGroup){

Logger.log("adgroup=[" + adGroup.getName() + "]");

//pega 1 anúncio qualquer do grupo 
var adIterator = AdWordsApp.ads() //(line 68)
.withCondition("AdGroupName = '" + adGroup.getName() + "'")
.withCondition("Status = ENABLED")
.get();

if (!adIterator.hasNext()){ 
return 2; //grupo sem nenhum anúncio.
}

var ad = adIterator.next(); 

var destinationUrl = ad.getDestinationUrl(); 
// Logger.log("Destination_Url=[" + destinationUrl + "]");

if (!destinationUrl){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");
Logger.log("Url Inválido");
return 0;
}


var options = {
// method: 'put',
// payload: payload
muteHttpExceptions: true
}

//vefifica se o url do anúncio possui o termo desejado.
var response = UrlFetchApp.fetch(destinationUrl, options); //Request failed for http://www.nomedosite.com.br<?> returned code 404. Server response: 

responseCode=response.getResponseCode();

if (responseCode == 404){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");
Logger.log("Url_code=[404]");
return 3;
} 

if (responseCode != 200){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");

Logger.log("Url_code=[" + responseCode + "]");
return 2;
}

content = response.getContentText();

//Logger.log(content);

var foradeestoque = content.indexOf("Texto contido na página quando o produto estiver fora de estoque");


//Logger.log("foradeestoque="+foradeestoque);

if (foradeestoque != -1){
Logger.log("Verificando Grupo [" + adGroup.getName() + "]");
Logger.log("Destination_Url=[" + destinationUrl + "]");
Logger.log("Fora de estoque!"); 
// Logger.log("Em estoque!");
return 0;
}

return 1;

}

Muito obrigado, JoseDantas e Gravity pela ajuda.

Abraço

Importante: Não tenho como garantir que o script esteja s...

Principal Colaborador

Importante: Não tenho como garantir que o script esteja sem bugs, entenda que você é responsável por qualquer prejuízo que o uso do script pode proporcionar - não existem garantias.

 

Na época que fiz ele, não existiam Labels ainda via script - assim este é um ponto que podia ser melhorado nele.

 

Você deve estruturar a sua conta AdWords de forma que cada página de produto esteja com um grupo de anúncio diferente.. ele vai ler o grupo de anúncio, pegar um anúncio do grupo aleatoriamente e identificar a página de destino através da URl de destino do anúncio.

 

Em seguida ele vai ler a página de destino (Robot) e vai procurar a frase no código fonte, que identifique que o produto náo mais existe. se achar ele pausa o grupo todo.

 

Observe que existem alguns comentários dentro do próprio texto, no qual você deve adaptar para sua campanha:

 

Nome da campanha:

 

campaign_name = "Nome";

 

Nome dos grupos de anúncio dentro da campanha que ele vai pesquisar:

.withCondition("Name CONTAINS 'Termo contido no Grupo a ser perquisado'") 

 

Texto na página de destino que identifica quando o produto não está disponível e o grupo deve ser pausado

var foradeestoque = content.indexOf("Texto contido na página quando o produto estiver fora de estoque");

 

O que ele faz no grupo (além de pausar) se a página de destino não for encontrada

adGroup.setKeywordMaxCpc(0.02);

 

Você deve agendar o script para rodar de hora em hora, assim ele vai pausar todos os grupos que a página de destino possuem a palavra de fora de estoque e reativar os grupos que não a possuem novamente.

 

Qualquer dúvida avise.

 

___

"Você não precisa de uma empresa de 100 funcionários para desenvolver aquela ideia" ~Larry Page