AdWords
Сейчас в сети: 266
Сейчас в сети: 266
Советы и вопросы по использованию скриптов AdWords
Подсказки
star_border
Ответить

Скрипт корректировщик ставок в КМС

Восходящие звезды

Всем доброго времени суток!

 

Сейчас работаю над созданием скрипта, который автоматизировал бы работу с КМС по ставкам. Для максимизации эффективности работы РК. Особенно если нужно максимизировать количество кликов при заданном бюджете на РК в мес.
Уже написал "Демо" версию скрипта и сейчас активно ее тестирую.

 

Пожалуйста прокомментируйте данный скрипт.

  • Есть ли в таком скрипте смысл, на ваш взгляд?
  • Какие критерии Вы бы еще учли при корректировке ставок через скрипт?
  • Как бы вы автоматизировали работу со ставками в КМС?
  • Если кто-то видел где-то аналог, или скрипт который полностью решает задачу описанную выше, дайте пожалуйста ссылку.

 

Логика скрипта такая:
При необходимости увеличить количество кликов, или конверсий при неизменном бюджете, скрипт будет менять ставки на уровне групп объявлений (группы должны быть размечены ярлыками).

 

Скрипт сравнивает показатели кликов за прошлые два равных периода и если кликов в текущем периоде больше чем в прошлом, то он снижает ставку на заданный %, если же количество кликов уменьшилось, то повышает на тот же процент.

 

Можно использовать сравнение по таким периодам:  
TODAY = YESTERDAY
LAST_7_DAYS = LAST_14_DAYS

 

С небольшой модификацией клики можно заменить на показы, клики с конверсией.

 

Ниже приведен пример скрипта созданного по этой схеме, нацеленного на максимизацию количества показов. Он выполняется в 23:00 и сравнивает показатели сегодня со вчерашним днем.

 

Версия скрипта при обновлении каждый день:

function main() {
  //Группы объявлений нужно разметить ярлыками. Если ярлыков несколько, то указывать ["ярлик1","ярлик2",...,"ярликN"]
  var LabelNames = ["price"];
  //Настройка максимальной цены за клик
  var maxPrice = 10;
  // % на сколько нужно снижать цену
  var stepPercent = 5;
  // За какой периуд брать статистику прошлого перуда
  var LastPeriod =  "YESTERDAY";
  // За какой периуд брать статистику текущего перуда
  var ThisPeriod = "TODAY";
  
  
  var labelName = "";
  if(LabelNames.constructor === Array){
    labelName = "LabelNames CONTAINS_ANY ['" + LabelNames.join("','") + "']";
  }else{
    labelName = "LabelNames = '" + LabelNames + "'";
  }

  
var adGroupIterator = AdWordsApp.adGroups()
    .withCondition(labelName)
    .withCondition("Impressions > 0")
    .forDateRange("LAST_7_DAYS")
    .get();

while (adGroupIterator.hasNext()) {
   var adGroup = adGroupIterator.next();
   var lastPeriod =  adGroup.getStatsFor(LastPeriod).getImpressions();
   var thisPeriod = adGroup.getStatsFor(ThisPeriod).getImpressions();

  var adGroupOldBid = adGroup.bidding().getCpc();
   
 
  if (thisPeriod >= lastPeriod) {
      var adGroupNewBid = (adGroupOldBid * ((100 - stepPercent) / 100)).toFixed(2);
      adGroup.bidding().setCpc(adGroupNewBid);
    } 
    else {
         var adGroupNewBid = (adGroupOldBid * ((100 + stepPercent) / 100)).toFixed(2);
         if (adGroupNewBid <= maxPrice){
            adGroup.bidding().setCpc(adGroupNewBid);  
         }
         else {
              adGroup.bidding().setCpc(maxPrice);
         }
    }
   Logger.log("   ---------------");
   Logger.log("Кампания '" + adGroup.getCampaign().getName() + "' Группа '" + adGroup.getName() + "'");
   Logger.log("Показы за Сегодня = " + thisPeriod);
   Logger.log("Показы за Вчера = " + lastPeriod);
   Logger.log("Старая ставка = " + adGroupOldBid);
   Logger.log("Новая ставка = " + adGroupNewBid);  
  }
 
}

Версия скрипта при обновлении раз в неделю:

function main() {
  //Группы объявлений нужно разметить ярлыками. Если ярлыков несколько, то указывать ["ярлик1","ярлик2",...,"ярликN"]
  var LabelNames = ["price"];
  //Настройка максимальной цены за клик
  var maxPrice = 10;
  // % на сколько нужно снижать цену
  var stepPercent = 5;
  // За какой периуд брать статистику прошлого перуда
  var LastPeriod =  "LAST_14_DAYS";
  // За какой периуд брать статистику текущего перуда
  var ThisPeriod = "LAST_7_DAYS";
  
  
  var labelName = "";
  if(LabelNames.constructor === Array){
    labelName = "LabelNames CONTAINS_ANY ['" + LabelNames.join("','") + "']";
  }else{
    labelName = "LabelNames = '" + LabelNames + "'";
  }

  
var adGroupIterator = AdWordsApp.adGroups()
    .withCondition(labelName)
    .withCondition("Impressions > 0")
    .forDateRange("LAST_14_DAYS")
    .get();

while (adGroupIterator.hasNext()) {
   var adGroup = adGroupIterator.next();
   var last2Weeks =  adGroup.getStatsFor(LastPeriod).getImpressions();
   var thisWeek =  adGroup.getStatsFor(ThisPeriod).getImpressions();
   var lastWeek = last2Weeks - thisWeek;

  var adGroupOldBid = adGroup.bidding().getCpc();
   
 
  if (thisWeek >= lastWeek) {
      var adGroupNewBid = (adGroupOldBid * ((100 - stepPercent) / 100)).toFixed(2);
      adGroup.bidding().setCpc(adGroupNewBid);
    } 
    else {
         var adGroupNewBid = (adGroupOldBid * ((100 + stepPercent) / 100)).toFixed(2);
         if (adGroupNewBid <= maxPrice){
            adGroup.bidding().setCpc(adGroupNewBid);  
         }
         else {
              adGroup.bidding().setCpc(maxPrice);
         }
    }
   Logger.log("   ---------------");
   Logger.log("Кампания '" + adGroup.getCampaign().getName() + "' Группа '" + adGroup.getName() + "'");
   Logger.log("Показы за эту неделю = " + thisWeek);
   Logger.log("Показы за прошлую неделю = " + lastWeek);
   Logger.log("Старая ставка = " + adGroupOldBid);
   Logger.log("Новая ставка = " + adGroupNewBid);  
  }
 
}

За все ответы, отзывы и вопросы буду очень благодарен!

---------
С уважением Олег Поддубный
2 Ответ экспертаverified_user

Re: Скрипт корректировщик ставок в КМС

Восходящие звезды

Забрал, буду пробовать.

Из критериев, которые учел бы - % полученных показов в КМС, если это возможно.