Rapporteer campaign zonder vertoningen

Wil je zeker weten dat al je campagnes nog actief zijn? Met dit script ontvang je automatisch een mailtje op het moment dat een campagne de dag ervoor geen vertoningen heeft gegenereerd.

Start nu!
Rapporteer campaign zonder vertoningen
Rapporteer Get started!

Wanneer je meerdere accounts beheert, heb je niet altijd tijd om elke dag te controleren of al je campagnes nog actief staan. Het kan soms, om verschillende redenen, gebeuren dat campagnes tijdelijk stil vallen. Om te voorkomen dat dit pas na enkele dagen opvalt, hebben we een script gemaakt die je automatisch waarschuwt. Wanneer een campagne de dag ervoor geen vertoningen heeft gegenereerd, krijg je een mailtje op het door jou ingestelde emailadres.

Instellingen

In het config-gedeelte van het script, kan je meerdere waarden aanpassen naar wens.

  • LOG: Geef aan of het script de tussenstappen moet rapporteren, door de waarde aan te passen naar 'true'.
  • EMAIL: Vul hier het emailadres in waar je de melding op wilt ontvangen. Je kan meerdere emailadressen invullen, door ze te scheidden met een komma.
  • EMAIL_INTRO: Dit is de boodschap die bovenaan de email staat. Deze kan je aanpassen naar wens.
  • EMAIL_SUBJECT: Het onderwerp van de email.
  • DATE_RANGE: Geef aan over welke periode je wilt controleren of de campagnes vertoningen hebben ontvangen.
  • COMPARE: Zet op 'true' wanneer je wilt controleren of de campagnes in een periode daarvoor wel vertoningen hebben gehad.
  • COMPARE_DATERANGE: Wanneer COMPARE op true staat, bepaal je hier de periode waarover je wilt vergelijken.
  • ACCOUNT_LABEL: Label de accounts waar dit script doorheen moet lopen.

MCC niveau

Onderstaand script kan gebruikt worden op MCC-niveau, zodat je in 1 email een overzicht hebt van campagnes dit stil liggen. Bij de accountSelector filter ik alle accounts die het label 'Active' krijgen in je MCC. Als je dit niet wilt, kan je regel 30 verwijderen uit het script. 

Frequentie: Draai dit script 1x per dag, bij voorkeur aan het einde van de ochtend.

The script
// Copyright 2024 
// Free to use or alter for everyone. A mention would be nice ;-)
//
// Created By: Tibbe van Asten
// for Adsscripts.com
// 
// Created: 23-08-2018
// Last update: 02-01-2024 Fixed error, email only send when necessary
//
// 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 : "your@emailaddress",
    EMAIL_INTRO : "The following campaigns have no impressions today!<br />",
    EMAIL_SUBJECT : "WARNING: Campaigns without impressions",
    
    DATE_RANGE : "TODAY",
    COMPARE : true,
    COMPARE_DATERANGE : "LAST_7_DAYS",
    ACCOUNT_LABEL : "Active",
    
    // Change this to true if you always want an email, 
    // even if there are no campaigns without impressions.
    SEND_MAIL : true
  }
  
////////////////////////////////////////////////////////////////////
  
  function main() {
    
    var emailContent = config.EMAIL_INTRO;
        
    var accountIterator = AdsManagerApp
        .accounts()
        .withCondition("LabelNames CONTAINS '"+config.ACCOUNT_LABEL+"'")
        .get();
    
    while(accountIterator.hasNext()){
      var account = accountIterator.next();
      AdsManagerApp.select(account);
      var emailContentTemp = '';
      var accountHeading = false;
  
      var campaignIterator = AdsApp
          .campaigns()
          .withCondition("campaign.status = ENABLED")
          .withCondition("metrics.impressions = 0")
          .withCondition("campaign.experiment_type = BASE")
          .forDateRange("TODAY")
          .get();
      
      while(campaignIterator.hasNext()){
        var campaign = campaignIterator.next(); 
        
        // Only add campaigns with > 0 impressions previous period
        if(config.COMPARE === true){
          
          // Check for impressions previous period
          if(campaign.getStatsFor(config.COMPARE_DATERANGE).getImpressions() > 0){
  
            if(config.LOG === true){
              Logger.log("Campaign: " + campaign.getName());
            }
            config.SEND_MAIL = true;
            accountHeading = true;
            emailContentTemp += campaign.getName() + "<br />";
            
          }
          
        } // compare with previous period
        else {
          
          if(config.LOG === true){
            Logger.log("Campaign: " + campaign.getName());
          }
        
          accountHeading = true;
          emailContentTemp += campaign.getName() + "<br />";
          
        } 
        
      } // campaignIterator
      
      var shoppingCampaignIterator = AdsApp
        .shoppingCampaigns()
        .withCondition("campaign.status = ENABLED")
        .withCondition("metrics.impressions = 0")
        .withCondition("campaign.experiment_type = BASE")
        .forDateRange("TODAY")
        .get();
      
      while(shoppingCampaignIterator.hasNext()){
        var campaign = shoppingCampaignIterator.next();
        accountHeading = true;
  
        // Only add campaigns with > 0 impressions previous period
        if(config.COMPARE === true){
          
          // Check for impressions previous period
          if(campaign.getStatsFor(config.COMPARE_DATERANGE).getImpressions() > 0){
  
            if(config.LOG === true){
              Logger.log("Campaign: " + campaign.getName());
            }
            config.SEND_MAIL = true;
            accountHeading = true;
            emailContentTemp += campaign.getName() + "<br />";
            
          }
          
        } // compare with previous period
        else {
          
          if(config.LOG === true){
            Logger.log("Campaign: " + campaign.getName());
          }
        
          accountHeading = true;
          emailContentTemp += campaign.getName() + "<br />";
          
        } 
        
      } // shoppingCampaignIterator
      
      var pmaxCampaignIterator = AdsApp
        .performanceMaxCampaigns()
        .withCondition("campaign.status = ENABLED")
        .withCondition("metrics.impressions = 0")
        .withCondition("campaign.experiment_type = BASE")
        .forDateRange("TODAY")
        .get();
      
      while(pmaxCampaignIterator.hasNext()){
        var campaign = pmaxCampaignIterator.next();      
  
        // Only add campaigns with > 0 impressions previous period
        if(config.COMPARE === true){
          
          // Check for impressions previous period
          if(campaign.getStatsFor(config.COMPARE_DATERANGE).getImpressions() > 0){
  
            if(config.LOG === true){
              Logger.log("Campaign: " + campaign.getName());
            }
            config.SEND_MAIL = true;
            accountHeading = true;
            emailContentTemp += campaign.getName() + "<br />";
            
          }
          
        } // compare with previous period
        else {
          
          if(config.LOG === true){
            Logger.log("Campaign: " + campaign.getName());
          }
        
          accountHeading = true;
          emailContentTemp += campaign.getName() + "<br />";
          
        } 
        
      } // pmaxCampaignIterator
      
      var videoCampaignIterator = AdsApp
        .videoCampaigns()
        .withCondition("campaign.status = ENABLED")
        .withCondition("metrics.impressions = 0")
        .withCondition("campaign.experiment_type = BASE")
        .forDateRange("TODAY")
        .get();

      while(videoCampaignIterator.hasNext()){
        var campaign = videoCampaignIterator.next();

        // Only add campaigns with > 0 impressions previous period
        if(config.COMPARE === true){

          // Check for impressions previous period
          if(campaign.getStatsFor(config.COMPARE_DATERANGE).getImpressions() > 0){

            if(config.LOG === true){
              Logger.log("Campaign: " + campaign.getName());
            }
            
            config.SEND_MAIL = true;
            accountHeading = true;
            emailContentTemp += campaign.getName() + "<br />";

          }

        } // compare with previous period
        else {

          if(config.LOG === true){
            Logger.log("Campaign: " + campaign.getName());
          }

          accountHeading = true;
          emailContentTemp += campaign.getName() + "<br />";

        }

      } // videoCampaignIterator
            
      //Add accountname as heading in email
      if(accountHeading === true){
        emailContent += "<br /><b>" + account.getName() + "</b><br />" + emailContentTemp;
        
        if(config.LOG === true){
          Logger.log("Account: " + account.getName());
        }
      }    
      
      if(config.LOG === true){
        Logger.log("----");
      }
      
    } // accountIterator
    
    if(config.SEND_MAIL === true && emailContent != config.EMAIL_INTRO){
        sendEmail(emailContent);
        Logger.log(emailContent);
    }
    
  } // function main
  
////////////////////////////////////////////////////////////////////
  
  function sendEmail(emailContent) {
      MailApp.sendEmail({
        to: config.EMAIL,
        subject: config.EMAIL_SUBJECT,
        htmlBody: emailContent
      });
  } // function sendEmail
Show whole script!
Loading Comments
The Experts
Tibbe van Asten Team Lead Performance Marketing
Nils Rooijmans Water Cooler Topics
Martijn Kraan Freelance PPC Specialist
Bas Baudoin Teamlead SEA @ Happy Leads
Jermaya Leijen Digital Marketing Strategist
Krzysztof Bycina PPC Specialist from Poland
How about you? JOIN US!
Sharing Knowledge
Caring

Adsscripts.com staat voor het delen van kennis. In de huidige markt houden SEA-specialisten de kennis en ervaring graag voor zich. Wij zijn er van overtuigd dat het delen van kennis ervoor kan zorgen dat iedereen beter wordt in haar of zijn werk. Daarom lopen wij hier graag in voorop, door onze kennis over scripts te delen met iedereen.

Wil jij ook graag een bijdrage leveren? Wij staan open voor nieuwe ideeën en feedback op alles wat je op Adsscripts.com vindt.

Neem contact op

Training &
Workshop
Neem contact op!
Adsscripts Training & Workshop