[Adwords] Script MCC : Suivi Budgétaire quotidien

Une des tâches quotidiennes (et assez répétitive) est de suivre les trends de dépenses et ajuster les budgets en conséquence.
Il est possible de faire ce suivi à l’aide d’un script Adwords au niveau MCC. Les dépenses sont affichées sur un fichier hébergé sur Google Drive, une ligne par compte.

Voici les données affichées : Les dépenses
– d’il y a 3 jours (J-3)
– d’il y a 2 jours (J-2)
– la veille
– cumul du mois (1er du mois en cours jusqu’à la veille). Si le script est lancé le premier du mois, le cumul du mois en cours est de 0€

Il m’a semblé indispensable d’afficher les dépenses des 3 derniers jours au lieu des dépenses de la veille uniquement.
Le budget mensuel ainsi que la date de fin doivent être renseignés manuellement sur le fichier.
Le script permettra de calculer le budget restant du mois, le trend idéal ainsi que les ajustements (si besoin) par rapport aux dépenses de la veille.

Pour cela, suivez les étapes suivantes :

1. Faites une copie de ce fichier sur votre Drive

2. ONGLET BUDGET : Entrez les noms des comptes, tels qu’ils sont écrits au sein du MCC.

3. ONGLET BUDGET : Renseignez les budgets mensuels pour chaque compte
budgetmensuel

4. Copiez/collez le script ci-dessous au niveau du MCC. Pensez à renseigner l’ID de votre fichier Drive dans le script à l’emplacement prévu : INSERT_YOUR_SPREADSHEET_ID

5. Lancez le script une première fois pour qu’il remplisse l’onglet SUIVI avec les noms des comptes
suivi

6. ONGLET SUIVI : Renseignez la date de fin pour chaque compte (par rapport au mois en cours. Par exemple, si on est en Novembre, le chiffre 30 indique que le budget renseigné est valable jusqu’au 30 Novembre)
suivi2

7. Lancez le script une deuxième fois

8. Enfin, programmez le script pour qu’il s’exécute tous les jours vers 7h

Admirez le résultat
suivi3

Voici le code :

function main() {
 
 
  //declare Spreadsheet variables
  var urlBulk = 'INSERT_YOUR_SPREADSHEET_ID'; //insert your ID here, for ex 1IHmWJdaXujbLpmBNOMBddus3vJmU-RaOQNMnqAQpz5s
  var spreadsheetBulk = getSpreadsheet(urlBulk);
  var sheet = spreadsheetBulk.getSheetByName('SUIVI');
  var row = 4;
 
  //current month
  var currentmonth = getcurrentmonth();
  sheet.getRange("B2").setValue(currentmonth);
 
 
  //columns names
  var columns = [
  "Compte", "J-3", "J-2", "Hier", "Cumul du mois en cours", "Budget", "Date de fin", "Budget restant", "Jours restants", "Trend journalier idéal", "Ajustement"
  ];
 
  for (var i = 1; i < 12; i++){
     sheet.getRange(3, i).setValue(columns[i-1]);
  }
 
  //Dates
 
var now = new Date(Utilities.formatDate(new Date(), "CET", 'MMM dd,yyyy HH:mm:ss'));
now.setHours(12);
var nowdate = now.getDate();
var yesterday = new Date(now.getTime() - 24 * 3600 * 1000);
yesterday.setHours(12);
var twodaysago = new Date(yesterday.getTime() - 24 * 3600 * 1000);
twodaysago.setHours(12);
var threedaysago = new Date(twodaysago.getTime() - 24 * 3600 * 1000); 
threedaysago.setHours(12);
var firstDay = new Date(yesterday.getFullYear(), yesterday.getMonth(), 1);
firstDay.setHours(12);
 
yesterday = Utilities.formatDate(yesterday, "CET", "yyyyMMdd");
twodaysago = Utilities.formatDate(twodaysago, "CET", "yyyyMMdd");  
threedaysago =   Utilities.formatDate(threedaysago, "CET", "yyyyMMdd"); 
firstDay = Utilities.formatDate(firstDay, "CET", "yyyyMMdd"); 
 
  // Get an account iterator. 
  var accountIterator = MccApp.accounts().get();
  while (accountIterator.hasNext()) {
 
   // Get the current account.
   var account = accountIterator.next();
 
   // Select the child account.
   MccApp.select(account);
 
   // Run reports against child account.
 
 
  //YESTERDAY report  
  var query = 'SELECT Cost from ACCOUNT_PERFORMANCE_REPORT during YESTERDAY';
  var report = AdWordsApp.report(query);
 
  // report
  var rowss = report.rows();
    while (rowss.hasNext()) {
    var rows = rowss.next();
    var accountName = account.getName();
    sheet.getRange("A" + row).setValue(accountName);
 
    //get costs  
    var cost = parseFloat(rows["Cost"].replace(",",""));
    sheet.getRange("D" + row).setValue(cost);
    var stats = account.getStatsFor(threedaysago, threedaysago);
    sheet.getRange("B" +row).setValue(stats.getCost());
    var stats = account.getStatsFor(twodaysago, twodaysago);
    sheet.getRange("C" +row).setValue(stats.getCost());
 
    //get current month's cost
    if (now == 1){
      sheet.getRange("E" +row).setValue(0);
    } else {
      var stats = account.getStatsFor(firstDay, twodaysago);
      sheet.getRange("E" +row).setValue(stats.getCost()+cost); 
    }  
 
    //get current month's budget  
    sheet.getRange("F" +row).setFormula("vlookup(A"+row+";BUDGET!$A:$M;match($B$2;BUDGET!$B$2:$M$2;0)+1;false)");   
 
 
    //leftover budget
    sheet.getRange("H" +row).setFormula("F"+row+"-E"+row);
 
    var datefin = sheet.getRange("G"+row).getValue();
    if (datefin > now){ 
      sheet.getRange("I" +row).setFormula("G"+row+"-"+now+"+1"); 
      //ideal trend
      sheet.getRange("J" +row).setFormula("H"+row+"/I"+row);
      //Ajustement
      sheet.getRange("K" +row).setFormula("J"+row+"-D"+row);
 
    } else { sheet.getRange("I" +row).setValue("Terminé");
      //ideal trend
      sheet.getRange("J" +row).setValue("Terminé");
      //ajustement
      sheet.getRange("K" +row).setValue("Terminé");     
 
 
           }
     row++;
  }
 }
}
 
 
function getSpreadsheet(spreadsheetUrl) {
  return SpreadsheetApp.openById(spreadsheetUrl);
}
 
 
// returns noon in the timezone of the account
function getYesterday() {
  var now = new Date(Utilities.formatDate(new Date(),
      AdWordsApp.currentAccount().getTimeZone(), 'MMM dd,yyyy HH:mm:ss'));
  var yesterday = new Date(now.getTime() - 24 * 3600 * 1000);
  yesterday.setHours(12);
  return yesterday;
}
 
function getToday() {
  var now = new Date(Utilities.formatDate(new Date(),
      AdWordsApp.currentAccount().getTimeZone(), 'MMM dd,yyyy HH:mm:ss'));
  return now;
}
 
function getcurrentmonth(){
  var mois = getToday();
  mois = mois.getMonth() + 1;
  var month = [
  "Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
  "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
  ];
  var mois = month[mois - 1];
  return mois;
}