Quarra — Google Ads Campaign Overhaul
Overview
During the 2026-03-04 weekly call, the Quarrowstone Google Ads account was diagnosed as producing zero conversions across all campaigns. The root causes were identified and corrected in a single session — a combination of manual changes and live AI-assisted fixes via Claude Code connecting to the Google Ads API.
Related meeting: [1]
Client: [2]
Root Causes
1. Wrong Bidding Strategy
Campaigns were set to Maximize Conversions despite having no conversion history. Google's algorithm cannot optimize for an event that has never occurred. The correct approach for a new or cold account is:
Start with Maximize Clicks for 60–90 days to accumulate conversion data, then switch to Maximize Conversions once the algorithm has signal to work with.
2. Budgets Too Low to Generate Meaningful Activity
Search campaigns were set to $7/day against a ~$4 CPC, yielding roughly 1–2 clicks per day — not enough volume to build conversion history or exit the learning phase.
3. Conversion Goal Bloat (16 Goals → 2)
The account had 16 conversion actions, many of them duplicates or auto-created by Google. With so many goals active as biddable actions, the bidding algorithm had no coherent signal. Claude Code identified and fixed this, reducing biddable goals to 2 meaningful actions:
- Contact form submission (website)
- Lead form submission (Google-hosted)
All other actions (page views, email clicks, phone calls from website) were set to Observation only.
4. Keyword Bloat and Irrelevant Traffic
- 200 keywords across all ad groups, but only 10 were generating any traffic
- Broad match was triggering on completely irrelevant queries: bronze statues, marble floor cleaner, granite countertop repair, wax statue maker, life-size custom dog statue
- Zero negative keywords on the two largest campaigns
- Shared negative lists appeared inherited from unrelated accounts
5. Brand Terms Wasting Budget
Brand searches (e.g., "Quarrowstone") were running across all three active campaigns. Brand clicks cost ~$0.30 CPC vs. ~$5.00 for non-brand — but those clicks would have come organically anyway. A dedicated brand campaign with a low CPC cap is the correct structure.
6. Low Quality Scores
Multiple keywords scored 2–4 out of 10, indicating poor landing page relevance. This suppresses ad rank and raises effective CPC. Fix requires landing page improvements from the client (Carly).
7. Optimization Score Below 80
Google penalizes accounts with an optimization score under 80. The account was at 78 before this session.
Changes Made
Bidding Strategy
| Campaign | Before | After |
|---|---|---|
| Search (×3) | Maximize Conversions | Maximize Clicks, $4 max CPC |
| Retargeting | (unchanged) | Budget reduced to $10/day |
Budget Adjustments
| Campaign Type | Before | After |
|---|---|---|
| Search campaigns (×3) | $7/day each | $16/day each |
| Retargeting | — | $10/day |
Rationale: $16/day ÷ $4 CPC = ~4 clicks/day per campaign — minimum viable volume to start building conversion history.
Conversion Goals
- Reduced from 16 biddable actions → 2 biddable actions
- Remaining actions set to Observation
- Applied via Claude Code through the Google Ads API
Negative Keywords (Claude Code)
Claude Code added 839 negative keywords across all active campaigns, organized into categories:
| Category | Count | Examples |
|---|---|---|
| Broad match negatives | ~68/campaign | residential, bronze, fiberglass, cleaning, for sale, buy, shop |
| Competitor exact match | ~95 | competitor brand names |
| Fine art irrelevant | ~71 | art foundry, metal sculpture, wood sculpture |
| Restoration-specific | ~180 | restoration queries unrelated to Quarrowstone's offering |
| Brand terms (as negatives on non-brand campaigns) | 4 | Quarrowstone brand variants |
Before: ~50 negatives. After: ~200+ per campaign.
Keyword Cleanup
- Removed 10–13 irrelevant exact match keywords from ad groups
- Broad match expansion identified as the primary source of garbage traffic (not the keyword list itself)
- 70 of remaining 104 keywords have zero impressions — left in place for now pending further data
Optimization Score
- Raised from 78 → 83 by applying Google's recommendations:
- Added Responsive Search Ads
- Removed redundant keywords (Google-flagged)
Remaining Action Items
- [ ] Create a dedicated brand campaign — move all brand terms out of non-brand campaigns; set low CPC cap (~$0.30–0.50) — owner: Gilbert
- [ ] Email Carly re: landing page quality — Quality Scores of 2–4 require landing page improvements to fix; document specific ad groups affected — owner: Gilbert
- [ ] Verify retargeting audience list — display retargeting campaign had zero impressions; likely missing or undersized audience list — owner: Gilbert
- [ ] Monitor spend next week — new daily budget ceiling is ~$58/day ($1,700/mo theoretical max); confirm actual spend is reasonable — owner: Gilbert
- [ ] Set up Google Ads-only Claude Code workspace — isolate Google Ads MCP tools into a dedicated project; configure cron jobs for recurring audits — owner: Gilbert
- [ ] Post changes report to Slack/Drive — Claude Code can generate a summary; Mark to post — owner: Mark
Key Principles Illustrated
New Campaign Bidding Protocol
Never launch a campaign with Maximize Conversions. Always start with Maximize Clicks + max CPC cap for a minimum of 60 days. Switch to Maximize Conversions only after accumulating conversion history.
See also: [3]
Optimization Score Maintenance
Keep Google Ads optimization score ≥ 80 at all times. Scores below 80 result in algorithmic penalties. Review and apply relevant recommendations weekly.
Conversion Goal Hygiene
Audit conversion actions on any account showing zero conversions. Auto-created and duplicate goals are a common silent failure mode — they dilute the bidding signal without surfacing as an obvious error.
Negative Keyword Scale
839 negatives were added in a single session via Claude Code. Manual negative keyword management at this scale is impractical; AI-assisted audits via the Google Ads API are the correct approach for thorough coverage.
AI Tooling Note
This overhaul was partially executed live by Claude Code connected to the Google Ads API via MCP server. Claude Code:
1. Pulled all campaign, keyword, and conversion data
2. Diagnosed issues and ranked them by severity
3. Executed API calls to fix conversion goals, add negatives, and remove irrelevant keywords
4. Generated a written summary of all changes made
Gilbert is being onboarded to run this workflow independently. Next step is a dedicated Google Ads workspace with cron-scheduled audits.
See also: [4]