So in order to help me keep track of when my
Thanks,
Russ
/************************************** * Track Entity Creation Date * Version 1.4 * Changelog v1.4 * - Removed apiVersion from reporting call * Changelog v1.3 * - Updated script to handle all entities * Changelog v1.2 * - Fixed an issue with comparing dates * ChangeLog v1.1 * - Updated logic to work with larger accounts * Created By: Russ Savage * http://www.FreeAdWordsScripts.com **************************************/ //All my labels will start with this. For example: Created:2013-05-01 var LABEL_PREFIX = 'Created:'; var DAYS_IN_REPORT = 30; var ENTITY = 'ad'; //or adgroup or keyword or campaign function main() { //First we get the impression history of our entity var ret_map = getImpressionHistory(); //Then we apply our labels applyLabels(ret_map); } //Function to apply labels to the ads in an account function applyLabels(ret_map) { var iter; if(ENTITY === 'campaign') { iter = AdWordsApp.campaigns().get(); } if(ENTITY === 'adgroup') { iter = AdWordsApp.adGroups().get(); } if(ENTITY === 'ad') { iter = AdWordsApp.ads().get(); } if(ENTITY === 'keyword') { iter = AdWordsApp.keywords().get(); } while(iter.hasNext()) { var entity = iter.next(); var id = entity.getId(); if(ret_map[id]) { var label_name = LABEL_PREFIX+Utilities.formatDate(ret_map[id], AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd"); createLabelIfNeeded(label_name); entity.applyLabel(label_name); } } } //This is a helper function to create the label if it does not already exist function createLabelIfNeeded(name) { if(!AdWordsApp.labels().withCondition("Name = '"+name+"'").get().hasNext()) { AdWordsApp.createLabel(name); } } //A helper function to find the date days ago function getDateDaysAgo(days) { var the_past = new Date(); the_past.setDate(the_past.getDate() - days); return Utilities.formatDate(the_past,AdWordsApp.currentAccount().getTimeZone(),"yyyyMMdd"); } //A helper function to compare dates. //Copied from: http://goo.gl/uW48a function diffDays(firstDate,secondDate) { var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); } function getImpressionHistory() { var API_VERSION = { includeZeroImpressions : false }; var first_date = new Date('10/23/2000'); var max_days_ago = diffDays(first_date,new Date()); var cols = ['Date','Id','Impressions']; var report = { 'campaign' : 'CAMPAIGN_PERFORMANCE_REPORT', 'adgroup' : 'ADGROUP_PERFORMANCE_REPORT', 'ad' : 'AD_PERFORMANCE_REPORT', 'keyword' : 'KEYWORDS_PERFORMANCE_REPORT'}[ENTITY]; var ret_map = {}; var prev_days_ago = 0; for(var i = DAYS_IN_REPORT; i < max_days_ago; i+=DAYS_IN_REPORT) { var start_date = getDateDaysAgo(i); var end_date = getDateDaysAgo(prev_days_ago); var date_range = start_date+','+end_date; Logger.log('Getting data for ' + date_range); var query = ['select',cols.join(','),'from',report,'during',date_range].join(' '); var report_iter = AdWordsApp.report(query, API_VERSION).rows(); if(!report_iter.hasNext()) { Logger.log('No more impressions found. Breaking.'); break; } // no more entries while(report_iter.hasNext()) { var row = report_iter.next(); if(ret_map[row['Id']]) { var [year,month,day] = (row['Date']).split('-'); var from_row = new Date(year, parseFloat(month)-1, day); var from_map = ret_map[row['Id']]; if(from_row < from_map) { ret_map[row['Id']] = from_row; } } else { var [year,month,day] = (row['Date']).split('-'); ret_map[row['Id']] = new Date(year, parseFloat(month)-1, day); } } prev_days_ago = i; } return ret_map; }