En kunde fik sig på et tidspunkt forvildet ind i Google Ads interfacet og faldt over de umiddelbart nydelige anbefalinger fra Google og pludseligt var alle kampagner sat til “maksimer antal konverteringer”. 3n del brede søgeord var desværre aktiverede og en række andre specifikke kampagne- og kontoindstillinger var ændrede. Jeg opdagede det først 4-5 dage efter og begrædeligt måtte jeg konstatere at kontoen kørte i en hel skæv retning. Heldigvis er det nemt at finde rettelserne i kontohistorikken i Google Ads og rulle tilbage men skaden var sket. Generelt skal man holde sig meget, meget langt væk fra de anbefalinger og særligt de automatiske anbefalinger i Google Ads men det er en anden snak.
I store virksomheder kan der være flere ansatte som arbejder på samme Google Ads konti og det sker naturligvis også i bureauer. Nogle gange tilsigtet og nogle gange utilsigtet. Man kan således risikere at arbejde i forskellige retninger på kontoen. I forlængelse af mit tidligere skriv om et script der gav et overblik over ændringer i Google Ads ændringshistorik så opstod behovet for et script der kunne alarmere meget håndfast og hurtigt hvis noget utilsigtet skete i ændringshistorikken.
En ny form for ændring på en Google Ads annoncekonto er ændringer hvor Google pauser annoncegrupper eller søgeord med lav volumen. Det er introduceret for annoncegrupper i august 2024. Her kunne det også være interessant at få en alarm hvis det sker. Man kunne jo kiggepå setuppet med friske øjne. I ændringshistorikken vil sådan ændringer være gennemført af en bruger der hedder “Low activity system bulk change“. Scriptet fanger også dette og alarmerer.
Her er scriptet som er udarbejdet ved hjælp af ChatGpt 3.5. Det er igen et MCC script så det skal etableres og scheduleres til at køre på timebasis eller daglig basis på MCC kontoen. Det vil kun overvåge konti med label AKTIV. Der kan jo ligge alskens konti i et MCC som man ikke selv arbejder med og hvor alarmer ikke giver mening.
Vigtigt:
Sørg for at rette “NOT LIKE ‘%XXXXXX%’ . Det kunne eks. være “NOT LIKE ‘%banditbureauet%’ hvis der kun skal rapporteres ændringer at brugere hvis mail ikke ikke indeholder “banditbureauet”. Ret naturligvis også “const recipient = ‘xxxxxx’;”. Her angives den bruger som skal modtage en mail med hvilke rettelser der er sket på den pågældende konto. I mailen vil være det seneste rettelse på kontoen. For at få overblik over det fulde omfang af rettelser må man således ty til ændringshistorikken i Google Ads.
function main() {
// Hent datoen for i går
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() – 1);
const yesterdayString = Utilities.formatDate(yesterday, AdsApp.currentAccount().getTimeZone(), ‘yyyyMMdd’);
// Skemaet for rapporten
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’,
];
// Hent konti med den ønskede label
const accountIterator = AdsManagerApp.accounts().withCondition(“LabelNames CONTAINS ‘AKTIV‘”).get();
let changesDetected = false;
let emailBody = ”;
while (accountIterator.hasNext()) {
const account = accountIterator.next();
Logger.log(‘Getting data for account: ‘ + account.getName());
// Select the client account.
AdsManagerApp.select(account);
// Kør rapportforespørgsel med en øget LIMIT-værdi
const report = AdsApp.report(
`SELECT ${fields.join(‘, ‘)} ` +
`FROM change_event ` +
`WHERE change_event.change_date_time >= ‘${yesterdayString}’ ` +
`AND change_event.change_date_time < ‘${Utilities.formatDate(new Date(), AdsApp.currentAccount().getTimeZone(), ‘yyyyMMdd’)}’ ` +
`AND change_event.user_email NOT LIKE ‘%XXXXXX%’ ` +
`AND change_event.client_type != ‘GOOGLE_ADS_AUTOMATED_RULE’ ` +
`ORDER BY change_event.change_date_time DESC LIMIT 1`
);
const rows = report.rows();
if (rows.hasNext()) {
changesDetected = true;
// Hvis der er ændringer, log ændringsdetaljer for hver konto
while (rows.hasNext()) {
const row = rows.next();
let changeDetails = ‘Change details for account ‘ + account.getName() + ‘:\n’;
fields.forEach(function (field) {
changeDetails += field.replace(‘change_event.’, ”) + ‘: ‘ + row[field] + ‘\n’;
});
Logger.log(changeDetails);
emailBody += changeDetails + ‘\n\n’;
}
}
}
// Log en besked, hvis der ikke blev fundet ændringer
if (!changesDetected) {
Logger.log(‘Ingen ændringer fundet for kontoerne for ‘ + yesterdayString);
}
// Send e-mail med ændringsdetaljerne
if (changesDetected) {
const subject = ‘Ændringer i Google Ads-konti’;
const recipient = ‘xxxxxxx;
MailApp.sendEmail(recipient, subject, emailBody);
}
}
Bemærk at scriptet ignorerer ændringer foretaget af regler. Regler kan jo defineres på flere niveauer og blandt andet hæve klikpriser og pause eller starte opsætningem. Filteret client_type: GOOGLE_ADS_AUTOMATED_RULE sørger for det. Er nogen i ekstrem ond tro ville de således kunne foretage grimme rettelser på kontoen ved at oprette regler for det. Har nogen interesse i det vil scriptet let kunne omskrives til at alarmere hvis regler har rettet på konti. Måske har man ved en fejl opsat “Send resultater på mail” til “Ingen mail” eller man kan have så mange regler på tværs af konti at een samlet mail med orientering om ændringer foretaget af regler i Google Ads har berettigelse.
Jeg kommer senere til at skrive om mine erfaringer med at bruge ChatGpt til at skrive Google Ads scripts.