Google Ads scripts that tell you what they change before you run them.
Every script here runs in accounts I manage. Each entry states what it reads, what it writes, and the two lines you need to edit. No signup to copy the code.
7 scripts / free to copy and modify / GAQL, Performance Max safe
// Every script here reads before it writes.
// This is the guard that goes at the top of each one.
var DRY_RUN = true; // set false only after you read the log
function apply(entity, change, label) {
if (DRY_RUN) {
Logger.log("WOULD " + label + ": " + entity);
return false;
}
change();
Logger.log("DID " + label + ": " + entity);
return true;
}One script running on a real account: the sheet or the alert it produced, with client identifiers removed.
1440px wide · 16 / 9 · ads_fig_home_output
The scripts
Paste into Tools → Bulk actions → Scripts, authorise, preview, then schedule.
- N-gram waste report
Finds the words and word pairs your search terms have in common that spend money and never convert, so you negate a pattern instead of one term at a time.
read-onlyWeekly
- Spend anomaly alert
Emails you when a campaign spent far more or far less yesterday than it normally does on that weekday, using the same weekday from the previous four weeks as the baseline.
read-onlyDaily, early morning
- Final URL health check
Requests every final URL on enabled ads and keywords and reports the ones that do not return 200 or that redirect to another host.
read-onlyDaily
- Budget pacing monitor
Compares month-to-date spend against a monthly budget, projects where the month ends, and states the daily figure that would land it on target. Reads every campaign type, and can weight the expected line by the account's own weekday pattern.
read-onlyDaily, early morning
- Negative keyword conflict finder
Finds enabled keywords that your own negatives are blocking, checking ad group negatives, campaign negatives and every shared negative list attached to the campaign, and reports which level each blocking negative came from.
read-onlyMonthly, and after any negative bulk upload
- Disapproved ads alert
Lists enabled ads that are not fully approved, with the policy topics behind each decision, and separately flags ad groups where no ad is servable at all, which is the failure that actually stops traffic.
read-onlyDaily
- Impression share loss report
Separates impression share lost to budget from impression share lost to ad rank, and lists each campaign under the cause that applies, because the two shortfalls have opposite fixes.
read-onlyWeekly
The account pack
The scripts above solve one problem each. The pack is the setup I install in a new account on day one: the full audit dump, a GTM container for conversion tracking with Consent Mode v2, negative lists by vertical, and the Looker report the scripts feed.