Detection: Ad sets bidding against each other
Key: audience_overlap
Severity: Medium–High
Confidence: 75–90%
What this detection looks for
We flag a pair of ad sets when both of these are true:
- Both ad sets are active
- They each target a custom audience, and the two audiences have ≥ 30% user overlap according to Meta's audience overlap report
We fire one finding per pair, deduplicated regardless of audience order.
Why this matters
When two ad sets in the same account target audiences that share users, those users see your ads from both ad sets and Meta runs an internal auction in which your two ad sets compete against each other. The auction mechanic guarantees that the winning bid is higher than it would have been in a single ad set — meaning your account pays more per impression to reach the same user.
The effect is small at 30% overlap and large at 50%+ overlap. Above 70% overlap, the two ad sets should almost always be consolidated.
How we calculate confidence
| Condition | Confidence |
|---|---|
| Audience overlap ≥ 50% | 90% |
| Audience overlap 30–50% | 75% |
| Audience overlap below 30% | We don't surface the finding |
How we calculate the estimated monthly cost
We estimate the wasted share of combined spend conservatively. The mechanism is auction inflation, which is hard to measure exactly without counterfactual auction data. We surface a share of combined spend as the recoverable waste, projected to a 30-day month.
- ≥ 50% overlap → 10% of combined spend is treated as waste
- 30–50% overlap → 5% of combined spend is treated as waste
monthly_recoverable = (combined_ad_set_spend × waste_share) × (30 / days_in_range)
We deliberately stay below the 15–20% figures sometimes cited in the industry, because those numbers assume the more overlapped audience was also the one you would have kept — a claim that requires more evidence than we have.
What would change our mind
This finding can be a false positive in a small number of cases:
- One ad set is a deliberate retargeting layer. If audience A is "site visitors" and audience B is "purchasers excluded prospecting," the overlap is intentional and the higher cost is a designed feature. The fix is to ensure the retargeting ad set excludes the purchaser audience rather than to consolidate.
- Different objectives or different funnel stages. If one ad set is optimizing for Initiate Checkout and the other for Purchase, the apparent overlap may still be useful because the ad sets are not competing for the same conversion event.
- One ad set's audience is much smaller. Meta's overlap report reports A∩B as a share of A. A 50% overlap on a 5,000-person retargeting audience overlapping a 5M-person lookalike is not the same problem as 50% overlap on two 1M audiences. Check the absolute audience sizes.
How to fix it
- Open Meta's Audience Overlap tool in Audiences and confirm the overlap.
- Decide which ad set is the primary for that audience — typically the one with higher ROAS or longer history.
- In the secondary ad set, add the primary's custom audience to the exclusion list. This stops the auction conflict.
- If both ad sets are equivalent (same objective, similar creative), consolidate them. The combined ad set will exit learning faster than either alone.
- Re-audit in 7 days. If the secondary ad set was carrying the overlap, you should see CPM drop on the primary.
What we look at to make this detection
effective_statuson each ad setincluded_custom_audience_idson each ad set's targeting spec- Meta's audience-overlap endpoint, called for each pair of custom audiences that meet a minimum size threshold. The endpoint returns the share of audience A's users that also appear in audience B. We treat the overlap as symmetric for flag purposes
spendinsights metric per ad set, summed across the audit date range
Source
This methodology page is generated from
apps/api/app/services/detections/audience_overlap.py. The detection code
is open for inspection. We do not have hidden rules.