Honest Growth
← All detections

Detection · audience_network_leak

Detection: Audience Network consuming spend at poor unit economics

Key: audience_network_leak Severity: High Confidence: 75–90%

What this detection looks for

We flag an ad set as an Audience Network leak when all of these are true:

  1. The ad set is active
  2. Audience Network spend ≥ 15% of the ad set's total spend in the date range
  3. Either of:
    • Audience Network produced zero purchases while the non-AN placements in the same ad set did produce purchases, or
    • Audience Network's cost-per-purchase (CPA) is at least 2× the CPA of the same ad set's non-AN placements

We measure at the ad-set level because Meta's auto-placement logic distributes the ad set's budget across placements; a leak in one ad set is not necessarily a leak in another.

Why this matters

Audience Network inventory consists primarily of third-party display and rewarded-video placements outside of Facebook and Instagram. For most direct-response advertisers it converts poorly — clicks are often accidental (taps inside games), brand context is weak, and the relationship between an Audience Network impression and a purchase event on your site is tenuous.

When 15%+ of an ad set's budget is going to Audience Network at 2-3× the CPA, you are subsidizing a placement Meta's algorithm has not learned to evaluate well for your account. The fix is almost always to disable the placement and let the budget reallocate to Facebook and Instagram feeds.

How we calculate confidence

Condition Confidence
AN share ≥ 25% AND either: AN has 0 purchases with ≥ 50 non-AN purchases, or CPA ratio ≥ 3× 90%
AN share 15–25% with CPA ratio ≥ 2× 75%
AN share below 15% OR CPA ratio below 2× We don't surface the finding

How we calculate the estimated monthly cost

We treat the entire Audience Network spend as recoverable, since the fix is to disable the placement. We project the observed AN spend to a 30-day month at the same daily run rate.

monthly_recoverable = (an_spend_in_range / days_in_range) × 30

We surface the full AN spend, not the differential CPA cost, because the recommended action removes the placement entirely. Some account-level performance loss may follow if Meta's algorithm was using Audience Network to inflate qualifying conversion volume for learning — we account for this in "What would change our mind."

What would change our mind

This finding can be a false positive in a small number of cases:

  • App install or rewarded-video campaign. If the campaign is promoting a mobile app or relies on incentivized engagement, Audience Network can legitimately drive volume that other placements cannot. Check the campaign objective and the app integration before acting.
  • AN was carrying learning-phase qualifying events. A small ad set near the 50-conversions-per-week learning threshold may rely on AN to push it across the line. Disabling AN can push the ad set back into learning. The fix is to consolidate the ad set or move to a higher-funnel optimization event, not to keep AN.
  • Reporting attribution is misleading. If your CAPI signal is significantly stronger on web than on the click attribution path through AN, the recorded CPA understates AN's true conversion contribution. This is rare but worth confirming if you rely heavily on view-through attribution.

How to fix it

  1. Edit the ad set placements in Meta Ads Manager. Switch from Advantage+ placements to Manual placements if needed.
  2. Uncheck Audience Network. Leave Facebook and Instagram placements on, including feeds, reels, and stories per your historical preference.
  3. Save and let the ad set run for 7–14 days before evaluating impact.
  4. Compare account-level cost-per-purchase before vs. after. If it does not improve materially, also confirm that ad-set delivery did not get capacity-constrained by removing the placement.
  5. Repeat for other ad sets flagged with the same issue. Apply across the account rather than ad-set-by-ad-set.

What we look at to make this detection

  • effective_status on the ad set
  • Insights with breakdowns=publisher_platform,platform_position, summed across the audit date range, splitting placements into audience_network and "everything else"
  • Spend and purchase conversion counts per placement bucket, used to compute spend share and CPA per bucket

Source

This methodology page is generated from apps/api/app/services/detections/audience_network_leak.py. The detection code is open for inspection. We do not have hidden rules.

See it run on a real account.

The sample audit shows this and 14 other detections fired against a synthetic but realistic $30K/month account.