When you manage multiple accounts, you do not always have time to check every day that all your campaigns are still active. Sometimes, for various reasons, campaigns may stop temporarily. To prevent this from happening after a few days, we have created a script that automatically alerts you. If a campaign has not generated any impressions the day before, you will receive an email at the email address you set.

Settings

In the config section of the script, you can adjust multiple values ​​as desired.

  • LOG: Change this to 'true' to see what exactly happened. Leave on 'false' when the script is really running, because that's faster.
  • EMAIL: Enter the e-mail address where you want to receive the notification. You can enter multiple email addresses by separating them with a comma.
  • EMAIL_INTRO: This is the message at the top of the email. This can be adjusted as desired.
  • EMAIL_SUBJECT: The subject of the email that will be send.
  • COMPARE_YESTERDAY: Set to true to only report on campaigns that did have impressions the day before.
  • ACCOUNT_LABEL: Use this to select specific accounts.

MCC level

The following script can be used at MCC level, so that you have an overview of campaigns that are silent in 1 email. In the accountSelector, I filter all accounts that are labeled 'Active' in your MCC. If you do not want this, you can delete line 30 from the script.

Scheduling: Run this script 1x per day, preferably at the end of the morning.

Script
// Copyright 2019. Increase BV. All Rights Reserved.
// Not to be used without permission of the creator or Increase B.V.
//
// Created By: Tibbe van Asten
// for Increase B.V.
// 
// Created: 23-08-2018
// Last update: 10-07-2019
//
// ABOUT THE SCRIPT
// With this script you keep track of impressions in campaigns.
// When a campaign didn't receive any impressions yesterday,
// the script will send an email.
//
////////////////////////////////////////////////////////////////////

var config = {
  
  LOG : true,
  
  EMAIL : "This email address is being protected from spambots. You need JavaScript enabled to view it.",
  EMAIL_INTRO : "The following campaigns have received no impressions today!<br />",
  EMAIL_SUBJECT : "WARNING: Campaigns without impressions",
  
  COMPARE_YESTERDAY : true,
  ACCOUNT_LABEL : "Active"
  
}

////////////////////////////////////////////////////////////////////

function main() {
  
  var emailContent = config.EMAIL_INTRO;
  
  var accountIterator = MccApp
  	.accounts()
  	.withCondition("LabelNames CONTAINS '" + config.ACCOUNT_LABEL + "'")
  	.get();
  
  while(accountIterator.hasNext()){
    var account = accountIterator.next();
    MccApp.select(account);

    var campaignIterator = AdsApp
    	.campaigns()
    	.withCondition("Status = ENABLED")
    	.withCondition("Impressions = 0")
    	.withCondition("CampaignExperimentType = BASE")
    	.withCondition("ServingStatus = SERVING")
    	.forDateRange("TODAY")
    	.get();
    
    	//Add accountname as heading in email
        if(campaignIterator.hasNext()){
          emailContent += "<br /><b>" + account.getName() + "</b><br />";
          
          if(config.LOG === true){
            Logger.log("Account: " + account.getName());
          }
        }
    
    while(campaignIterator.hasNext()){
      var campaign = campaignIterator.next(); 
      
      // Only add campaigns with > 0 impressions yesterday
      if(config.COMPARE_YESTERDAY === true){
        
        // Check for impressions yesterday
        if(campaign.getStatsFor("YESTERDAY").getImpressions() > 0){
          
          if(config.LOG === true){
            Logger.log("Campaign: " + campaign.getName());
          }
          
          emailContent += campaign.getName() + "<br />";
          
        }
        
      } // compare with yesterday
      else {
        
        if(config.LOG === true){
          Logger.log("Campaign: " + campaign.getName());
        }
      
        emailContent += campaign.getName() + "<br />";
        
      } 
      
    } // campaignIterator    
    
    var shoppingCampaignIterator = AdsApp
      .shoppingCampaigns()
      .withCondition("Status = ENABLED")
      .withCondition("Impressions = 0")
      .withCondition("CampaignExperimentType = BASE")
      .withCondition("ServingStatus = SERVING")
      .forDateRange("TODAY")
      .get();
    
    //Add accountname as heading in email
    if(shoppingCampaignIterator.hasNext() && !campaignIterator.hasNext()){
      emailContent += "<br /><b>" + account.getName() + "</b><br />";
      
      if(config.LOG === true){
        Logger.log("Account: " + account.getName());
      }
    }
    
    while(shoppingCampaignIterator.hasNext()){
      var campaign = shoppingCampaignIterator.next();      

      // Only add campaigns with > 0 impressions yesterday
      if(config.COMPARE_YESTERDAY === true){
        
        // Check for impressions yesterday
        if(campaign.getStatsFor("YESTERDAY").getImpressions() > 0){
          
          if(config.LOG === true){
            Logger.log("Campaign: " + campaign.getName());
          }
          
          emailContent += campaign.getName() + "<br />";
          
        }
        
      } // compare with yesterday
      else {
        
        if(config.LOG === true){
          Logger.log("Campaign: " + campaign.getName());
        }
      
        emailContent += campaign.getName() + "<br />";
        
      } 
      
    } // shoppingCampaignIterator    
    
    if(config.LOG === true){
      Logger.log("----");
    }
    
  } // accountIterator
  
  sendEmail(emailContent);
  Logger.log(emailContent);
  
} // function main

////////////////////////////////////////////////////////////////////

function sendEmail(emailContent) {
  
  MailApp.sendEmail({
    to: config.EMAIL,
    subject: config.EMAIL_SUBJECT,
    htmlBody: emailContent});
  
} // function sendEmail

Sharing knowledge

Adsscripts.com is all about sharing knowledge. In the current market, PPC specialists like to keep their knowledge and experience to themselves. We're convinced that sharing knowledge can ensure that everyone gets better at their work. We want to change this by sharing our knowledge about scripts with everyone.

Do you also want to contribute? We are open to new ideas and feedback on everything you find on Adsscripts.com.

Contact us

Nils Rooijmans
Google Ads Scripter
Water Cooler Topics
Nils Rooijmans, Google Ads Scripter
Bas Baudoin
Teamleader PPC
Happy Leads
Bas Baudoin, Teamleider SEA
Tibbe van Asten
PPC Specialist
Founder Adsscripts
Tibbe van Asten, Senior PPC Automation Specialist