- You are running Advantage+ Shopping and seeing a great ROAS, but notice that the number of new customers is not keeping pace
- You suspect that a large part of your "performance" budget is actually going to people who already know and buy from you
- You are hitting a growth ceiling, even though the account looks healthy on paper
- You want to know how to structure audience exclusions without harming Advantage+ Shopping's ability to learn
Advantage+ Shopping is built to find conversions as efficiently as possible. That is its strength — and its pitfall.
If you don't actively exclude existing customers, the algorithm will naturally spend part of the budget on them. They convert easily, they already know the product, and they drive up the ROAS figure. But that conversion would, in all likelihood, have happened anyway — organically, via email, or because the customer was already planning to purchase again.
The result is an account that looks healthy on the surface but is actually eating itself from the inside: an increasing share of "performance" is, in reality, money subsidizing a purchase that was already on its way.
This is not a flaw in the algorithm. It is a consequence of the fact that Advantage+ Shopping, by default, optimizes for the easiest conversion — not the one most valuable for your growth.
The solution starts by defining who an "existing customer" actually is — and it is more nuanced than just a purchase list.
Define your warm audiences at multiple levels
- Website retargeting audiences (30, 60, and 180 days) — people who have shown interest but haven't necessarily purchased
- Engagement audiences — IG and FB video views, page engagers, people who have interacted with the profile without taking action
- Historical buyers — the actual customer list, typically uploaded directly from Klaviyo or your CRM
These three levels must be treated differently. A 180-day retargeting audience is not the same as a customer who bought three days ago — and your exclusion strategy should reflect that.
Set a hard budget cap on the warm segment
Instead of letting the algorithm find the balance itself, set a fixed allocation. A common structure is 90% of the budget for cold prospecting and 10% for warm retargeting — clearly named in the campaign structure so there is never any doubt about what each campaign is meant to deliver.
This is not a universal rule, but a rule of thumb: retargeting should typically account for 10-20% of total spend. If it goes higher, you are cannibalizing your prospecting budget — and therefore your real growth.
Isolate warm messaging in its own campaign
Existing customers should not see the same cold-acquisition ads as new prospects. Build a separate retargeting campaign with its own messaging — preferably with an incentive that makes sense for someone who already knows the brand, instead of repeating the same "discover us" message.
Not all exposure to existing customers is a problem. A certain share is healthy — that is how you retain customers and increase CLTV. The question is whether that share is intentional or unintentional.
Three signs that cannibalization has gone too far:
- ROAS is high and stable, but the number of new customers (not just orders) is stagnating or falling
- You cannot see in your reporting what share of conversions comes from existing vs. new customers
- The retargeting share of your total Meta spend is consistently over 20% without a conscious decision behind it
If you recognize two or more of these, it is time to separate cold and warm audiences in your account structure — rather than just trusting Advantage+ Shopping to find the right balance on its own.
Attribution is part of the problem
A large part of this cannibalization only becomes visible when you look beyond Meta's own numbers. If your Event Match Quality is low, or if the Conversions API is not correctly implemented, it is difficult to see how much of the reported performance actually comes from people who were already customers.
Therefore, combine audience exclusions with a clear attribution setup so you can track the new-customer share as an independent KPI — not just ROAS.
We see this pattern repeated across accounts: brands that boast a great ROAS while actually only bidding on their own existing and warm customers, who would have converted anyway. It produces a nice number in the short term — and a scaling ceiling in the medium term.
With over 210 million DKK in managed ad spend, our experience is that real growth comes from targeting higher up in the funnel, while warm segments are handled separately, with their own budget and their own messaging. This is part of the approach we build into all Meta accounts through our E-COM OS — where prospecting, retargeting, and retention work as separate, well-defined systems instead of overlapping and competing for the same budget.
1. Are Advantage+ Shopping campaigns always bad at reaching new customers?
Not inherently. The problem arises when there are no exclusions or budget caps in place, allowing the algorithm to freely allocate budget to the easiest conversion — which is often an existing customer.
2. How much of my Meta budget should go to retargeting?
A common rule of thumb is 10-20% of total spend. If the retargeting share consistently exceeds this without a conscious decision, you are likely cannibalizing your prospecting.
3. How do I define an "existing customer" in Meta?
Typically on several levels: historical buyers from your customer list, website retargeting audiences (30/60/180 days), and engagement audiences from IG/FB. Each category should be treated differently in your exclusion strategy.
4. Can I see cannibalization directly in my ROAS?
Not always. A high and stable ROAS can mask the fact that a large share of conversions comes from customers who would have purchased anyway. Instead, track the new-customer share as an independent KPI.
5. Does this mean I should stop showing ads to existing customers entirely?
No. Some exposure to existing customers is healthy for retention. The solution is to isolate it in its own campaign with its own budget and messaging — not to remove it entirely.

.webp)
.png)


















.png)






