Case studyEcommerce8 weeks
The Performance Max structure we put on every account over $50K a month
One campaign for everything is the problem. Here's the build that replaced it.
- PMax + Shopping ROAS
- 2.1x → 2.9x
- Revenue
- +38%
- Ad spend
- Flat
- High-margin SKU share of spend
- 41% → 63%
Why one Performance Max campaign stops scaling
Performance Max is good at one thing: optimising toward the goal you give it across everything inside the campaign. The trap is that "everything inside the campaign" usually means your whole catalogue, every margin, every intent, lumped together. So the bidder sees a clearance item at 12% margin and a hero product at 60% margin as the same opportunity because they convert at a similar ROAS. It averages, and average is where scale goes to die.
This account had one PMax campaign holding the entire catalogue, brand traffic bleeding in and inflating the reported ROAS, and budget drifting to whatever happened to be cheapest that week. It was profitable enough to leave alone, which is exactly why it had been left alone. It had plateaued at 2.1x.
The shape of the problem
One campaign, no control
- Every SKU in a single PMax, margins from 8% to 60% averaged into one target
- Brand traffic inflating the reported ROAS
- Budget drifting to whatever was cheapest, not most profitable
- No visibility into the Search, Shopping, and Display split
Tiered, fed, and visible
- Three campaigns split by margin tier, each with its own tROAS
- Brand excluded at the account and campaign level
- Custom labels routing every SKU to the right tier
- A channel script showing exactly where spend lands
The build, step by step
This is the full structure. Nothing here is secret to us, it's just rarely done properly.
Seven moves that turned the black box back into a system
01
Split into campaigns by margin tier
Three PMax campaigns: high margin we want to scale, mid margin we run balanced, and low or clearance margin we protect with a high tROAS. Each gets its own budget and its own target so the bidder optimises each pool on its real economics.
02
Theme asset groups by category inside each campaign
Asset groups organise creative and search themes, not budget. One asset group per coherent product set so the images, headlines, and search themes actually match what's being sold. Mismatched asset groups teach the system the wrong associations.
03
Build a supplemental feed with custom labels
custom_label_0 through 4 carry margin tier, bestseller flag, price band, season or promo, and new-versus-evergreen. This is the wiring that lets you route SKUs into the right campaign without editing your store export.
04
Exclude brand at both levels
Account-level brand exclusion list plus a campaign brand-term list, so PMax stops claiming branded conversions and the reported ROAS reflects real prospecting.
05
Feed real audience signals
Past purchasers, high-value customer lists, and your best converting search audiences as signals. Signals don't restrict PMax, they tell it where to start looking, which shortens the learning phase.
06
Run a feed-only layer for the long tail
A campaign or asset group with only the feed and no custom assets behaves like Smart Shopping and surfaces thousands of SKUs you'll never build creative for. It catches the long-tail demand your asset-rich heroes don't.
07
Pull the channel split with a script
PMax hides whether your money is going to high-intent Shopping and Search or cheap Display impressions. A script surfaces it. If too much is landing on Display, your asset and audience signals need work.
The custom-label map (your feed wiring)
| Label | What it holds | How we use it |
|---|---|---|
| custom_label_0 | Margin tier: A / B / C | Routes each SKU into the right campaign |
| custom_label_1 | Bestseller flag | Priority products inside an asset group |
| custom_label_2 | Price band | Separates AOV bands for cleaner bidding |
| custom_label_3 | Season / promo | Isolates seasonal stock from evergreen |
| custom_label_4 | New vs evergreen | Gives new SKUs their own learning space |
Set this once in a supplemental feed and the whole structure becomes drag-and-drop.
The three-campaign split
| Campaign | Products | tROAS | Role |
|---|---|---|---|
| PMax — High margin | custom_label_0 = A | Lower target | Scale hard, this is where growth lives |
| PMax — Mid margin | custom_label_0 = B | Balanced target | Steady volume and contribution |
| PMax — Low / clearance | custom_label_0 = C | High target | Protect margin, don't subsidise junk |
| Feed-only long tail | Everything else | Account average | Discovery and catalogue depth |
Eight-week results
Before and after
| Metric | Before | After (week 8) |
|---|---|---|
| PMax + Shopping ROAS | 2.1x | 2.9x |
| Revenue | Baseline | +38% |
| Ad spend | $70K / month | $70K / month |
| High-margin SKU share of spend | 41% | 63% |
Same budget. The bidder just stopped treating a clearance mug like a hero sofa.
“I'd been told PMax was a black box you just feed and pray. The structure made it a system again. We can point at which tier is carrying the month.”
Questions we get asked about this
How many Performance Max campaigns should I run?
As many as you have distinct margin or strategy tiers, and no more. For most accounts that's two or three: high margin you want to scale, low margin you want to protect, and sometimes a seasonal or new-product push. The mistake is one campaign (no control) or twenty (no learning). Each campaign needs enough conversions to learn, so don't split past the point where every campaign clears roughly 30 conversions a month.
Should I segment with asset groups or separate campaigns?
Both, for different jobs. Campaigns separate by budget and target, so margin tiers and brand-versus-non-brand live at the campaign level. Asset groups separate by theme inside a campaign so creative and search themes match the product set. Don't try to control budget with asset groups, you can't. Budget lives on the campaign.
Should I use feed-only Performance Max?
Yes, for catalogue depth. A campaign or asset group with only the feed and no images, video, or text behaves like Smart Shopping and surfaces your long tail without you building creative for thousands of SKUs. Run it alongside asset-rich campaigns for your heroes, not instead of them.
How do I see what PMax is actually doing?
Use the channel and placement scripts plus the asset-group and listing-group reports. PMax hides the Search, Shopping, and Display split by default. A simple script pulls it so you can see whether budget is going to cheap Display impressions instead of high-intent Shopping and Search. If it is, your asset signals and audience signals need work.
Frameworks behind this case study
Where these numbers come from
Illustrative example. The campaign structure shown is the exact build we deploy. The figures are representative of what it produces for accounts in this spend band over an eight-week rebuild, not an export from one client's account.
More breakdowns on the daily newsletterWant this structure on your account?
Free 30-minute audit. No deck. No pitch.
We screenshare your Google Ads, GA4 and Shopify, run the same audit playbook this account came out of, and leave you the document whether you become a client or not.
Book the call