Open this doc once a week. Run the steps. Close it. Total time: 30 to 60 minutes per campaign.
This doc is the 80/20 checklist. Every step has a one-sentence definition and (where it matters) a link to a deep-dive sub-doc with UI clicks, worked examples, and edge cases. If you’ve done a step before, the brief is enough. If you haven’t, click the deep-dive link.
The job, in one sentence
Catch drift early, prune budget bleeders, surface slow-burn patterns the daily review missed, and (after Week 4) harvest new high-intent keywords. That’s the rhythm.
When to do this
- Same day every week (Monday mornings are the agency default)
- Bidding state matters only for Steps 9-10. The rest are universal.
- Continues forever, no end date
Before you start
- The daily rhythm (optimization-daily.md) has been running for the last 7 days
- 30 to 60 minutes blocked on the calendar
- Use the saved column set from onboarding (configured in Phase 8 step 6 of the onboarding playbook)
Step 1: Pull the week’s data
Date range: Last 7 days. Duplicate view with Previous 7 days for week-over-week comparison. Sort keyword and search-terms tables by Cost (descending) so the worst bleeders surface first.
Step 2: Pause underperforming keywords
[Agency procedure] Run the 4-bucket cascade in order:
- Filter All-time + Enabled + Conversions > 0; note the “Total: Filtered Keywords” cost/conv. That’s the benchmark.
- Pause converting keywords whose individual cost/conv is ≥1.5× the benchmark.
- Filter Conversions < 1, sort by cost; pause non-converters whose total spend exceeds the benchmark cost/conv.
- Filter Clicks < 1 + Impr. > 20; pause all.
Safety check: before pausing any keyword from Buckets 2-4, check its all-time conversion count. If it has 15+ historical conversions, give it 1-2 more cycles before pausing (previously-converting exception).
📖 Deep dive: pause-keyword-cascade.md, worked numbers, why 1.5×, edge cases, UI clicks.
Step 3: Weekly search-term cross-cut
Pull Search Terms (Last 7 days, sort by Cost descending). Scan for slow-burn patterns the daily review missed: theme drift, geographic clustering, wrong-ad-group routing, sub-target audiences. Add negatives at the right level using the daily-doc’s Step 3-4 rules.
📖 Where to find search terms: Insights and Reports → Search Terms (or scope to a specific keyword via the keyword’s dropdown) 🔁 Related routine: optimization-daily.md for the same-day-negation procedure on individual terms
Step 4: Campaign-level CPA drift check
Open campaign Overview. Compare this week’s Cost / Conv. to last week’s.
Red flag rule: if campaign-level CPA jumped 20%+ week-over-week with no obvious explanation, investigate. Common causes: bad search-term cluster, increased competition (check Auction Insights), landing page issue, broken conversion tracking.
Step 5: Ad-group-level CPA drift check
Drill into ad groups. Sort by Cost / Conv. (descending).
Red flag rule: any ad group at 2× the campaign average that wasn’t there last week. Drill into the ad group’s search terms, keywords, ad copy, and landing page. Persistent 2× ad groups (multi-week) are structural problems for the monthly review; new 2× ad groups are drift signals worth investigating same-week.
Step 6: Add new converting keywords
[Agency procedure] Skip on weeks 1-3. From Week 4+, run the 3-step harvest:
- Filter Search Terms: All time + Conversions > 0 + Added/Excluded: None; sort by Conversions descending.
- Review and save terms that still match the client’s offering, geography, and intent.
- Add as exact match only to the right ad group (intent-matched, not just word-overlap-matched).
📖 Deep dive: search-term-harvest.md, filter mechanics, why exact-match-only, ad-group placement decisions, edge cases.
Step 7: Landing page report spot-check
Where: Insights and Reports → Landing Pages.
Check: Mobile-Friendly Click Rate, Valid AMP Click Rate, conversion rate per URL, all stable vs last week. If anything dropped, open the URL in incognito on a real mobile device, submit a test form, confirm lead alert email lands.
Step 8: Device performance spot-check
Where: Campaign view → When and Where Ads Showed → Devices.
Watch for: a device suddenly converting at half its prior rate, cost shifting hard toward a device without conversion gain, CPA spiking 30%+ vs prior week. Note any drift; the fix happens in optimization-monthly.md.
Step 9: Max CPC cap validation (Maximize Clicks only)
Skip entirely on Smart Bidding campaigns, the cap is ignored under Smart Bidding.
Pull the 14-day Average CPC trend. Re-check Keyword Planner’s Top of Page Bid range for the campaign’s top 3-5 expensive keywords (filtered to the campaign’s geo). Compare to the current cap.
Decision rule: new cap = 14-day peak CPC + 2-3 per cycle.
📖 Deep dive: max-cpc-cap-validation.md, fence-rental worked example, edge cases (impression-share-limited, new competitor), post-adjustment monitoring.
Step 10: Ad schedule for budget pacing
If CPL is drifting up week-over-week AND the daily cap is hitting before end-of-day on most days, narrow the schedule (remove dead days/hours) or apply percentage bid adjustments.
Decision rule by bidding state:
- Maximize Clicks: percentage bid adjustments (+10-30% peak, -10-30% dead) OR hour/day removal both work
- Smart Bidding: only hour/day removal works; percentage adjustments are ignored
📖 Deep dive: ad-schedule-budget-pacing.md, the 48/day Mon-Fri math example, decision tree, edge cases (24/7 emergency clients, undersized budget + Smart Bidding).
Step 11: Document the week’s changes
Append to clients/<client>/optimization-log.md. Format: <date> weekly | <change> | <reason>. Example:
2026-05-06 weekly | benchmark cost/conv: $67.50
2026-05-06 weekly | bucket 2 paused: "solar company financing" | 1.9× benchmark
2026-05-06 weekly | added [emergency AC repair Sacramento] (exact) to ad group HVAC Emergency
2026-05-06 weekly | raised Max CPC cap $24 → $28 | peak CPC hit $30
The log makes month-over-month and quarter-over-quarter pattern recognition possible.
Watch out for
- 1 to 3 high-leverage changes per week max. Optimization compounds slowly; over-editing makes attribution impossible.
- Pause keywords; never delete. Delete throws away historical data.
- Don’t apply percentage bid adjustments on Smart Bidding campaigns. Ignored. Use exclusions.
- Don’t tune Max CPC by more than $2-3 per cycle. Big swings destabilize the auction.
- Daily-cap budget burn: if hitting cap before end-of-day on most days, decision tree → raise cap (with client approval), narrow schedule (Step 10), or tighten Max CPC (Step 9).
Done when (every week)
- ✅ Last 7 days vs Previous 7 days view set up; sorted by cost
- ✅ Pause cascade run on all 4 buckets; previously-converting exception applied
- ✅ Weekly search-term cross-cut done; slow-burn patterns negated
- ✅ Campaign-level CPA drift checked
- ✅ Ad-group-level CPA drift checked
- ✅ Search Terms harvest run (Conv > 0, Added/Excluded: None); good fits added as exact match (Week 4+ only)
- ✅ Landing page report spot-checked
- ✅ Device performance spot-checked
- ✅ Max CPC cap re-validated (Maximize Clicks only)
- ✅ Ad schedule reviewed against budget pacing
- ✅ Week’s changes logged
Where to go from here
- Tomorrow morning: optimization-daily.md
- End of month: optimization-monthly.md (use variant matching your bidding state)
- When Gate 2 (Transition Readiness) goes green: optimization-the-switch.md
Deep-dive sub-docs (in optimization-weekly/)
- pause-keyword-cascade.md, Step 2 deep dive
- search-term-harvest.md, Step 6 deep dive
- max-cpc-cap-validation.md, Step 9 deep dive
- ad-schedule-budget-pacing.md, Step 10 deep dive