Snippets

Frederick Vallaeys Check If Account Is Offline

Updated by Frederick Vallaeys

File Check If Account Is Offline Modified

  • Ignore whitespace
  • Hide word diff
 /* 
    OPTMYZR.COM - PPC AUTOMATION AND TOOLS
    ---------------------------------------
-   Script by Optmyzr Inc. 2016
+   Script by Optmyzr Inc. 2016-2017
    
    This script checks whether an AdWords account has gone offline, possibly due to a declined credit card.
    It does this by checking if a selected metric (like impressions) has accrued some value over a chosen
    3. update the value for METRIC_TO_CHECK (normally you'd use 'Impressions' but you can also use 'Cost' or 'Conversions' if you prefer to be notofied when these metrics accrue no activity)
    
    This script does NOT make changes to your account. It only emails when an account appears to have become inactive.
+   
+   Last Updated May 9, 2017
 */ 
 
 var EMAIL_ADDRESS_TO_NOTIFY = "example@example.com";
     var dayFactor = daysMapping[currentRow["DayOfWeek"]];
     var hourFactor = parseFloat(currentRow["HourOfDay"]);
     var actualHour = dayFactor * 24 + hourFactor;
-    // Logger.log(dayFactor +","+ hourFactor + " => " + currentRow["Impressions"]);
+    if(DEBUG) Logger.log(dayFactor +","+ hourFactor + " => " + currentRow["Impressions"]);
     impressionsByHour[actualHour] = currentRow["Impressions"];                            
   }
    
     var tempDate = new Date(currentDate.getTime());
     tempDate.setHours(tempDate.getHours() - i);
     var hourIndexToCheck = tempDate.getDay() * 24 + tempDate.getHours();
-    if(impressionsByHour[hourIndexToCheck] != undefined){
+    if(impressionsByHour[hourIndexToCheck] != undefined && impressionsByHour[hourIndexToCheck] != 0){
       foundEntry = true;
       break;      
     }
Updated by Frederick Vallaeys

File Check If Account Is Offline Modified

  • Ignore whitespace
  • Hide word diff
    This script does NOT make changes to your account. It only emails when an account appears to have become inactive.
 */ 
 
-var EMAIL_ADDRESS_TO_NOTIFY = "frederick@optmyzr.com";
-var NUM_HOURS_TO_CHECK = 1;
+var EMAIL_ADDRESS_TO_NOTIFY = "example@example.com";
+var NUM_HOURS_TO_CHECK = 6;
 var METRIC_TO_CHECK = "Impressions";
 
 var DEBUG = 0;
   }
   else {
     var subject = "AdWords Account getting no impressions"; 
-    var body = "AdWords Account " + AdWordsApp.currentAccount().getName() + " ("  + AdWordsApp.currentAccount().getCustomerId() + ")  seems to be getting no impressions in the last 6 hours. You may want to check this out.";
+    var body = "AdWords Account " + AdWordsApp.currentAccount().getName() + " ("  + AdWordsApp.currentAccount().getCustomerId() + ")  seems to be getting no impressions in the last 6 hours. You may want to check this out. This email was generated by an AdWords Script from Optmyzr.com.";
     sendEmailNotifications(EMAIL_ADDRESS_TO_NOTIFY, subject, body, "warning");
     Logger.log("WARNING: The Account seems to be inactive in the last " + NUM_HOURS_TO_CHECK + " hours.");
   }
Updated by Frederick Vallaeys

File Check If Account Is Offline Modified

  • Ignore whitespace
  • Hide word diff
 var NUM_HOURS_TO_CHECK = 1;
 var METRIC_TO_CHECK = "Impressions";
 
-var DEBUG = 1;
+var DEBUG = 0;
 
 Date.prototype.yyyymmdd = function() {
     var yyyy = this.getFullYear().toString();
Created by Frederick Vallaeys

File Check If Account Is Offline Added

  • Ignore whitespace
  • Hide word diff
+/* 
+   OPTMYZR.COM - PPC AUTOMATION AND TOOLS
+   ---------------------------------------
+   Script by Optmyzr Inc. 2016
+   
+   This script checks whether an AdWords account has gone offline, possibly due to a declined credit card.
+   It does this by checking if a selected metric (like impressions) has accrued some value over a chosen
+   number of hours. The user can choose the number of hours to look back so that they can account for
+   expected periods of non-activity (e.g. due to dayparting)
+   
+   How To Use:
+   1. update the value for EMAIL_ADDRESS_TO_NOTIFY (use comma separated email addresses if you want to send a notification to several email addresses)
+   2. update the value for NUM_HOURS_TO_CHECK (set this at least as long as the duration of expected hours of inactivity. E.g. if your ads are offline for 8 hours due to dayparting, set a value of at least 9 here)
+   3. update the value for METRIC_TO_CHECK (normally you'd use 'Impressions' but you can also use 'Cost' or 'Conversions' if you prefer to be notofied when these metrics accrue no activity)
+   
+   This script does NOT make changes to your account. It only emails when an account appears to have become inactive.
+*/ 
+
+var EMAIL_ADDRESS_TO_NOTIFY = "frederick@optmyzr.com";
+var NUM_HOURS_TO_CHECK = 1;
+var METRIC_TO_CHECK = "Impressions";
+
+var DEBUG = 1;
+
+Date.prototype.yyyymmdd = function() {
+    var yyyy = this.getFullYear().toString();
+    var mm = (this.getMonth()+1).toString(); 
+    var dd  = this.getDate().toString();
+    return yyyy + (mm[1]?mm:"0"+mm[0]) + (dd[1]?dd:"0"+dd[0]); 
+  };
+  
+function getDateRangeYesterdayToToday() {
+  var currentDate = new Date();
+  
+  var tempDate = new Date(); 
+  tempDate.setDate(tempDate.getDate()-1);
+  
+  var yesterdayDate = tempDate;
+  
+  return yesterdayDate.yyyymmdd() + "," + currentDate.yyyymmdd();
+}
+
+ function sendEmailNotifications(emailAddresses, subject, body, emailType ) {
+	
+    if(emailType.toLowerCase().indexOf("warning") != -1) {
+      var finalSubject = "[Warning] " + subject + " - " + AdWordsApp.currentAccount().getName() + " (" + AdWordsApp.currentAccount().getCustomerId() + ")"
+    } else if(emailType.toLowerCase().indexOf("notification") != -1) {
+      var finalSubject = "[Notification] " + subject + " - " + AdWordsApp.currentAccount().getName() + " (" + AdWordsApp.currentAccount().getCustomerId() + ")"
+    }
+    
+   var finalBody = body;
+    
+	MailApp.sendEmail({
+        to:emailAddresses, 
+        subject:  finalSubject,
+        htmlBody: finalBody
+      });
+    
+    if(DEBUG == 1) Logger.log("email sent to " + emailAddresses + ": " + finalSubject);
+
+  }
+
+function main() {
+  
+  var dateRange =  getDateRangeYesterdayToToday();
+  var currentDate = new Date();
+  
+  var queryText = "SELECT " + METRIC_TO_CHECK + ", DayOfWeek, HourOfDay FROM ACCOUNT_PERFORMANCE_REPORT DURING " + dateRange;
+  var result = AdWordsApp.report(queryText);
+  var rows = result.rows();
+  
+  var daysMapping = [];
+  daysMapping["Sunday"] = 0;
+  daysMapping["Monday"] = 1;
+  daysMapping["Tuesday"] = 2;
+  daysMapping["Wednesday"] = 3;
+  daysMapping["Thursday"] = 4;
+  daysMapping["Friday"] = 5;
+  daysMapping["Saturday"] = 6;
+
+  var impressionsByHour = {};
+  
+  while(rows.hasNext()) {
+    var currentRow = rows.next();
+    var dayFactor = daysMapping[currentRow["DayOfWeek"]];
+    var hourFactor = parseFloat(currentRow["HourOfDay"]);
+    var actualHour = dayFactor * 24 + hourFactor;
+    // Logger.log(dayFactor +","+ hourFactor + " => " + currentRow["Impressions"]);
+    impressionsByHour[actualHour] = currentRow["Impressions"];                            
+  }
+   
+  // check if an entry exists for any of the last 6 hours
+  var foundEntry = false;
+  var numHoursToCheck = NUM_HOURS_TO_CHECK + 1;
+  for(var i=1;i<numHoursToCheck;i++){
+    var tempDate = new Date(currentDate.getTime());
+    tempDate.setHours(tempDate.getHours() - i);
+    var hourIndexToCheck = tempDate.getDay() * 24 + tempDate.getHours();
+    if(impressionsByHour[hourIndexToCheck] != undefined){
+      foundEntry = true;
+      break;      
+    }
+  }
+  
+  if(foundEntry){
+    Logger.log("ALL OK! The Account seems to be active in the last " + NUM_HOURS_TO_CHECK + " hours."); 
+  }
+  else {
+    var subject = "AdWords Account getting no impressions"; 
+    var body = "AdWords Account " + AdWordsApp.currentAccount().getName() + " ("  + AdWordsApp.currentAccount().getCustomerId() + ")  seems to be getting no impressions in the last 6 hours. You may want to check this out.";
+    sendEmailNotifications(EMAIL_ADDRESS_TO_NOTIFY, subject, body, "warning");
+    Logger.log("WARNING: The Account seems to be inactive in the last " + NUM_HOURS_TO_CHECK + " hours.");
+  }
+    
+}