Your Meta Exclusions Are Leaking: Why 40% of Your 'Prospecting' Budget Hits Existing Customers

A homewares brand came to us last quarter convinced their prospecting was broken. They were spending roughly $40k/month on what they'd labelled cold campaigns, returning-customer exclusion switched on, and the new-customer numbers in their head said growth. The bank account said something different. Revenue was flat for three months straight while spend crept up.

So we ran a holdout before touching a single campaign. The result is the one I want to talk about today, because it's the same one I keep finding account after account.

Roughly 40% of their "prospecting" spend was going to people who'd already bought from them. With the exclusion on.

Here's the thing - that exclusion wasn't broken. It was doing exactly what it could, which turns out to be a lot less than most founders assume. And once you understand why, you stop being angry at Meta and start fixing the actual leak.

Why the exclusion list quietly stopped working

Meta used to be able to see almost everything. Who'd been to your site, who'd purchased, who was a brand new human who'd never heard of you. You could exclude existing customers and trust that it mostly held.

Then Apple's tracking changes came in, signal degraded, and Meta lost a big chunk of its ability to do real exclusions. The list you upload still exists. The system just can't reliably match the person in the auction back to a row on that list anymore.

So what does the machine do when it can't see clearly? It falls back on affinity. It looks for people who behave like buyers of your product. And the people who most behave like buyers of your product are, very often, the people who already bought your product.

It's a feature, not a bug. Meta is built to find you the cheapest conversion, and the cheapest conversion is almost always someone who already loves you. When you don't give it a clean way to tell new from returning, it drifts toward the easy win and reports it back to you as a fresh acquisition.

This is why I believe the in-platform "new customer" number is one of the most misleading figures in the whole account. It's not lying on purpose. It just can't see what it claims to see.

The Klaviyo gap that makes it worse

There's a second leak underneath the first, and almost nobody talks about it.

Your exclusion and customer lists are only as good as the data feeding them. A lot of your purchases never happen through a Meta click. Someone sees an ad, leaves, comes back two days later through a Google search or straight to your URL, and buys. That order is real, but the Meta click ID that ties it cleanly to a person isn't there.

So when your customer list syncs back to Meta for matching, a slice of your actual buyers don't carry the identifiers Meta needs to recognise them. They never make it onto the "these are existing customers, don't pay to reach them" pile in a way the system can use.

The result: you've got customers Meta is happy to go and "acquire" again, because as far as its matching is concerned, it's never met them. You upload the list in good faith. Half the value leaks out on the way in.

The five-minute audit you can run today

You don't need a holdout to get the first read. You need five minutes and a willingness to look at a number you might not like.

Here's my take on the fastest version:

  • Open your post-purchase survey, or your new-vs-returning split, for the last 30 days. Look at orders attributed to Meta and ask: what share are genuinely new? If you don't have a post-purchase "how did you hear about us" survey running, that's job one this week. It's the cleanest truth you have.
  • Compare that to what Meta's reporting claims is new. A gap of 10-15 points is normal. A gap of 30-plus means the machine is buying you customers you already own and calling it growth.
  • Pull your returning-customer rate overall. If a healthy chunk of buyers in your "cold" campaigns are repeat purchasers, you've found where the budget is leaking.

To put this in perspective, on the homewares account the platform said about 80% of conversions were new. The survey and the holdout together said closer to 55-60%. That gap was the whole problem, sitting in plain sight.

If you only do one thing from this post, do this. Most founders have never actually checked their percent-new against an independent source. They're trusting the one number the platform has the least ability to measure honestly.

What we fix, in order

Once you've confirmed the leak, the instinct is to crank the exclusions harder or tighten your ROAS target. I'd argue both make it worse.

Tightening your bid cap or your ROAS floor tells the system "only spend where you're very confident of a conversion." And the place it's most confident is your existing customers. So you squeeze the budget straight into the people you were trying to exclude. Counterintuitive, but it's exactly what we see.

Here's the order I'd actually work through.

1. Fix the measurement first. You can't manage what you're guessing at. Get a server-side feed and your conversions API clean, so as many purchases as possible carry proper identifiers. Better CAPI hygiene means your customer-list syncs actually match, which plugs the Klaviyo gap and makes every exclusion you upload more effective. This is unglamorous and it's the highest-impact thing on the list.

2. Change the KPI you steer by. Stop optimising the account to in-platform ROAS and start watching cost per incremental new customer, plus your rolling reach into fresh audiences. Those two numbers tell you whether you're actually growing or just re-buying your base. A holdout every quarter keeps them honest.

3. Move some budget up the funnel. If purchase-optimised campaigns keep finding your existing customers, give the system a different job. We've had real success shifting a slice of spend onto mid-funnel events - think a quiz completion, or a meaningful view-content action after the landing page - rather than pure purchase optimisation. On one account that single shift dropped cost per incremental new customer by around 26% over six weeks. The campaigns stopped fighting over the same warm crowd.

4. Use the new-customer objective and proper reach. Meta's new-customer optimisation isn't perfect, but it gives the machine an instruction it can't get from a leaky exclusion list. Pair it with genuine reach campaigns when your goal is net-new humans, not this month's conversions.

5. Accept that net-new often lives off Meta. This is the honest bit. If you want people who've genuinely never heard of you, some of them are reachable far more cheaply through other channels - creators, a second platform, places where your competitors aren't already farming the same audience. Meta is brilliant at harvesting demand. It's expensive at creating it.

The reframe that changes the spend

The mistake isn't running prospecting campaigns. It's trusting a label.

A campaign called "cold" with an exclusion attached is not the same as a campaign that's actually reaching cold people. The name is yours. The behaviour belongs to the algorithm, and right now the algorithm can't see well enough to honour the name.

So the question I'd sit with before your next budget increase isn't "how do I scale prospecting." It's "how much of what I call prospecting is genuinely new, and how would I prove it." If you can answer that with a number from outside the platform, you're already ahead of most brands spending ten times your budget.

If you'd like a properly independent read on where your acquisition budget is actually landing, that's a core part of a Signal/Noise Audit - we pull apart your new-versus-returning reality, your measurement setup, and exactly which campaigns are quietly re-buying your base before you spend another dollar treating them as cold. No pressure either way. But check your percent-new first. It's free, it takes five minutes, and it tends to change the whole conversation.

Ethan To
CEO @ Pigeon Digital