Script for reading account events

45 views
Skip to first unread message

Aleksy Zajac

unread,
Jun 9, 2025, 2:33:39 PM6/9/25
to Google Ads Scripts Forum

Hello,

I have a script that retrieves account events, but the following fields are not being returned: change_event.old_resource change_event.new_resource

These fields are always empty.

Could you please tell me why this is happening?

I've attached the script below.

Thanks a lot,
Aleksy


function main() {
  setCustomerAccount('472-056-4715');
  var today = new Date();
  var sevenDaysAgo = new Date(today.getTime() - (7 * 24 * 60 * 60 * 1000));
  var startTimeString = Utilities.formatDate(sevenDaysAgo, AdsApp.currentAccount().getTimeZone(), '2025-06-01 01:01:01');
  var endTimeString = Utilities.formatDate(today, AdsApp.currentAccount().getTimeZone(), '2025-06-07 01:01:01');

 
  var query = "SELECT " +
              "change_event.change_date_time, " +
              "change_event.user_email, " +
              "change_event.client_type, " +
              "change_event.change_resource_type, " +
              "change_event.resource_change_operation, " +
              "change_event.changed_fields, " +
              "change_event.old_resource, " +
              "change_event.new_resource, " +
              "change_event.change_resource_name " +
              "FROM change_event " +
              "WHERE change_event.change_date_time >= '" + startTimeString + "' " +
              "AND change_event.change_date_time <= '" + endTimeString + "' " +
              "ORDER BY change_event.change_date_time DESC " +
              "LIMIT 2500";
 
 
  var report = AdsApp.report(query);
  var rows = report.rows();
 
    while (rows.hasNext()) {
    var row = rows.next();

  while (rows.hasNext()) {
    var row = rows.next();
    var changeDateTime = row["change_event.change_date_time"];
    var userEmail = row["change_event.user_email"];
    var clientType = row["change_event.client_type"];
    var changeResourceType = row["change_event.change_resource_type"];
    var resourceChangeOperation = row["change_event.resource_change_operation"];
    var changedFields = row["change_event.changed_fields"];
    var oldResource = JSON.stringify(row["change_event.old_resource"]);
    var newResource = JSON.stringify(row["change_event.new_resource"]);
    var changeResourceName = row["change_event.change_resource_name"];
    var changedFieldsString = JSON.stringify(changedFields);

    Logger.log("changeDateTime: " + changeDateTime);
    Logger.log("userEmail: " + userEmail);
    Logger.log("clientType: " + clientType);
    Logger.log("changeResourceType: " + changeResourceType);
    Logger.log("resourceChangeOperation: " + resourceChangeOperation);
    Logger.log("changedFields: " + changedFieldsString);
    Logger.log("oldResource: " + oldResource);
    Logger.log("newResource: " + newResource);
    Logger.log("changeResourceName: " + changeResourceName);
  }

}
}

function setCustomerAccount(CUSTOMER_ID) {
    var TmpCustomerID = CUSTOMER_ID.replaceAll("-", "");

    var CustomerAccountIterator = AdsManagerApp.accounts()
        .withIds([TmpCustomerID])
        .get();

    if (CustomerAccountIterator.hasNext()) {
    var CustomerAccount = CustomerAccountIterator.next();
    AdsManagerApp.select(CustomerAccount);
    Logger.log(`Select Customer Account: ${AdsApp.currentAccount().getName()} (${AdsApp.currentAccount().getCustomerId()})`);
    }
}

Google Ads Scripts Forum

unread,
Jun 10, 2025, 4:15:27 AM6/10/25
to Google Ads Scripts Forum
Hi,

Thank you for reaching out to the Google Ads Scripts Support team.

I would like to inform you that the JSON format of the oldResource and newResource is different from the other JSON fields as we will not be able to convert them from JSON to a string to display in the console logs during the script execution. I would suggest you to use the reporting option that was available to export the data to the spreadsheet. Kindly refer to the sample example as below and make the necessary changes accordingly based on your requirement.

function main() {
  exportReportToSpreadsheet();
}
function exportReportToSpreadsheet() {
  const spreadsheet = SpreadsheetApp.create('Test');
  const report = AdsApp.report(
      `SELECT change_event.change_date_time,change_event.user_email,change_event.client_type,change_event.change_resource_type,change_event.resource_change_operation,change_event.changed_fields,change_event.old_resource, change_event.new_resource,change_event.change_resource_name FROM change_event WHERE change_event.change_date_time >= '2025-05-15' AND change_event.change_date_time <= '2025-06-07' ORDER BY change_event.change_date_time DESC LIMIT 2500`);
  report.exportToSheet(spreadsheet.getActiveSheet());
  console.log(spreadsheet.getUrl());
}

Thanks,
Google Ads Scripts team

Reply all
Reply to author
Forward
0 new messages