Deze zelfstudie documenteert een script dat de activiteit van conversiedoelen controleert voor alle accounts onder je MCC. Het schrijft de resultaten naar een Google Sheet, labelt de gezondheid van elk doel, geeft de status een kleurcode en stuurt alleen een samenvatting per e-mail als er een probleem is.
Er zijn geen onnodige tools of dashboards van derden, alleen ruwe controle en volledige zichtbaarheid.
Dit script controleert elk Google Ads account onder je MCC en evalueert de status van elk conversiedoel over een bepaalde terugkijkperiode. In plaats van te raden welke doelen actief of gebroken zijn, geeft dit systeem je een realtime momentopname in een Google Sheet en waarschuwt het je alleen wanneer iets je aandacht nodig heeft.
There will be two email notifications: one for accounts needing attention and the other for all good accounts.
Voorbeeld:
Berichten:
Got it, your script needs two distinct email outputs:
✅ "Alles goed" e-mail (als er geen problemen zijn gevonden)
⚠️ E-mail "Aandacht nodig" (als er doelen inactief zijn, ontbreken of slecht presteren)
Hier ziet u precies hoe beide versies eruit zouden moeten zien, met behulp van uw voorbeeldgegevens en huidige logica:
Bericht #1
Alle bewaakte conversiedoelen rapporteren activiteit over de afgelopen 60 dagen.
In geen enkele account zijn problemen gevonden.
Bekijk het volledige rapport:
https://docs.google.com/spreadsheets/d/yoursheetid
Bericht #2
De volgende conversiedoelen moeten mogelijk worden herzien (bijv. geen recente conversies of inactief):
Bright Widgets Inc (123-456-789) - Contact Form Submission (Behoefte aan aandacht)
Acme Corp (987-654-321) - Gesprek plannen (Inactief)
Acme Corp (987-654-321) - Gratis proefabonnement (aandacht nodig)
Rocket Leads (456-789-123) - (geconfigureerd, geen activiteit) (Geen recente conversies)
Beta Test Group (321-654-987) - (niet ingesteld) (Inactief)
Zebra Analytics (999-111-222) - Whitepaper downloaden (Aandacht nodig)
Bekijk het volledige rapport:
https://docs.google.com/spreadsheets/d/yoursheetid
Voordat je het script implementeert, moet je ervoor zorgen dat je omgeving correct is geconfigureerd. Dit script is ontworpen om te draaien binnen een Google Ads MCC-context om gegevens te schrijven en waarschuwingen te versturen.
Dit is het script in zijn volledige, onbewerkte vorm. Alle opmerkingen, opmaak en logica zijn precies zoals oorspronkelijk geschreven. Wijzig dit niet als je van plan bent de uitsplitsing later in deze tutorial te volgen.
// ========== CONFIGURATION ========== const SHEET_ID = '1PvpW3eUl5fqRwabBg0P7D8LKzW83MOTVX1KDBMB3ipA'; const LOOKBACK_DAYS = 60; const EXCLUDED_ACCOUNT_IDS = [ '000-000-000', '000-000-000', '000-000-000' ]; const RECIPIENT_EMAILS = '[email protected]'; // =================================== function main() { const sheet = SpreadsheetApp.openById(SHEET_ID).getSheets()[0]; sheet.clear(); sheet.appendRow(['Account Name', 'Account ID', 'Goal Name', 'Conversions', 'Status', 'Date Range']); const startDate = getDateXDaysAgo(LOOKBACK_DAYS); const endDate = getTodayDate(); const dateRangeLabel = `Last ${LOOKBACK_DAYS} days (${startDate} to ${endDate})`; const accounts = MccApp.accounts().get(); const flagged = []; let rowIndex = 2; while (accounts.hasNext()) { const account = accounts.next(); const accountId = account.getCustomerId(); const accountName = account.getName(); Logger.log(`⏳ Checking account: ${accountName} (${accountId})`); if (EXCLUDED_ACCOUNT_IDS.includes(accountId)) { Logger.log(`🚫 Skipping excluded account: ${accountName} (${accountId})`); continue; } try { MccApp.select(account); const query = ` SELECT ConversionTypeName, Conversions FROM CAMPAIGN_PERFORMANCE_REPORT DURING ${startDate},${endDate} `; const report = AdsApp.report(query); const rows = report.rows(); const goalMap = {}; while (rows.hasNext()) { const row = rows.next(); const goalName = row['ConversionTypeName'] || '(not set)'; const conversions = parseFloat(row['Conversions']) || 0; if (!goalMap[goalName]) { goalMap[goalName] = 0; } goalMap[goalName] += conversions; } if (Object.keys(goalMap).length === 0) { Logger.log(`⚠️ No conversion data returned for account: ${accountName} (${accountId})`); const status = 'No Recent Conversions'; sheet.appendRow([ accountName, accountId, '(configured, no activity)', 0, status, dateRangeLabel ]); setStatusColumnColor(sheet, rowIndex, status); flagged.push(`${accountName} (${accountId}) - no conversion goals triggered`); rowIndex++; continue; } for (const [goalName, totalConversions] of Object.entries(goalMap)) { let status; if (totalConversions > 0) { status = 'Active'; } else if (goalName.toLowerCase().includes('test') || goalName === '(not set)') { status = 'Inactive'; } else { status = 'Needs Attention'; } sheet.appendRow([ accountName, accountId, goalName, totalConversions, status, dateRangeLabel ]); setStatusColumnColor(sheet, rowIndex, status); if (status !== 'Active') { flagged.push(`${accountName} (${accountId}) - ${goalName} (${status})`); } rowIndex++; } } catch (e) { Logger.log(`❌ Error processing account: ${accountName} (${accountId}) - ${e.message}`); } } if (flagged.length > 0) { const subject = '⚠️ Conversion Goals Needing Attention'; const body = `The following conversion goals may need review (e.g., no recent conversions or inactive):\n\n` + flagged.join('\n') + `\n\nView the full report:\nhttps://docs.google.com/spreadsheets/d/${SHEET_ID}`; MailApp.sendEmail(RECIPIENT_EMAILS, subject, body); } else { Logger.log('✅ All goals are reporting conversions.'); } } // 🎨 Apply color to only the "Status" column (Column E) function setStatusColumnColor(sheet, row, status) { const range = sheet.getRange(row, 5); // Column E switch (status) { case 'Active': range.setBackground('#d9ead3'); // Light green break; case 'Inactive': range.setBackground('#f4cccc'); // Light red break; case 'Needs Attention': range.setBackground('#fff2cc'); // Light yellow break; case 'No Recent Conversions': range.setBackground('#e6e6fa'); // Light purple break; default: range.setBackground(null); } } // 🕒 Helpers function getTodayDate() { const date = new Date(); return Utilities.formatDate(date, AdsApp.currentAccount().getTimeZone(), 'yyyyMMdd'); } function getDateXDaysAgo(days) { const date = new Date(); date.setDate(date.getDate() - days); return Utilities.formatDate(date, AdsApp.currentAccount().getTimeZone(), 'yyyyMMdd'); }
This walkthrough shows how to set up the conversion goal health checker for your Google Ads MCC account. Follow each step to get the system running, write to Google Sheets, and send alerts when something breaks.
Begin met het instellen van de uitvoerbestemming.
U zult dit script implementeren in uw MCC-account.
De eerste keer dat je het script gebruikt, moet je het autoriseren.
Je moet deze stap voltooien, anders wordt het script niet uitgevoerd.
Bekijk en wijzig het volgende in het script:
Je kunt de rest van het script precies laten zoals het is.
Voer het een keer handmatig uit om te controleren of alles werkt.
Om dit automatisch te laten verlopen, stel je het in op een terugkerend schema.
Het script wordt automatisch uitgevoerd en geeft alleen een waarschuwing als er iets niet in orde is.
Wanneer het script wordt uitgevoerd, worden alle conversiedoelen gecontroleerd. Als er doelen inactief zijn of niet afgaan, ontvang je een e-mail.
Dit script is niet zomaar een gegevensdump. Het is een waakhond voor elk conversiedoel in je hele Google Ads MCC. Je krijgt een waarschuwing als er iets kapot gaat, hapert of stilletjes stopt met tracken. Als alles in orde is, krijg je stilte.
Het controleert elke account die je beheert, markeert inactieve of slecht presterende doelen en levert een gefilterd, geruisloos rapport rechtstreeks in je inbox. Het Google Sheet geeft je een live overzicht van de doelstatus per account, doelnaam en conversievolume, met ingebouwde visuele aanwijzingen.
Je graaft niet door interfaces. Je wacht niet tot het einde van de maand om je te realiseren dat je blind bent geweest. Je hebt controle voordat het een probleem wordt.
Bekijk soortgelijke berichten:
Bekijk soortgelijke berichten:
If you manage multiple accounts, don’t miss our guide on tracking GA4 issues from numerous properties or exporting top-performing actual search terms with a lightweight script to refine your targeting.
Ben je het zat om te gissen of je tracking werkt? Wil je een team dat systemen bouwt in plaats van alleen rapporten?
Bright Vessel doesn’t just manage Google Ads; we engineer performance visibility at scale. Whether you need help deploying this script, integrating it into a larger automation stack, or building a custom analytics layer that tells you something, we’re ready.
Praat met het team dat bouwt wat andere bureaus namaken.
"*" geeft verplichte velden aan
"*" geeft verplichte velden aan
"*" geeft verplichte velden aan