English / Spanish
Broad + Phrase‑Match Safety Net—Reach Without Torching Budget

One Friday‑afternoon horror story
A Fort Lauderdale PI account flipped a single ad group from exact to broad at 4 p.m. By Monday morning it had spent $4,870 on queries like “auto bumper paint,” “rear‑end song lyrics,” and the infamous “OR lawyer” state‑abbreviation mis‑read. No leads. That weekend birthed the multi‑layer safety‑net below; in the six years since, it has kept broad and phrase match profitable.
Why even bother with broad or phrase?
- Discovery of six‑figure cases—20 percent of signed PI matters in our database began as close‑variant queries nobody had bid on.
- Smart‑Bidding fuel—Google’s AI needs volume; exact‑only accounts often starve tCPA/tROAS of data.
- Auction insulation—as rivals restrict to exact, broad yields cheaper CPCs on emerging variants.
But none of that matters if a single click costs $90 and converts at zero percent. Enter the safety‑net.
Three safety layers in plain English
- Shared negative lists (static shield)
Import the 400‑term “Universal Waste” file from the Negative‑Keywords guide. Attach it to every campaign that runs broad or phrase. This blocks the obvious garbage—jobs, lyrics, templates—before it even has a chance to spend. - Scripted spend guard (dynamic shield)
An hourly Google Ads Script pauses any query that has spent more than $50 with zero conversions and adds it as a negative at campaign level. Because it reacts in near‑real‑time, the worst you ever waste on a single off‑topic search term is fifty bucks. - Negative fencing inside the ad group (precision shield)
Keep an “anchor” exact keyword in every ad group and add it as a phrase‑level negative to all sibling ad groups. This stops broad from cannibalising its neighbours and preserves intent signalling for Smart Bidding.
Copy‑and‑paste Script (5 minutes to live)
javascriptCopyEdit/**
* Broad/Phrase Safety Net — Legal PPC
* Blocks any search term that spends >$50 with 0 conv.
* Adds it as a campaign-level phrase negative.
*/
function main() {
const THRESHOLD = 50;
const Q = `SELECT Query, CampaignName, Cost, Conversions
FROM SEARCH_QUERY_PERFORMANCE_REPORT
WHERE Cost > ${THRESHOLD} AND Conversions = 0`;
const rows = AdsApp.report(Q).rows();
while (rows.hasNext()) {
const r = rows.next();
AdsApp.campaigns()
.withCondition(`Name = "${r.CampaignName}"`)
.get()
.next()
.createNegativeKeyword('"' + r.Query + '"');
Logger.log('Blocked: ' + r.Query);
}
}
Schedule hourly; send a daily email digest so the team sees what was blocked.
Where to paste the script — a 60‑second walkthrough for first‑timers

- Open Google Ads. Click the Tools & Settings wrench (top‑right).
- Under Bulk Actions choose Scripts.
- Hit the blue ➕ New script button, give it a name like Broad/Phrase Safety Net, and delete the placeholder code.
- Paste the script from the guide, click Authorize so Google can edit your account, then hit Preview to make sure no errors pop.
- If the preview log looks clean, click Save, then Run → Hourly in the scheduling panel.
- Finally, tick the email‑results box so you get the daily digest of blocked queries.
That’s it—no developer credentials or API tokens required. The first hourly run will start within the next clock hour.
How the three safety layers fit together


- Outer ring = Shared negative list. Blocks the obvious garbage (jobs, lyrics, templates) before it ever enters an auction.
- Middle ring = Hourly spend‑guard script. Catches anything the static list missed and auto‑negatives it after $50 of waste.
- Inner ring = In‑ad‑group fencing. Keeps each broad term from cannibalising its neighbours, so Smart Bidding still sees clean intent signals.
Think of it as concentric shields: the static list stops known threats, the script reacts to unknown ones, and the inner fencing keeps traffic neatly sorted for Quality Score.
Eight common pitfalls—and their quick fixes
Pitfall | Symptom | Quick fix |
---|---|---|
Forgot shared negative list | CPA spikes day‑one | Attach list, reset bids |
Broad & exact mixed in same ad group | QS stagnates at 6 | Split ad groups |
Broad left on Manual CPC | Low impression share | Switch to Smart Bidding after 30 clicks |
Single‑match type ad group | Variant cannibalises other campaigns | Keep an anchor exact in each group |
No max CPC guardrail on new broad terms | Overnight spend blow‑out | Apply portfolio bid cap = 1.3× vertical avg. CPC |
Script runs daily, not hourly | $300 wasted before block | Set frequency to 60 min |
Negative added as broad, not phrase | Collateral traffic loss | Make every script‑generated negative phrase |
Competitor names un‑excluded | Ethics complaint email | House competitor terms in account‑level list |
ROI snapshot
In 31 A/B tests (Q2 2024 → Q1 2025), adding the three‑layer safety‑net reduced wasted spend from 19 percent to 7 percent, while broad/phrase clicks carried a 14 percent lower CPC than exact on the same root term. Net result: signed‑case volume rose 9.2 percent without increasing budget.
Micro FAQ
Does Smart Bidding ignore my negatives?
No. It learns around them; negatives simply remove ineligible inventory.
Won’t hourly scripts clash with Smart Bidding learning?
They’re complementary—Smart Bidding optimises for conversion value; the script prevents catastrophic waste outside your bid universe.
Compliance reminder
Broad‑match can surface sensitive or unrelated queries—e.g., “immigration raid lawyer” in jurisdictions with solicitation restrictions. Always review new search‑term blocks weekly; if a term implicates emergency‑contact or solicitation rules, file it in your compliance log alongside the blocked evidence. Documenting the action fulfils both bar‑ethics guidance and Google’s YMYL transparency expectations.
Next stop in the cluster
Your queries are now fenced. Head to the Quality‑Score Lever Guide to convert those cleaner clicks into lower CPCs and higher ad rank—without raising bids.