This is the deep-dive reference for Step 2 of optimization-weekly.md. The top-level routine has the 4-bucket cascade in checklist form. Open this doc when you need: the worked numbers, the why behind each bucket, the UI clicks, or the previously-converting exception in detail.
When to use this doc
- First time running the cascade on a new campaign or by a new operator
- When you forget what the “Total: Filtered Keywords” benchmark is or how to interpret it
- When deciding edge cases (does this 13-conversion keyword that just went cold qualify for the previously-converting exception?)
- Onboarding a new team member to the weekly rhythm
Why this procedure exists
The simple rule is: pause keywords with 12+ clicks and zero conversions. That works, but it has two weaknesses:
- A fixed click count doesn’t adapt to CPC range. In a 600 of spend, that’s a lot of runway. In a 60, and you’re being too cautious.
- It only catches non-converters. Keywords that do convert but at 2-3x the campaign’s true CPA are silently dragging you down. Letting them keep spending eats budget that would convert better elsewhere.
The agency procedure benchmarks against the campaign’s actual cost-per-conversion across all converting keywords. That number is the campaign’s true CPA, not a guess. Then it cascades through 4 buckets, each catching a different failure mode:
- Bucket 2: expensive winners (converting too high)
- Bucket 3: non-converters past their fair shot
- Bucket 4: bad-relevance keywords (impressions but no clicks)
- (Bucket 1 establishes the benchmark; nothing gets paused there.)
Done weekly, this is the highest-leverage 15-20 minutes of the optimization rhythm.
Bucket 1: Establish the campaign benchmark
Procedure
- Open the campaign in Google Ads
- Go to Keywords in the left sidebar
- Set filters:
- Date range: All time
- Keyword status: Enabled
- Conversions > 0
- Look at the “Total: Filtered Keywords” row at the bottom of the table
- Note the Cost / Conv. column value for that row
That value is the benchmark. It’s the average cost-per-conversion across every keyword that has ever converted in this campaign. Write it down or keep the tab open, you’ll reference it in Buckets 2 and 3.
Why “All time” instead of last 30 days?
You want the benchmark to reflect the campaign’s true earning power, not a recent slump or spike. All-time data smooths out anomalies. If a campaign is brand-new (under 30 days), the All-time = last 30 days, which is fine. As the campaign matures, All-time becomes a more stable yardstick.
Why filter by “Enabled” only?
Paused keywords might have skewed CPAs from old testing. Enabled keywords reflect the campaign’s current operating state. Excluding paused keeps the benchmark grounded in what’s actually running.
Worked example
A solar campaign with 8 enabled keywords, filtered to All time + Conversions > 0:
| Keyword | Cost | Conversions | Cost / Conv. |
|---|---|---|---|
[solar installation] | $1,800 | 18 | $100 |
"solar panels home" | $640 | 8 | $80 |
[solar quote] | $450 | 9 | $50 |
| .4 more rows. | |||
| Total: Filtered Keywords | $4,860 | 72 | $67.50 |
Benchmark: $67.50. That’s the campaign’s true CPA across all proven keywords.
Bucket 2: Pause expensive winners
The decision rule
Any keyword whose individual cost/conv is ≥1.5× the benchmark, pause it.
These are keywords that do convert, but they’re dragging the campaign CPA up.
Procedure
Same filter as Bucket 1 (All time + Enabled + Conversions > 0). Sort by Cost / Conv. (descending). Look at the top of the list.
For each keyword:
- If cost/conv ≥ benchmark × 1.5 → PAUSE
- If cost/conv between benchmark × 1.0 and benchmark × 1.5 → keep, monitor
- If cost/conv below benchmark → keep, this is a star
Worked example with $67.50 benchmark
Threshold: 101.25**
| Keyword | Cost | Conv | Cost / Conv | Decision |
|---|---|---|---|---|
"solar company financing" | $1,300 | 10 | $130 | PAUSE (130 > 101.25) |
[residential solar] | $980 | 10 | $98 | Keep, monitor |
[solar installation] | $1,800 | 18 | $100 | Keep, just under threshold |
[solar quote] | $450 | 9 | $50 | Star, keep |
Solar company financing gets paused: it’s converting, but at almost 2x the campaign’s average. The 50/conv.
Why 1.5× and not 2× or 1.2×?
1.5× is the agency’s calibrated threshold:
- Below 1.5× is normal variance; not every keyword performs at the average.
- Above 1.5× crosses into “this keyword is structurally worse than the campaign’s average performance” and the budget is better spent elsewhere.
- Above 2× is sometimes used as a more conservative threshold for high-value, low-volume conversions where you don’t want to over-prune.
If you’re nervous about pausing a winner, lean toward 2× as your threshold for the first 1-2 cycles, then tighten to 1.5× once you have confidence.
Edge case: thin-data winners
A keyword with 1-2 historical conversions and a $200 cost/conv shouldn’t be auto-paused at 1.5× threshold. Two data points is too thin to call. Add a minimum-conversions check:
Only apply the 1.5× rule to keywords with 5+ historical conversions. Below that, the cost/conv is too noisy.
For keywords with 1-4 conversions and a high cost/conv: flag, monitor, decide in 2-4 more cycles.
Bucket 3: Pause non-converters past their fair shot
The decision rule
Any keyword with zero conversions whose total spend exceeds the benchmark cost/conv, pause it.
The logic: a non-converting keyword that’s spent more than the benchmark cost/conv has effectively “afforded” a conversion at the campaign’s average rate without producing one. That’s structural underperformance, not thin data.
Procedure
Change filters:
- Date range: All time
- Keyword status: Enabled
- Conversions < 1 (i.e., zero conversions)
- Sort by Cost (descending)
For each keyword from the top:
- If total cost > benchmark cost/conv → PAUSE
- If total cost ≤ benchmark cost/conv → keep, hasn’t had its fair shot
Worked example with $67.50 benchmark
| Keyword | Cost | Conv | Decision |
|---|---|---|---|
"solar installation cost" | $245 | 0 | PAUSE (245 > 67.50) |
[solar grants] | $120 | 0 | PAUSE (120 > 67.50) |
"solar tax credit" | $48 | 0 | Keep, under benchmark |
[solar leasing options] | $32 | 0 | Keep, under benchmark |
Two pauses: 120 = $365 of waste removed. Reallocated to converters, that’s ~5 expected conversions at the benchmark rate.
Why this beats that rule
- In a 60. The agency rule with a $67.50 benchmark would also pause around the same threshold, but adapts if the benchmark is lower.
- In a 600. The course rule says “wait.” The agency rule with a 67.” Way more aggressive, but appropriate, because in a 200-400), so the rule still kicks in at the right point for that niche.
The benchmark adapts. The fixed click count doesn’t.
Bucket 4: Pause keywords with impressions but no clicks
The decision rule
Any keyword with 20+ impressions and zero clicks, pause it.
Procedure
Change filters:
- Date range: All time
- Keyword status: Enabled
- Clicks < 1
- Impr. > 20
For every keyword in the filtered list: PAUSE. No further analysis needed.
Why this bucket exists
20+ impressions with zero clicks is a CTR / Quality Score signal. The ad isn’t compelling for whatever this keyword triggered. Possible causes:
- Ad copy mismatch: the keyword’s intent doesn’t match what the ad promises
- Wrong ad group: the keyword should be in a different ad group with more relevant copy
- Low Quality Score: the keyword is showing up in low ad positions where users don’t see it
- Searcher intent mismatch: the searches are off-target (a keyword that’s “close enough” semantically but clearly not what users want)
In all four cases, the right move is to remove the keyword. Letting it sit hurts campaign-level Quality Score and doesn’t produce traffic anyway.
Why 20 impressions, not 50 or 100?
20 is the agency’s calibrated minimum for “Google has shown this enough to know nobody clicks.” Below 20 impressions, the keyword may just not have had its shot yet. Above 20, the absence of clicks is signal, not noise.
The previously-converting exception (applies across all 4 buckets)
Don’t pause a keyword that converted historically but is in a recent slump.
When the exception kicks in
Before pausing any keyword from Buckets 2-4, check the keyword’s all-time conversion count. If it has 15+ historical conversions, it’s a proven winner that may be in a temporary cold streak.
What to do instead of pausing
- Flag it. Add a comment in the optimization log:
2026-05-06 weekly | flagged keyword "X" cost/conv $130 (1.9× benchmark) | 22 historical conv, in 30-day cold streak | give 2 more cycles before pausing - Monitor for 1-2 more weekly cycles. If it warms back up, great, you saved a winner. If it stays flat, then pause.
- Don’t lose the historical data. When you do eventually pause, mark the keyword “Paused” rather than deleted.
Why historical winners get the benefit of the doubt
A keyword with 15+ conversions has demonstrated repeatable conversion intent. A 30-day cold streak might be:
- Seasonal (HVAC keywords cold in October-April)
- Market shift (a competitor running aggressively in your geo for the month)
- Ad fatigue (your ad copy went stale; refresh the copy in the monthly review)
- Landing page issue (run the LP report check, Step 7 of weekly)
Pausing a proven winner permanently before checking these is throwing away a known good asset for a temporary cause.
Threshold of 15: why not 5 or 50?
15 is the agency’s calibration:
- Below 15: the conversion track record is thin enough that “winner” is uncertain. Apply the cascade rules normally.
- 15-50: real winner. Apply the exception.
- 50+: proven star. Definitely apply the exception. Investigate the cold streak before any pause.
How to actually pause in Google Ads
For each keyword you’ve decided to pause:
- Click the keyword row in the keyword table
- Click the status dropdown (currently shows “Enabled”)
- Change to Paused
- Save
Or batch-pause:
- Check the boxes next to multiple keyword rows
- Click the Edit dropdown above the table
- Choose Change status → Pause
- Confirm
Always pause, never delete. Delete throws away the historical data permanently. Pause leaves it queryable for future reference (especially the previously-converting check on subsequent cycles).
Logging
After completing the cascade, log changes in clients/<client>/optimization-log.md. Format:
2026-05-06 weekly | benchmark cost/conv: $67.50 (8 enabled converting keywords)
2026-05-06 weekly | bucket 2 paused: "solar company financing" | cost/conv $130 (1.9× benchmark)
2026-05-06 weekly | bucket 3 paused: "solar installation cost" | $245 spend, 0 conv
2026-05-06 weekly | bucket 3 paused: [solar grants] | $120 spend, 0 conv
2026-05-06 weekly | bucket 4 paused: "solar quote near me" | 28 impr, 0 clicks
2026-05-06 weekly | flagged "solar repair Sacramento" | cost/conv $145 BUT 22 historical conv, 30-day cold streak | give 2 more cycles
The benchmark line at the top makes future-you’s life easy: when you re-read the log in a month, you can see the campaign’s CPA trajectory and whether the cascade is producing results.
Common questions
”What if the benchmark is unusually low this cycle (e.g., one keyword had a hot week)?”
If the benchmark seems off, look at the conversion volume. If 60% of conversions came from one keyword in the last 7 days, that keyword is dominating the benchmark. Either:
- Use the previous month’s benchmark as a sanity check
- Wait one cycle and re-establish
The benchmark is a tool, not a religion. Use judgment.
”What if I pause too aggressively and lose volume?”
Run the cascade conservatively for the first 1-2 cycles (use 2× threshold instead of 1.5×, use higher historical-conversion bar for the exception). After you trust the procedure, tighten to the agency defaults.
If you ever pause a keyword and conversion volume drops noticeably the following week, un-pause it. The “Paused” status is reversible.
”What about Smart Bidding campaigns?”
The cascade still applies. Smart Bidding doesn’t pause keywords for you, it bids algorithmically given the keywords you’ve left enabled. Pausing a keyword that’s bleeding budget removes it from the bidding algorithm’s input set, which usually improves Smart Bidding performance.
The one nuance: under Smart Bidding, “expensive winners” (Bucket 2) might be the algorithm doing what you told it to (hit Target CPA = 100 and a keyword is converting at $130, the algorithm thinks it’s trying to optimize, but the keyword’s cost is structurally above the target. Pausing it lets the algorithm find better-fit traffic.
”Should I run the cascade more often than weekly?”
The cascade itself is weekly. The daily review (optimization-daily.md) handles same-day search-term negation. Running the cascade daily is overkill, keywords don’t shift status that fast.
Back to: optimization-weekly.md