If you manage multiple websites, the last thing you want is to discover that one of them hasn’t been tracking visitors for days. You can’t rely on manually checking each GA4 property; it’s inefficient and prone to human error.
The whole thing takes under an hour to set up and saves you from endless babysitting.
This guide will walk you through a step-by-step setup using Google Sheets and the SyncWith add-on to automatically detect and flag any tracking issues (like zero traffic) across multiple GA4 properties.
Use SyncWith to pull your traffic data into a Google Sheet. It connects directly to GA4 and updates automatically.
How to set it up:
You’ll get a table that looks like this:
Total Users | Property Display Name | Date |
---|---|---|
52 | Website Property 1 G4 | 2025-06-02 |
0 | Website Property 2 G4 | 2025-06-05 |
218 | Website Property 3 G4 | 2025-06-05 |
Each row represents a day of traffic for a GA4 property.
Now that your sheet is automatically updated, we’ll write a script to scan for any property with zero users in the past 3 days. If any are found, it sends an email alert.
Status Email - All Good
Status Email - Oh no, but check some accounts.
Here’s the script:
function sendG4HealthCheckAlert() { const SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/Make_Sure_You_Use_Your_Sheets_ID/edit#gid=0'; const SHEET_NAME = '3 Day Report'; const EMAIL_TO = '[email protected], [email protected]'; const EMAIL_FROM = '[email protected]'; const EMAIL_SUBJECT = '⚠️ G4 Health Check'; const ss = SpreadsheetApp.openByUrl(SPREADSHEET_URL); const sheet = ss.getSheetByName(SHEET_NAME); const data = sheet.getRange(3, 1, sheet.getLastRow() - 2, 3).getValues(); const zeroAccounts = data .filter(row => row[0] === 0) .map(row => `• ${row[1]} - GA4 on ${row[2]}`); let messageBody; if (zeroAccounts.length > 0) { messageBody = ` ⚠️ G4 Health Check One or more accounts have not recorded visits in the last 3 days: ${zeroAccounts.join(' ')} Open Dashboard `; } else { messageBody = ` ✅ G4 Health Check All accounts are reporting data in the last 3 days. Open Dashboard `; } GmailApp.sendEmail(EMAIL_TO, EMAIL_SUBJECT, '', { htmlBody: messageBody, name: 'Bright Vessel Reports', from: EMAIL_FROM }); }
You can add or remove emails in EMAIL_TO
. The script pulls data from the sheet, filters for rows where the user count is zero, and sends a clean alert listing the offending properties.
To make this check run daily:
sendG4HealthCheckAlert
to run every day at a time of your choiceNo manual checking. No forgotten data issues. If a property stops tracking, your team gets notified.
If you try to open Apps Script and get hit with a 400 Bad Request error, it’s because Google doesn't play nice when you're logged into multiple accounts at once.
Fix:
This is a Google session issue, not your code or setup.
This setup is lean and fast. It does not use third-party dashboards or expensive tools. It uses data pulled via SyncWith and a simple script, ensuring everything runs properly.
If a site flatlines, you’ll know within 24 hours, not three weeks later when a client starts yelling.
At Bright Vessel, we specialize in building smart, scalable analytics systems for multi-location businesses, schools, and agencies. From Google Analytics 4 health monitoring to SEO performance alerts, we help our clients stay ahead of tracking failures and performance drops. Whether you're managing a handful of properties or hundreds, our team ensures your data flows seamlessly and your decision-making stays informed. Need a custom solution like
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields