Campaing level CPA alerts via emails

38 views
Skip to first unread message

Julius Bujanauskas

unread,
Apr 10, 2017, 2:44:55 AM4/10/17
to AdWords Scripts Forum
Hi,

I am lookin for a solution to get email alerts. Report has to include campaign name CPA and cost when last 7 days cpa hit target. On internet I have found script which I have modified a bit. there are two problems.

1. Results are not in a table.
2. I get each variable on a different email.

I guess that I have missed a step before email sending.




function main(){

//Define three variables: cpalimit, emailaddress, and timerange (choices are: TODAY,
//YESTERDAY, LAST_7_DAYS, THIS_WEEK_SUN_TODAY, LAST_WEEK, LAST_14_DAYS, LAST_30_DAYS,
//LAST_BUSINESS_WEEK, LAST_WEEK_SUN_SAT, THIS_MONTH, LAST_MONTH, ALL_TIME)
  var cpalimit = 60;
  var emailaddress = "julius.bu...@gmail.com"; 
  var timerange = "LAST_7_DAYS"

//Array definition and get data
  var numcampaigns=0;
  var campaignNames =[];
  var campaignCost =[];
  var campaignCpa =[];
  var campaignIterator = AdWordsApp.campaigns()
      .forDateRange("TODAY")
      .withCondition("Status = ACTIVE")
      .get();
  while (campaignIterator.hasNext()) {
    var campaign = campaignIterator.next();
    var name = campaign.getName();
    var stats = campaign.getStatsFor(timerange);
    var Conv = stats.getConversions();
    var Cost = stats.getCost();
    var cpa = (Cost /Conv);

    if(Conv>0){
      if(cpa>cpalimit){
        campaignNames.push(name);
      }
    }

    if(Conv==0){
      if(Cost>cpalimit){
        campaignNames.push(name);
      }
    }

    if(Conv>0){
      if(cpa>cpalimit){
        campaignCost.push(Cost);
      }
    }

    if(Conv==0){
      if(Cost>cpalimit){
        campaignCost.push(Cost);
      }
    }
    
    if(Conv>0){
      if(cpa>cpalimit){
        campaignCpa.push(cpa);
      }
    }

    if(Conv==0){
      if(Cost>cpalimit){
        campaignCpa.push(cpa);
      }
    }
  
 //from here I am not sure how to put results into table and send it via email.   
    
  var recipient = emailaddress;
  var subject = "Campaign Over CPA Limit";

  var htmlheader = "Campaigns over CPA Limit:";
  var html = [];
  for(var i=0; i<((campaignNames.length)+1); i++){
    html.push(
      "<html>",
      "<br>",
      "<br>",
      campaignNames[i],
      "</html>"
    );
  }

  var htmlCost = [];
  for(var a=0; a<((campaignCost.length)+1); a++){
    htmlCost.push(
      "<html>",
      "<br>",
      "<br>",
      campaignCost[a],
      "</html>"
    );
  }
  
   var htmlCpa = [];
  for(var b=0; b<((campaignCpa.length)+1); b++){
    htmlCpa.push(
      "<html>",
      "<br>",
      "<br>",
      campaignCpa[b],
      "</html>"
    );
  }   
    
    
  if(campaignNames.length>0){
    MailApp.sendEmail(recipient, subject, " ", {htmlBody: htmlheader+ html.join("")+ htmlCost.join("")+ htmlCpa.join("")  });
  }

  else{
    MailApp.sendEmail(recipient, "Campaigns are Below CPA Goal", "All active campaigns are below CPA goal.");   
  }
  }
}

Vincent Racaza (AdWords Scripts Team)

unread,
Apr 10, 2017, 3:48:20 AM4/10/17
to AdWords Scripts Forum
Hi Julius,

I edited your script so it will just send one email during the execution of the script. Also, I edited it so that the data will be in a table format. Below is the modified script:

function main(){
 
//Define three variables: cpalimit, emailaddress, and timerange (choices are: TODAY,
 
//YESTERDAY, LAST_7_DAYS, THIS_WEEK_SUN_TODAY, LAST_WEEK, LAST_14_DAYS, LAST_30_DAYS,
 
//LAST_BUSINESS_WEEK, LAST_WEEK_SUN_SAT, THIS_MONTH, LAST_MONTH, ALL_TIME)
 
var cpalimit = 60;

 
var emailaddress = "INSERT_EMAIL_ADDRESS_HERE";
 
var timerange = "LAST_7_DAYS"

       
   
var recipient = emailaddress;
   
var subject = "Campaigns Over CPA Limit";
   
   
var emailBody = '';
    emailBody
+= '<table border="1"><tr>';
    emailBody
+= '<th>Campaign Name</th>';
    emailBody
+= '<th>Campaign Cost</th>';
    emailBody
+= '<th>Campaign CPA</th></tr>';
   
   
for(i = 0; i < campaignNames.length; i++) {  
      emailBody
+= '<tr><td>' + campaignNames[i] + '</td>';
      emailBody
+= '<td>' + campaignCost[i] + '</td>';
      emailBody
+= '<td>' + campaignCpa[i] + '</td></tr>';
   
}
    emailBody
+= '</table>';
   
 
}
 
 
if(campaignNames.length>0){
   
MailApp.sendEmail({
      to
: recipient,
      subject
: subject,
      htmlBody
: emailBody
   
});
   
Logger.log("Sending successful!");

 
}
 
else{
   
MailApp.sendEmail(recipient, "Campaigns are Below CPA Goal", "All active campaigns are below CPA goal.");

   
Logger.log("Sending successful!");
 
}
}

Let me know if this helps.

Thanks,
Vincent Racaza
AdWords Scripts Team

Julius Bujanauskas

unread,
Apr 10, 2017, 1:03:25 PM4/10/17
to AdWords Scripts Forum
Vincent,

Thanks, works perfectly :)
Reply all
Reply to author
Forward
0 new messages