Change History Alerts
Monitors the Google Ads change history for modifications made by unrecognized users and sends email alerts with details logged to a Google Sheet.
by Nils Rooijmans·nilsrooijmans.com/google-ads-script-change-history-alerts
Monitors the Google Ads change history for modifications made by unrecognized users and sends email alerts with details logged to a Google Sheet.
by Nils Rooijmans·nilsrooijmans.com/google-ads-script-change-history-alerts
Monitors your account for unexpected performance deviations by comparing today's stats against historical averages for the same weekday. Sends an alert email when impressions, clicks, conversions, or cost deviate beyond configurable thresholds.
One 0-100 score for the whole account, built from seven objective checks — tracking flatlines, disapprovals, serving status, budget losses, negative coverage and query hygiene — with the deduction breakdown as your fix list.
Finds the structural gaps that stop ad groups from serving: ad groups without active ads, without an RSA, without keywords, keyword-stuffed themes, and multi-RSA ad groups.
Generates a daily at-a-glance performance overview of your entire Google Ads account. Writes prior-day stats to a Google Sheet with running history and optionally emails a formatted comparison of yesterday vs. two days ago vs. one week ago.
Generates a Google Spreadsheet with ad performance stats segmented by headline and final URL, including distribution charts. Covers all ad types and optionally emails the report link weekly.
Maps every campaign's ad schedule and flags forgotten narrow serving windows, stale schedule bid modifiers that Smart Bidding ignores, and (optionally) campaigns running 24/7.
Change History Alerts scans your account's change history daily and flags any changes made by users not in your approved list. When unauthorized changes are detected, details are logged to a Google Sheet and an email alert is sent — useful for agencies monitoring client accounts for unexpected edits.
| Variable | Default |
|---|---|
SPREADSHEET_URL | "" |
EMAIL_ADDRESSES | "" |
IGNORE_USERS | [] |
SEND_EMAIL | true |
EMAIL_SUBJECT | "[GAds Script] - WARNING - Change by person outside of organisation" |
PERIOD | "YESTERDAY" |
Processing account: My Google Ads Account query: SELECT campaign.name, ad_group.name, change_event.change_date_time, ... FROM change_event WHERE ... Number of rows added to output sheet: 3 Sending alert mail
The script fetches a header template from an external Google Sheet maintained by the author. PERIOD is referenced in EMAIL_BODY before it is declared — move the PERIOD declaration above EMAIL_BODY if you encounter issues. Maximum of 9,999 change events per run.