// Cantidad mínima de clicks para considerar estadísticamente probado un término de búsqueda
var CLICKS_MINIMOS =100;
// Costo por conversión máximo que toleramos de un término de búsqueda (en moneda local de la cuenta)
var COSTO_POR_CONVERSION_MAXIMO = 50;
// Cantidad minima de conversiones para agregar como palabra clave.
var CONVERSIONES = 2;
function main(){
var report = AdWordsApp.report(
"SELECT Query,Clicks,Cost,CostPerConversion,Conversions,CampaignId,AdGroupId "+
"FROM SEARCH_QUERY_PERFORMANCE_REPORT "+
"WHERE "+
"Clicks >"+ CLICKS_MINIMOS +
"AND CostPerConversion < "+ COSTO_POR_CONVERSION_MAXIMO +
"AND Conversions >" + CONVERSIONES +
" DURING LAST_MONTH"); // podemos poner el período que queramos
var rows = report.rows();
// creamos las variables para las palabras negativas y positivas
var PalabrasNegativas ={};
var PalabrasPositivas ={};
var allAdGroupIds ={}
// Evaluamos cada uno de los términos de búsqueda para decidir
// cuáles ignorar o agregar a nuestras listas.
while(rows.hasNext()){
var row = rows.next();
// comenzamos evaluando si una palabra se agrega como negativa.
if(parseFloat(row['Conversions'])= 0){
addToMultiMap(negativeKeywords, row['AdGroupId'], row['Query']);
allAdGroupIds[row['AdGroupId']]=true;
// ahora, evaluamos si una palabra se agrega como positiva.
}else if(parseFloat(row['CostPerConversion'])< COSTO_POR_CONVERSION_MAXIMO){
addToMultiMap(positiveKeywords, row['AdGroupId'], row['Query']);
allAdGroupIds[row['AdGroupId']]=true;
}
}
// Toma los nombres de los grupos de anuncios de nuestra campaña y los convierte en un "array", es decir, en una lista ordenada de valores (para ir agregando palabras clave a cada uno)
var adGroupIdList = [];
for (var adGroupId in allAdGroupIds) {
adGroupIdList.push(adGroupId);
}
// ¡Lo que todos estábamos esperando! Copiar a los grupos todas las palabras claves positivas y negativas:
var adGroups = AdWordsApp.adGroups().withIds(adGroupIdList).get();
while (adGroups.hasNext()) {
var adGroup = adGroups.next();
if (negativeKeywords[adGroup.getId()]) {
for (var i = 0; i < negativeKeywords[adGroup.getId()].length; i++) {
// ¡Atención con la línea que viene! Agrega la palabra negativa con concordancia exacta. Más abajo, explicaremos cómo modificar esto. adGroup.createNegativeKeyword('[' + negativeKeywords[adGroup.getId()][i] + ']');
}
}
if (positiveKeywords[adGroup.getId()]) {
for (var i = 0; i < positiveKeywords[adGroup.getId()].length; i++) {
// Aquí se agregan las palabras positivas. En este ejemplo, la palabra clave se agrega con concordancia exacta. Sin embargo, podemos no solamente agregar la palabra con otro tipo de concordancia (reemplazando los corchetes por comillas para concordancia de frase o borrándolos para tener concordancia amplia) sino que también podemos copiar esta línea y pegarla abajo modificada para agregar la misma palabra clave con varias concordancias distintas.
adGroup.createKeyword('[' + positiveKeywords[adGroup.getId()][i] + ']');
}
}
}
}
function addToMultiMap(map, key, value) {
if (!map[key]) {
map[key] = [];
}
map[key].push(value);
}