Skrypty Google AdsTips&TricksŚledzenie obcych zmian na koncie Google Ads za pomocą skryptu

1 maja 20242

Jeśli prowadzisz kampanie dla różnych klientów zapewne nie jest Ci obca sytuacja, że na koncie zostały wprowadzone zmiany, o których nikt Cię nie poinformował. W praktyce może to prowadzić do sytuacji, że 2 osoby zmieniają tą samą kampanie i finalnie jej efekty się pogarszają. Niestety Google domyślnie nie przesyła komunikatu o takiej akcji, więc ciężko jest to regularnie śledzić. Z pomocą przychodzi skrypt Google Ads przygotowany przez Nilsa Rooijmansa. Szczegóły poniżej.

Śledzenie obcych zmian na koncie Google Ads za pomocą skryptu

Poniżej znajdziesz skrypt, którego autorem jest Nils Rooijmans.

Na początek przejdź na drive.google.com i utwórz nowy Arkusz Google:

Śledzenie zmian na koncie Google Ads za pomocą skryptu

Następnie określ nazwę Arkusza i kliknij UDOSTĘPNIJ:

Śledzenie zmian na koncie Google Ads za pomocą skryptu

Wybierz opcję KAŻDA OSOBA MAJĄCA LINK i EDYTUJĄCY:

Śledzenie zmian na koncie Google Ads za pomocą skryptu

Na końcu skopiuj link – będzie potrzebny w jednym z dalszych kroków.

Zaloguj się na swoje konto Google Ads i przejdź do zakładki SKRYPTY (NARZĘDZIA – DZIAŁANIA ZBIORCZE) i kliknij niebieską ikonkę z plusem wybierając + NOWY SKRYPT:

Śledzenie zmian na koncie Google Ads za pomocą skryptu

W oknie do wpisania kodu znajdziesz fragment:

function main() {

}

Skasuj go i wklej poniższy kod:

/**
*
* Change History Alerts - stripped down version
*
* The script checks all the entries in the Google Ads change history of your account, 
* and if there is a change by a user outside of your list of 'recognized' users, you will get an alert via email.
* The alert mail conatins the number of changes as well as a link to the Google Sheet that lists all changes by unrecognized users.
*
* Version 1.0
*
* @author: Nils Rooijmans
*
* For the more advanced version that runs on both single and manager MCC accounts and allows for Bulk upload and API changes exlusions contact nils@nilsrooijmans.com 
*/
  
// CHANGE SETTINGS HERE
 
var SPREADSHEET_URL = ""; //insert a new blank spreadsheet url between the double quotes 
var EMAIL_ADDRESSES = ""; //alert email adresses, insert your email adresses between the double quotes. You can add multiple email addresses between the double quotes, just separate them via a comma, ie: "john@doe.com, jane@doe.com"
 
var IGNORE_USERS = [
      'INSERT FIRST EMAIL HERE BETWEEN THE SINGLE QUOTES, MAKE SURE TO HAVE THE ADDRESS SURROUNDED BY QUOTES'
    ];
// NOTE: if you want to add multiple users, add them between the square brackets, one per line, with a comma seperating the lines. Ie:     
//var IGNORE_USERS = [
//      'john@doe.com',
//      'jane@doe.com',
//      'jill@johns.com'
//    ];
 
var SEND_EMAIL = true;
var EMAIL_SUBJECT = "[GAds Script] - WARNING - Change by person outside of organisation";
var EMAIL_BODY = 
    "\n"+
    "***\n"+
    "\n"+
    "This script checks changes in the 'Change history' :\n"+
    "\n"+
    "For all changes during "+PERIOD+" \n"+
    "   check if there is a change being made by users other than "+IGNORE_USERS+" \n"+
    "   if so, alerts are logged in Google Sheet: "+SPREADSHEET_URL+" \n"+
    "\n"+
    "If there is an alert an email is sent to:\n"+ EMAIL_ADDRESSES +"\n";
 
var PERIOD = "YESTERDAY";
 
 
function main() { 
 
  Logger.log("Processing account: "+AdsApp.currentAccount().getName());
   
  var changeAlerts = getChangeAlerts();
 
  if (changeAlerts.length > 0 ) {
    reportResults(changeAlerts);
    sendEmail(changeAlerts.length);
  } else {
  Logger.log("Could not find any changes in change history that were made by users other than "+IGNORE_USERS+" \n");
  }
}
 
 
// look into change history and return changes to add to alert report
function getChangeAlerts() {
   
  var accountName = AdsApp.currentAccount().getName();
   
  var changes = [];
     
  var query = "SELECT " + 
              "campaign.name, " +
              "ad_group.name, " +
              "change_event.change_date_time, " +
              "change_event.change_resource_type, " +
              "change_event.changed_fields, " +
              "change_event.client_type, " +
              "change_event.feed, " +
              "change_event.feed_item, " +
              "change_event.new_resource, " +
              "change_event.old_resource, " +
              "change_event.resource_change_operation, " +
              "change_event.resource_name, " +
              "change_event.user_email " +
              "FROM change_event " +
              "WHERE change_event.change_date_time DURING "+PERIOD+" " + 
              "AND change_event.user_email NOT IN ('"+IGNORE_USERS.join("', '")+"') "+
              "ORDER BY change_event.change_date_time DESC "+ 
              "LIMIT 9999 "; // max of 10k changes reported per request
               
  Logger.log("query: " + query);
   
  try {
    var result = AdsApp.search(query);
  } catch (e) {
    alert("Issue retrieving results from search API: "+e);
  } 
   
  while (result.hasNext()) {
    var row = result.next();
  
    var campaignName = "";
    var adGroupName = "";
     
    // hack to prevent undefined variable from stopping script execution
    try {
      campaignName = row.campaign.name;
      adGroupName = row.adGroup.name;
    } catch(e) {
    }
     
    try {    
      var change = [
        row.changeEvent.changeDateTime,
        accountName,
        row.changeEvent.userEmail,
        row.changeEvent.clientType,
        campaignName,
        adGroupName,
        row.changeEvent.changeResourceType,
        row.changeEvent.changedFields,
        row.changeEvent.feed,
        row.changeEvent.feedItem,
        row.changeEvent.newResource,
        row.changeEvent.oldResource,
        row.changeEvent.resourceChangeOperation
      ];
       
      changes.push(change);
       
    } catch(e) {
      Logger.log("Issue with parsing results from search API: "+e);
    }
 
  }
  
  return changes;
}
 
 
function addHeaderToOutputSheet(sheet) {
   
  var header = [
    "date",
    "account", 
    "user",
    "clientType", 
    "campaignName",
    "adGroupName",
    "changeResourceType",
    "changedFields",
    "feed",
    "feedItem",
    "newResource",
    "oldResource",
    "resourceChangeOperation"
    ];
   
  sheet.appendRow(header);
}
 
 
function reportResults(changes) {
   
  var sheet = prepareOutputSheet();
   
  addOutputToSheet(changes, sheet);  
}
 
 
function prepareOutputSheet() {
   
  var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  if (!spreadsheet) {
    alert("Cannot open new reporting spreadsheet") ;
    return ;
  }
 
  var sheet = spreadsheet.getActiveSheet();
  if (!sheet) {
    alert("Cannot open new reporting sheet") ;
    return ;
  }  
   
  var numberOfRows=sheet.getLastRow() ;
   
  if (numberOfRows == 0) { // the sheet has no header
    addHeaderToOutputSheet(sheet);
  }
   
  return sheet;
}
 
 
function addOutputToSheet(output, sheet) {
 
  var numberOfRows=sheet.getLastRow() ;
   
  sheet.insertRowsBefore(2, output.length); // add empty rows below header row
 
  var startRow = 2;
   
  var range=sheet.getRange(startRow, 1, output.length, output[0].length) ;
  range.setValues(output) ; 
 
  Logger.log("\nNumber of rows added to output sheet: "+output.length+"\n\n");
   
}
 
 
 
function sendEmail(numberOfalerts) {
 
  var accountName = AdsApp.currentAccount().getName();
   
  if (SEND_EMAIL) {
    // send the email
    var emailBody = 
        "Number of changes: " + numberOfalerts + "\n" + 
        "See details: "+ SPREADSHEET_URL+ "\n" + EMAIL_BODY;
 
    MailApp.sendEmail(EMAIL_ADDRESSES, EMAIL_SUBJECT+" | "+accountName, emailBody);
    Logger.log("Sending alert mail");
  }  
}
 
function alert(string) {
  Logger.log("### "+string);
}

W wierszu 18 między cudzysłowami dodaj adres Arkusza Google (skopiowany we wcześniejszym kroku).

W wierszu 19 między cudzysłowami dodaj swój adres mailowy, na który będą przychodzić powiadomienia mailowe.

W wierszu 21 wpisz adres lub adresy mailowe, które mają być ignorowane w raportowaniu historii zmian, a więc będzie to Twój mail, z którego zarządzasz kontem Google Ads. Fragment skryptu powinien mieć następującą formę:

var IGNORE_USERS = [
'adresmailowy@gmail.com'
];

Jeśli masz kilka adresów dodaj je w osobnych wierszach:

var IGNORE_USERS = [
'adresmailowy@gmail.com',
'adresmailowy2@gmail.com'
];

Gdy skończysz dostosowywać skrypt, kliknij AUTORYZUJ i zezwól systemowi na wprowadzanie zmian na koncie.

Śledzenie zmian na koncie Google Ads za pomocą skryptu

Następnie kliknij PODGLĄD, aby sprawdzić, czy skrypt poprawnie działa. Po zakończeniu działania skryptu i wykryciu zmian na koncie otrzymasz maila, który będzie wyglądać następująco:

Śledzenie zmian na koncie Google Ads za pomocą skryptu

Z kolei Arkusz Google będzie zawierać szczegółowe informacje dotyczące zmian wprowadzony w dniu wczorajszym:

Śledzenie zmian na koncie Google Ads za pomocą skryptu

Jeśli skrypt działa poprawnie, zapisz go i ustaw harmonogram jego uruchamiania. Skrypt analizuje historię danych za poprzedni dzień, więc harmonogram warto ustawić raz dziennie w godzinach nocnych, aby już rana dostać maila o ewentualnych zmian z wczoraj.

Śledzenie zmian na koncie Google Ads za pomocą skryptu

Dzięki temu możesz regularnie sprawdzać, czy ktoś dokonywał zmian na koncie.

WSPÓŁPRACA ZE MNĄ
Od 2011 roku jako specjalista Google Ads zajmuję się prowadzeniem i optymalizacją kampanii w systemie reklamowym Google. Dotychczas przeprowadziłem ponad 2300 kampanii, których budżet przekroczył już 30 mln zł. Jeśli szukasz kogoś komu chcesz zlecić prowadzenie swoich kampanii, napisz do mnie. Pracuję tylko z firmami, które poważnie podchodzą do tematu, dlatego zapoznaj się proszę z moimi zasadami współpracy. Jeśli je akceptujesz, wyślij mi wiadomość :)

 

2 komentarze

  • Artur Łowigus

    6 maja 2024 at 10:14

    Działa i ułatwi z pewnością weryfikację działań prowadzonych zarówno przez Klientów, jak i innych, podległych członków zespołu. Dziękuję

    Reply

    • Marcin Wsół

      6 maja 2024 at 13:30

      nie ma za co :) dzięki za komentarz!

      Reply

Zostaw odpowiedź

Twoj adres e-mail nie bedzie opublikowany.

Cześć!

Potrzebujesz pomocy przy kampanii Google Ads?

Napisz do mnie i sprawdź jak mogę Ci pomóc :)

➡️KONTAKT⬅️

This will close in 40 seconds