Someone on your team has probably removed an exclusion list in the last year because it looked broken. That decision is costing money right now, and the reasoning behind it was almost right.
Enforced, or advisory

Meta treats your targeting inputs two different ways, and it does not make the split obvious. Location, language, minimum age, excluded custom audiences and Special Ad Category are enforced. Interests, age, gender, custom audiences and lookalikes are read as suggestions.
Enforced means what it sounds like. Advisory means the input is a starting point, and delivery can go wider if it thinks there is a conversion on the other side of the line you drew. That is why two people can audit the same account and disagree. One tests an interest and watches delivery spill past it. The other tests a customer exclusion and sees it hold. Two different things, not the same rule twice.
Why your Exclusion seems Broken

So when an existing customer sees your prospecting ad, the conclusion is that exclusions no longer work. They do. The exclusion is in the enforced group. What failed is the list inside it. An exclusion that leaks has one of two causes: the list is stale, or the list is incomplete. Stale means the customer bought after the audience last refreshed. Incomplete means the order never made it into the list at all, which is what happens when the list is built from one source and the orders arrive through several. Both are fixed on the list. Neither is fixed by rewriting the campaign, and pulling the exclusion widens the exact leak you were closing.
Preventing waste is not the same as teaching

An exclusion stops you paying twice for a customer you already have. It does not teach the algorithm who to find next. Exclusions prevent waste. Signals produce learning. Expecting one to do the other is how a working exclusion ends up looking like a failure.
The Check

Two questions about every excluded audience you run. How recently did it refresh, and does it contain every order, including the ones from a channel the list is not built from? A file that updates on a weekly export is stale by design during a sale week, which is the week it matters most.
This is what EdgeTag's segmentation is built to fix. Orders come in from every channel, not just the one a list happens to be built from. Guest, POS, subscription, all of it. Whether that actually keeps someone out of a prospecting ad still comes down to the match. EdgeTag sends each identifying field on its own instead of bundling them into one string, and includes the identifier built for a device that has gone quiet, catching more of what a single combined string would miss. Not a guarantee. Fewer leaks. Defined once, kept current, synced to whichever platform you choose.

Keep the exclusion. Fix what is in it.
FAQ
1. Does Meta actually obey exclusions?
Yes, for excluded custom audiences specifically. They sit in the enforced group alongside location, language, minimum age and Special Ad Category.
2. Why do excluded customers still see my ads?
Almost always because the excluded audience is stale or incomplete, not because Meta ignored it. Check when the list last refreshed and whether it captures purchases from every channel you sell in.

