Client identity and campaign names withheld per NDA.
Client identity and campaign names withheld per NDA.
The feed titles were SKU codes and internal model references. The query data showed low impression share on high-intent product searches: the searches that include model name, compatibility, and finish. Those were the searches we needed to be on.
More than 20 campaigns had accumulated over years, with no defined boundaries between them. Brand queries were triggering general campaigns. Shopping and Performance Max were eligible for the same product searches. At $1.6M in spend, that complexity was no longer easy to absorb.
The sequence mattered: feed first, then campaign structure, then negative-keyword governance, then audience signals, then bid targets. Over seven months, the account moved from 2.59× on the prior ten-month period to 4.14× on the same spend. $6.6M in tracked revenue.
Product titles written for the warehouse, not the buyer
SKU codes, model references, internal naming: none of it matched what buyers type into Google. High-intent searches weren't triggering the right products. Lower-intent queries were.
Multiple campaign types eligible for the same demand
With 20+ campaigns and no query boundaries between them, Shopping, Search, and Performance Max were all eligible for the same searches. Budget distributed itself without any signal about which campaign was the right fit.
Performance Max launched without audience signals
PMax had no Customer Match data connected. No purchase history, no CRM data. The algorithm started from scratch on every query. The client had a full, segmentable customer list that had never been linked to the ad account.
ROAS targets set to aspirational numbers, not account history
Bid targets were set to what the client wanted to hit, not what the account had been doing. Chasing an unreachable number restricted spend, reduced impressions, reduced conversions, and starved the algorithm of data.
If you recognized your account in those findings, a diagnostic session surfaces the same structural gaps and gives you a prioritized plan to address them.
Three layers, defined query boundaries. Brand Defense owns branded search. Core Shopping handles structured product demand. Performance Max handles broader discovery, anchored by audience signals. Budget flows to the right layer for each query type.
| # | Campaign | Type | Issue Identified |
|---|---|---|---|
| 01 | Brand KW | Search | Overlap with Search Gen on branded queries |
| 02 | Search Brand | Search | Duplicate branded coverage, no negative wall |
| 03 | Search Gen | Search | Eligible for branded queries; no exclusions |
| 04 | Shopping 1 | Shopping | Undefined role, eligible for PMax coverage |
| 05 | Shopping 2 | Shopping | Same product coverage as Shopping 1 + 3 |
| 06 | Shopping 3 | Shopping | Third Shopping with no query boundary |
| 07 | PMax 1 | Perf. Max | No Customer Match; competing with Shopping |
| 08 | PMax 2 | Perf. Max | Duplicate PMax, no audience signal |
| 09 | PMax 3 | Perf. Max | Third PMax; conversion volume fragmented |
| 10 | DSA | Dynamic Search | Overlapping with existing Search campaigns |
| 11 | YouTube | Video | No defined role relative to other campaigns |
| 12 | Display | Display | Unmeasured impact; no placement controls |
| 13+ | 9 additional campaigns with no defined roles documented | ||
| Tier | Campaign Type | Role | Budget Priority | Key Exclusions |
|---|---|---|---|---|
| Tier 01 Brand Defense | Search | Capture brand-name searches; protect branded demand from generic campaigns | Secondary | Non-brand terms excluded via negative list |
| Tier 02 Core Shopping | Shopping | Structured product groups covering high-intent model-specific queries | Primary | Brand terms and PMax overlap excluded |
| Tier 03 Performance Max | Perf. Max | Broader discovery anchored by Customer Match purchaser signals | Supporting | Brand exclusion applied; Shopping query overlap managed via campaign priority |
Each layer depended on the one before it working correctly. Starting with campaign structure before the feed was accurate would have produced structurally clean campaigns pointing at the wrong queries.
Titles rebuilt to lead with category, compatibility, and brand: "iPhone 16 Case Clear MagSafe Compatible" instead of "SKU-AJ7729-IP16-CLR." Impression share on high-intent queries moved within the first week.
Brand Defense, Core Shopping, Performance Max: each with a clear job and defined query ownership. Individual campaigns were structured within those roles. The logic changed, not just the count.
Negative keyword lists for each tier enforced the boundaries. Each campaign owns its query type. Budget flows accordingly.
The CRM had never been linked to the ad account. We uploaded verified purchaser history as Customer Match signals. Performance Max finally had a real reference point for who it was looking for.
We pulled 90-day conversion baselines and set targets against those. Once realistic, the bidding system started spending. Conversions followed.
The feed is the first thing we look at in any Google Shopping account. Most accounts we take over have had years of bid tuning on top of a feed that was never fixed.
The three tiers describe campaign roles, not raw campaign count. Within each tier, individual campaigns carry a defined query boundary and do not overlap with the others. Every campaign now has an exclusive territory.
The feed rewrite changed which queries the products were eligible for, and that determined everything downstream: campaign structure, bid efficiency, and eventually revenue. The structural changes had no meaningful effect on spend; the improvement came entirely from where that spend went.