Scaling Playbook7 min read

How we cut a jewelry brand's CPA 38% in 9 weeks without touching bids

A €120k/month jewelry brand was leaking spend to junk queries. The fix was three feed changes and one campaign restructure. Zero bid changes, zero new spend.

A jewelry brand came to us in early Q1. €120k/month in Google Ads spend, blended ROAS sitting at 1.8, CPA up 41% year over year. The previous agency had been "optimizing bids" for six months. The numbers kept getting worse.

Nine weeks after we started, CPA was down 38%, ROAS was at 2.6, and spend was holding flat. We did not touch a single bid.

This is what we actually did.

CPA

-38%

ROAS

+44%

Conversions

+63%

Bid changes

0

Week 0 to Week 9, EUR 120k per month, zero new budget

The setup

The brand sells fine jewelry, mostly 14k and 18k pieces, average order value around €380. Catalog of about 480 SKUs. Most spend was in two Performance Max campaigns and a Standard Shopping campaign that was supposed to be a "feed catcher."

The agency before us had been running tROAS at 280%, raising it 5% every two weeks when ROAS slipped. By the time we got the account, tROAS was at 340% and the algorithm had basically stopped bidding. Impressions dropped 60% in the previous 8 weeks. The team blamed Q4 cooldown.

Q4 cooldown was real but it explained 15% of the drop, not 60%. The other 45% came from somewhere else.

What we found in the search terms

We pulled 90 days of search terms across all three campaigns and clustered them. About 22% of total spend was going to two query buckets:

  1. Generic gold queries ("gold ring", "gold chain", "gold bracelet"). Lots of impressions, decent CTR, conversion rate under 0.4%. The brand sold solid gold at premium prices and was being shown to gold-plated shoppers.
  2. Wrong-metal queries. Pieces tagged generically were matching to silver and gold-plated searches. Bouncing back at 92%.

Neither bucket was winning. Both were eating budget and dragging the auction signal toward audiences that did not buy. The algorithm interpreted that as "your products do not convert" and pulled back impressions.

The previous agency was raising tROAS in response, which made the algo even more conservative, which dropped impressions further. A doom loop.

What we actually did

Move 1: Title rewrites for the top 80 SKUs

We rewrote every title on the top 80 products by impression share. Old format: "14k Gold Necklace - Madeleine". New format: "14k Solid Gold Necklace, Madeleine, 18 inch, 4.2g, Womens".

Specs in the title do two things. First, they kill match to "gold-plated" queries because Google reads "solid gold" as a stronger signal than the inferred meaning of "14k". Second, they let us match to long-tail intent we want, like "18 inch solid gold necklace women", which converts at 4x the rate of "gold necklace."

Time: 6 hours of writing. We used the search terms report as the source for the keywords, not what we thought sounded good.

Move 2: Three custom labels

We added three custom labels to the entire feed:

  • margin_band: high (over 55%), mid (35-55%), low (under 35%)
  • velocity_30d: hot, mid, slow, dead
  • metal_type: solid_14k, solid_18k, plated, silver

The metal_type label was the unlock. We could now segment in PMax by listing group and force the algorithm to stop mixing solid gold with plated. Two listing groups inside one campaign, each getting its own asset group, each treated as a different audience.

Move 3: Restructure into a 3-tier scaffold

We split the spend across three campaigns by price/margin:

  • Tier A: top 60 products by margin and velocity. ~€60k/month.
  • Tier B: rest of the active catalog. ~€45k/month.
  • Tier C: tail (everything below €100 AOV or velocity = slow). ~€15k/month.

This is not a hack. It is how PMax wants to be fed. Splitting prevents the algorithm from cross-subsidizing your worst products with your best.

Move 4: Drop tROAS back to 220%

This was the only "bid" change and it was undoing damage, not making a new bet. The algorithm had been starved. We dropped target ROAS from 340% back to 220% to give it permission to bid again. Within 5 days impressions doubled.

We then let it stabilize for 14 days at 220% before nudging it back up to 260% over the following 3 weeks as efficiency improved.

If you are counting, that is technically a bid change. We are not counting it because we did it once, in the opposite direction the previous agency was going, to undo a self-inflicted wound. Real bid optimization is what you do after the structure is right. We were unblocking, not optimizing.

What the numbers said at week 9

MetricWeek 0Week 9Delta
Spend€118k€120k+1.7%
ROAS1.82.6+44%
CPA€98€61-38%
Conversions1,2041,968+63%
Impr. share (Tier A)38%71%+87%

Spend held nearly flat. Conversions went up 63%. The CPA drop is mostly the conversion volume increase against the same spend.

The Tier A impression share is the metric we care about most. It says the algorithm is now bidding aggressively on the products that should carry the brand.

What we would do differently

Two things, looking back:

  1. We waited too long on the tROAS reset. We could have done it in week 1 instead of week 3 once the feed work was deployed. The feed changes alone would have started to rebalance the auction. We were being cautious. In hindsight, the delay cost the brand about 9 days of underperformance.
  2. We should have set up a proper price tier split sooner. The 3-tier scaffold went live in week 4. If we had done it in week 2, Tier A would have ramped faster and the second-half results would have been stronger.

Both of these are lessons we have rolled into our process for new accounts.

When this play fails

This worked because the brand had real margin, a clean product catalog (just disorganized in the feed), and a decent assortment that gave the algorithm something to bid on. It would not have worked if any of those were broken.

If your AOV is under €40, your margins are under 25%, or your catalog is under 50 SKUs, this is not your play. The math gets too thin and PMax does not have enough surface area to learn against. You need a different motion entirely.

If you want to see more results across fashion, home decor, and jewelry, the patterns repeat. Different brand, different category, same operator-level work in the feed and the structure. If you want us to run it for you, our pricing scales with your spend and we are direct about who we are and are not a fit for.

The bid strategy is the last thing we touch on a new account. It should be the last thing you touch too.