Ændringshistorikken i Google Ads er for mig et særdeles vigtigt sted. Skal man i dybden med årsager til ændret performance er det et godt sted at kigge. Det vil hurtigt afsløre om nye søgeord, ændringer i bud, målretning eller andet kan forklare noget. I ændringshistorikken er ikke kun de rettelser man har foretaget men også ændringer foretaget af regler, Google Ads meget lidt populære automatiske anbefalinger og naturligvis ændringer foretaget af andre end en selv. Det kunne jo være en kollega eller eller en kunde som havde foretaget uheldige rettelser.
Ændringshistorikken i Google Ads var desværre i lang tid noget som var svært tilgængelig at tilgå systematisk og var kun tilgængeligt via Google Ads API. Men så blev det tilgængeligt i Google Ads scripts og en lang række muligheder opstod.
Herunder et Google Ads script som trækker ud fra ændringshistorikken på MCC niveau. Det giver således et overblik over rettelser på tværs af alle konto i et MCC. Scriptet genererer et Google Sheet som vil kunne besvare spørgsmål som
- Hvem har senest rettet i kontoen?
- Hvornår er seneste rettelse foretaget?
- På hvilket niveau er der seneste rettet?
- Hvilken kampagne/annoncegruppe er senest rettet?
- Og den vigtige for mange bureauer: Er nogle kunder syltede?
Husk at tilrette SPREAD_SHEET_URL og SHEET_NAME og vær opmærksom på at Google Ads scripts tillader kun et tilbagekig på 30 dage i ændringshistorikken. Når scriptet virker så sæt det til at køre hver nat!
function main() {
//add your spreadsheet url here
const SPREAD_SHEET_URL = ‘XXXXXXXXXXXXXXXXXXXXXX’;
//add your sheet name here
const SHEET_NAME = ‘Sidste rettelse’;
const ss = SpreadsheetApp.openByUrl(SPREAD_SHEET_URL);
const sheet = ss.getSheetByName(SHEET_NAME);
// get last 30 days – this is the max you can get in this report
const today = new Date();
const startDate = Utilities.formatDate(new Date(today.getTime() – 29 * 24 * 60 * 60 * 1000), AdsApp.currentAccount().getTimeZone(), ‘yyyyMMdd’);
const endDate = Utilities.formatDate(today, AdsApp.currentAccount().getTimeZone(), ‘yyyyMMdd’);
// schema of the report
const fields = [
‘customer.descriptive_name’,
‘customer.id’,
‘change_event.user_email’,
‘change_event.change_date_time’,
‘change_event.change_resource_type’,
‘campaign.name’,
‘ad_group.name’,
‘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’,
]
// clear the sheet
sheet.clearContents();
// set the headers
const headers = fields.map(function (field) {
return field.replace(‘change_event.’, ”);
});
sheet.getRange(1, 1, 1, fields.length).setValues([headers]);
// build the select clause
let selectClause = fields.join(‘, ‘);
// Select your accounts
const managerAccount = AdsApp.currentAccount();
const accountIterator = AdsManagerApp.accounts()
for (const account of accountIterator) {
Logger.log(‘Getting data for account: ‘ + account.getName());
// Select the client account.
AdsManagerApp.select(account);
let report = AdsApp.report(
`SELECT ${selectClause} ` +
`FROM change_event ` +
`where change_event.change_date_time BETWEEN ‘${startDate}’ and ‘${endDate}’ and change_event.user_email != ‘Recommendations Auto-Apply’ ` +
`ORDER BY change_event.change_date_time DESC ` +
`limit 1`
);
let rows = report.rows();
while (rows.hasNext()) {
let row = rows.next();
let rowValues = fields.map(function (field) {
return row[field];
});
sheet.appendRow(rowValues);
}
}
}
Kredit til det oprindelige script her som i øvrigt også findes i en version til en enkelt Google Ads konto.
Næste step bliver et script som kan advare om rettelser i ændringshistorikken og alarmere via mails. Det udarbejder jeg selv med kyndig hjælp af ChatGpt.