A Google Ads script is a small JavaScript file that lives inside your account, runs on a schedule, and emails you when something looks wrong. You don't have to write one. Google publishes several for free, and the useful ones cover the three failures that quietly drain a local service account: spend running away, ads pointing at dead pages, and the phone going quiet without anyone noticing for a week.

This is not an automation project. Set up correctly, it's about 40 minutes of work once, and then your account tells you when it needs you instead of the other way around.

Where scripts live and what they cost

Nothing. They're included in every Google Ads account. You'll find them under Tools → Bulk actions → Scripts, where you hit the + icon, paste in code, click Authorize, and then set a run frequency using the pencil icon in the Frequency column. Google's own documentation says entry-level familiarity with JavaScript is enough, and for the pre-built ones you don't even need that — you paste, you authorize, you point it at a spreadsheet.

The important distinction is between alerting scripts and acting scripts. Alerting scripts read your account and email you. Acting scripts change bids, pause keywords, or shift budgets. A local account with a handful of campaigns should run alerting scripts only. The money you lose to a bad automated bid rule is bigger than the money you save by not reading an email.

1. Account Anomaly Detector (install this one first)

This is Google's own script and it's the single highest-value thing on this list. It compares what your account has done so far today against what it normally does on that same day of the week. Google's documentation gives the example of stats for a Tuesday at 1 PM being compared against the preceding 26 Tuesdays.

You set thresholds for impressions, clicks, conversions and cost in a template spreadsheet. If today falls outside the band, you get an email. Only one email per alert type per day, so it won't bury you.

Google recommends scheduling it hourly, and dropping to daily around midday if the alerts get noisy. Because Google Ads stats can be delayed up to three hours, the script deliberately ignores the most recent three hours of data — so don't expect it to catch a problem that started 20 minutes ago.

How to set it for a local account: be aggressive on the cost threshold and loose on conversions. A five-van HVAC company might average four leads a day. A day with one lead is normal variance, not an emergency, and a tight conversion threshold will train you to ignore the emails. But a day where cost is running 60% above the same weekday average at 2 PM is worth knowing about at 2 PM, not at the end of the month.

This one script doubles as your conversion-tracking tripwire. If your form stops firing or your call tracking breaks, conversions go to zero and the script tells you. Most owners find out three weeks later.

2. Link Checker

Also Google's. It walks through the final URLs on your ads, keywords and sitelinks, requests each one, and flags anything that doesn't come back with a valid response code — Google's docs say most users should treat only 200 as valid. Results go to a spreadsheet and you get an email.

For a local service business this matters more than it sounds. You redesign the site, the web guy changes /water-heater-repair to /services/water-heater-repair, and nobody tells the person running the ads. You keep paying for clicks that land on a 404 for however long it takes someone to notice.

The feature worth knowing about is failure strings. You give it text that means a page is broken even when the server returns a healthy 200 — Google's example is a page that says a product is discontinued. On a service account, the obvious use is your old phone number. If your tracking number changed and some page still shows the old one, the script will flag it. There's also a custom validation function if you want to check something more specific, like whether your business name still appears in the page title.

Two cautions straight from Google's documentation. First, Link Checker checks your final URLs exactly and ignores tracking templates and most ValueTrack parameters — if your landing pages depend on those, you'll get misleading results. Second, it tracks its progress by applying a label to entities it has already checked, which means it can't fully run in preview mode (labels can't be created there). Schedule it hourly and set "days between analyses" to 1; it'll sit idle between full passes.

3. A search term waste report

There is no official Google script for this, but several free ones exist, and the concept is simple: pull your search terms report and group the terms by individual word or word pair. Instead of scrolling 400 search terms, you see that the word "repair" produced 11 leads and the words "free", "salary", "DIY" and "how to" produced 340 clicks and nothing else.

That's a negative keyword list writing itself. Run it monthly, not hourly — you need volume before the grouping means anything.

If you install a third-party script, read it or get someone to read it. A script you authorize has the same permissions you do. Prefer sources that publish the full code and state plainly whether the script is read-only or whether it makes changes.

The one you probably don't need

Google's Account Summary Report emails you a daily HTML summary of cost, average CPC, CTR, impression share, impressions and clicks, with yesterday compared to two days ago and a week ago. Google says to schedule it Daily, 3am or later so the previous day's data has settled.

It's well-built. It's also a report, not an alarm, and a daily report you skim for four days and then filter into a folder is worse than nothing — it teaches you to ignore email from your ads account. If you already do a structured weekly check, skip it.

What scripts can't do

Before you plan around them, know the ceilings. Per Google's limits documentation:

  • A script in a normal advertiser account is cancelled after 30 minutes. Manager-account scripts using executeInParallel with a callback can reach 60 minutes. Not a problem at local-account size, but it's why big scripts batch their work across runs.
  • Hourly is the floor for scheduling. You cannot run something every 10 minutes, and you can't pick the exact minute within the hour.
  • There's a cap of 250 authorized scripts per account via OAuth2 — irrelevant for you, but it tells you Google expects a handful, not hundreds.
  • Stats lag up to three hours. Any "real-time" alerting claim is bounded by that.

And scripts rot. Google's own published samples pin a reporting API version in their config block with a comment telling you to remove that line if you want the latest. Reporting versions get retired on a schedule. A script that ran fine for two years can start throwing errors after a platform change, silently, and you'll never get the alert that would have told you the alerter is dead. Open the Scripts page once a month and look at the last-run status and the logs. That's the whole maintenance job.

The bigger limitation: an alert doesn't fix anything. It moves a problem from "invisible" to "in your inbox." If nothing in your week is built to act on it, you've automated the production of guilt. Wire the alerts into the same slot you use for your weekly account check so there's a place for them to land.

The order to do this in

Install the Account Anomaly Detector this week, with the cost and conversions thresholds set and the impressions and clicks thresholds left off. Live with it for two weeks and tune the numbers until the emails are rare and real. Then add Link Checker. Then, a month later, a search term report. Then stop — a fourth script is usually somebody's hobby, not a business need.

One more thing worth checking before you reach for code: Google's built-in automated rules handle simple threshold alerts with no JavaScript at all. If a rule can do the job, use the rule.

Scripts are the monitoring layer. They tell you something broke; they don't tell you what the account was supposed to look like before it broke. If you want the build underneath — campaign structure, match types, conversion tracking that actually records the calls, and the routine that keeps it honest — that's what Launchpad walks you through.