Google Ads scripts that only alert or brake: spend pacing, anomaly detection, URL and disapproval sweeps, and one agreed kill switch.
About this service
Automation in this practice stops things. It does not start them. Every script we ship either raises an alarm or applies a brake, and none of them decide what to bid, what to pause for performance, or which negative keyword to add. That position removes most of what the market sells as automation, and it is the reason clients keep us after the build.
The rule:
A person makes every decision that costs or saves money. Machines watch the account at three in the morning, when a feed breaks, the checkout path starts returning a 500, or a daily budget goes from one hundred dollars to eight hundred because somebody edited a portfolio strategy in a hurry. Google Ads scripts run against a thirty-minute execution ceiling and can be scheduled hourly, which is ample for every guardrail worth having and nowhere near enough for the real-time bid management some shops still pitch.
What gets built:
A spend pacer comparing month-to-date spend against a target curve rather than a flat divisor, alerting on divergence instead of on the total. An anomaly monitor built on a twenty-eight-day median and median absolute deviation rather than mean and standard deviation, because one Diwali week otherwise poisons the baseline for a month afterwards. A disapproval sweep reporting ads, assets and Merchant Center items disapproved in the past twenty-four hours, with the policy reason, into a Slack channel through UrlFetchApp. A URL checker requesting every final URL and tracking template, flagging 404s, 5xx responses, redirect chains longer than one hop, and pages returning 200 with an out-of-stock marker in the body. A conversion heartbeat that alerts when a primary conversion action records nothing for six hours inside your trading window.
The one automation allowed to act:
A kill switch. One script, one threshold agreed with you in writing, pausing campaigns when hourly spend crosses a line no legitimate change explains. Across our clients it has fired twice in the past year and both times the cause was a tag deployment rather than anything anyone did inside the account.
Ownership:
Code goes into your repository, commented for whoever inherits it, with a one-page runbook per script covering what it watches, what a true alert looks like, what to do next and who to call. We are not the only holder of anything we write, we do not keep credentials after handover, and we do not want to be your on-call rota. If your team cannot read the script, we wrote it wrong.
We will not build:
Bid-adjustment scripts working against the auction model. N-gram scripts adding negatives without a person approving each one, because the pattern that looks like waste is often feeding a converting query in a language the report is not reading. Rules pausing an ad group on a rolling ROAS window, which is how accounts reach quarter end with half their structure switched off and nobody sure who did it. Anything that emails a daily report, since a report nobody opens is not automation, it is furniture.
Wrong fit:
Accounts under roughly twenty thousand dollars a month, where alert volume will exceed the value of what it protects and a weekly human check is genuinely the better answer. Teams with no engineering owner, because unowned code rots and starts lying inside two quarters. And anyone who wants a monitoring layer as a substitute for a channel owner. This is a smoke alarm. Somebody still has to run the building.