Google Ads-script
notificatie bij nul vertoningen of conversies

Controleer automatisch op campagnes met nul vertoningen of conversies in Google Ads. Ontvang directe notificaties en los problemen sneller op.

Makkelijk te gebruiken

Wat doet dit script precies?

Dit Google Ads-script spoort campagnes op die nul vertoningen of conversies hebben binnen een ingestelde periode. Zodra een probleem wordt gevonden, ontvang je automatisch een notificatie via e-mail. Zo blijf je altijd op de hoogte van onderpresterende campagnes, zonder handmatige controle.

Waarom notificaties bij nul vertoningen of conversies belangrijk zijn

Wanneer een campagne geen vertoningen heeft, kunnen advertenties zijn afgekeurd, het budget op zijn of targeting verkeerd ingesteld. Geen conversies kunnen wijzen op fouten in tracking of op de landingspagina. Met dit script ontvang je tijdig een notificatie, zodat je snel kunt ingrijpen.

Instructies: zo stel je het script in

Plak het script in je Google Ads-account onder “Scripts”, geef de benodigde machtigingen en plan wanneer het moet draaien (bijv. dagelijks of elk uur). Je kunt zelf aangeven welke conversieacties gecontroleerd moeten worden.

Kopieer direct het Google Ads script

Kopieer het script vanaf deze pagina zodat je binnen enkele minuten notificaties ontvangt over campagnes die niet presteren.

			
			// === CONFIGURATIE ===
			var EMAIL_ADDRESS_TO_NOTIFY = "[email protected]";
			var NUM_HOURS_TO_CHECK = 24;
			var METRIC_TO_CHECK = "Impressions";
			var CONVERSION_METRIC_TO_CHECK = "Conversions";
			var DEBUG = 0;

			// === HELPER: Datum formatteren als yyyymmdd ===
			Date.prototype.yyyymmdd = function() {
			  var yyyy = this.getFullYear().toString();
			  var mm = (this.getMonth() + 1).toString().padStart(2, '0');
			  var dd = this.getDate().toString().padStart(2, '0');
			  return yyyy + mm + dd;
			};

			// === HELPER: Genereer datumreeks van gisteren tot vandaag ===
			function getDateRangeYesterdayToToday() {
			  var today = new Date();
			  var yesterday = new Date();
			  yesterday.setDate(today.getDate() - 1);
			  return yesterday.yyyymmdd() + "," + today.yyyymmdd();
			}

			// === HELPER: Verstuur e-mailnotificatie ===
			function sendEmailNotifications(emailAddresses, subject, body, emailType) {
			  var prefix = "";
			  if (emailType.toLowerCase().includes("warning")) {
				prefix = "[Warning] ";
			  } else if (emailType.toLowerCase().includes("notification")) {
				prefix = "[Notification] ";
			  }
			  var account = AdWordsApp.currentAccount();
			  var finalSubject = prefix + subject + " - " + account.getName() + " (" + account.getCustomerId() + ")";
			  
			  MailApp.sendEmail({
				to: emailAddresses,
				subject: finalSubject,
				htmlBody: body
			  });

			  if (DEBUG) Logger.log("E-mail verzonden: " + finalSubject);
			}

			// === MAIN SCRIPT ===
			function main() {
			  var dateRange = getDateRangeYesterdayToToday();
			  var currentDate = new Date();

			  // --- IMPRESSIONS CHECK ---
			  var impressionsByHour = {};
			  var impressionsQuery = `SELECT ${METRIC_TO_CHECK}, DayOfWeek, HourOfDay FROM ACCOUNT_PERFORMANCE_REPORT DURING ${dateRange}`;
			  var daysMapping = {
				"Sunday": 0, "Monday": 1, "Tuesday": 2,
				"Wednesday": 3, "Thursday": 4, "Friday": 5, "Saturday": 6
			  };

			  var rows = AdWordsApp.report(impressionsQuery).rows();
			  while (rows.hasNext()) {
				var row = rows.next();
				var day = daysMapping[row["DayOfWeek"]];
				var hour = parseInt(row["HourOfDay"]);
				var key = day * 24 + hour;
				impressionsByHour[key] = parseFloat(row[METRIC_TO_CHECK].toString().replace(/,/g, ''));
			  }

			  var foundImpressions = false;
			  for (var i = 1; i <= NUM_HOURS_TO_CHECK; i++) {
				var checkDate = new Date(currentDate.getTime());
				checkDate.setHours(currentDate.getHours() - i);
				var hourKey = checkDate.getDay() * 24 + checkDate.getHours();
				if (impressionsByHour[hourKey] && impressionsByHour[hourKey] > 0) {
				  foundImpressions = true;
				  break;
				}
			  }

			  if (!foundImpressions) {
				sendEmailNotifications(
				  EMAIL_ADDRESS_TO_NOTIFY,
				  "Google Ads Account getting no impressions",
				  "Account " + AdWordsApp.currentAccount().getName() + " (" + AdWordsApp.currentAccount().getCustomerId() + 
				  ") kreeg geen impressies in de laatste " + NUM_HOURS_TO_CHECK + " uur. Controleer de campagne.",
				  "warning"
				);
			  }

			  // --- CONVERSIONS CHECK ---
			  var conversionsByHour = {};
			  var lastConversionTimestamp = null;
			  var convQuery = `SELECT ${CONVERSION_METRIC_TO_CHECK}, Date, HourOfDay FROM ACCOUNT_PERFORMANCE_REPORT DURING ${dateRange}`;
			  var convRows = AdWordsApp.report(convQuery).rows();

			  while (convRows.hasNext()) {
				var row = convRows.next();
				var date = row["Date"];
				var hour = parseInt(row["HourOfDay"]);
				var count = parseFloat(row[CONVERSION_METRIC_TO_CHECK].toString().replace(/,/g, ''));

				var convDate = new Date(date + "T" + hour.toString().padStart(2, '0') + ":00:00");
				var hourKey = convDate.getDay() * 24 + convDate.getHours();
				conversionsByHour[hourKey] = (conversionsByHour[hourKey] || 0) + count;

				if (count > 0 && (!lastConversionTimestamp || convDate > lastConversionTimestamp)) {
				  lastConversionTimestamp = convDate;
				}
			  }

			  var foundConversions = false;
			  for (var i = 1; i <= NUM_HOURS_TO_CHECK; i++) {
				var checkDate = new Date(currentDate.getTime());
				checkDate.setHours(currentDate.getHours() - i);
				var hourKey = checkDate.getDay() * 24 + checkDate.getHours();
				if (conversionsByHour[hourKey] && conversionsByHour[hourKey] > 0) {
				  foundConversions = true;
				  break;
				}
			  }

			  if (!foundConversions) {
				var lastConvMessage = "Er zijn geen conversies gevonden binnen de periode " + dateRange + ".";
				if (lastConversionTimestamp) {
				  var daysAgo = Math.floor((currentDate - lastConversionTimestamp) / (1000 * 60 * 60 * 24));
				  lastConvMessage = `Laatste conversie was ${daysAgo === 0 ? "vandaag" : daysAgo + " dag(en) geleden"} (${lastConversionTimestamp.toLocaleString()}).`;
				}

				sendEmailNotifications(
				  EMAIL_ADDRESS_TO_NOTIFY,
				  "Google Ads Account getting no conversions",
				  `Account ${AdWordsApp.currentAccount().getName()} (${AdWordsApp.currentAccount().getCustomerId()}) kreeg geen conversies in de laatste ${NUM_HOURS_TO_CHECK} uur. ${lastConvMessage} Controleer of alles goed werkt.`,
				  "warning"
				);
			  }
			}

			
		
20+

Al meer dan 20 jaar help ik bedrijven optimaal resultaat te behalen met hun online marketing activiteiten. Voornamelijk via Google Ads.

We werken sinds enkele jaren met volle tevredenheid samen met Henk. Hij is kundig, nuchter en vaak in de breedte van alles wat met online marketing te maken heeft een fijne sparringpartner. Daarnaast is hij transparant over de resultaten die we halen en welke wisselwerking er nodig is van beide partijen om de resultaten nog verder te verbeteren.

Durk Regts - regtsdelfttiles.com

Als je op zoek bent naar iemand die je online marketing naar een hoger niveau tilt, dan is Henk de aangewezen persoon. Hij is niet zomaar een expert, maar iemand die echt begrijpt wat er nodig is om succesvol te zijn. Henk heeft niet alleen diepgaande kennis van zijn vakgebied, maar hij daagt je ook uit om beter na te denken en komt zelf met ideeën.

Joris Oosterveld - elix.nl

De samenwerking met Henk is ontzettend fijn. Hij denkt mee, houd ons scherp en is een fijne sparringpartner. Onze websites en online zichtbaar is hierdoor naar een hoger niveau getild en we leren eigenlijk in elke gesprek wel iets nieuws.

Johanna Koster - lentis.nl

Contact opnemen

Tel:

06 1523 9401

Adres:

Stavangerweg 1, Groningen

© 2024. All rights reserved.