---
name: audience_overlap_analysis
description: "Find where paid social audiences overlap and compete for the same people: read Meta, Google, and TikTok overlap reports and exported audience data, score each pair with the overlap coefficient, Jaccard, and both directional shares, separate harmful overlap from healthy funnel layering, and merge, split, exclude, or keep ad sets on delivery evidence. Use when ad sets under-deliver, stay in learning, share lookalike or interest audiences, or before consolidating or duplicating campaigns."
---

# Audience Overlap Analysis

## Purpose
Work out which of your own ad sets are chasing the same people, how much that is costing in delivery, and what to change. The output is a decision per pair: merge, split or exclude, or keep. A percent on its own decides nothing.

Two different problems share the word overlap. Keep them separate all the way through:

- Audience overlap is membership. Two audiences contain some of the same accounts, whether or not the ad sets ever run at the same time.
- Auction overlap is delivery. Two ad sets from the same advertiser qualify for the same impression at the same moment. On Meta, only the ad with the highest total value enters that auction, and the rest are held out. Your ad sets do not outbid each other, but the held out ad set can under-deliver, spend slowly, and stay in learning while its budget sits unused.

## Workflow

1. **Scope to live pairs first.** List the ad sets that spent in the last 7 to 14 days, with their audience, objective, conversion event, country, and schedule. Pairs that never run at the same time, in the same place, for the same objective rarely compete. Score them last, if at all.
2. **Pull membership overlap.** On Meta: Ads Manager, Audiences, tick up to 5 audiences, Actions, Show audience overlap. The first audience ticked is the selected audience and every percent divides by it, so re-run each flagged pair with the smaller audience selected. The tool gives useful information only for audiences with at least 10,000 accounts. Platform routes for Google, TikTok, and exports: `references/platform-checks.md`.
3. **Score every pair the same way.** From sizes and the shared count, compute share of A, share of B, the overlap coefficient (shared / smaller size), Jaccard (shared / union), and the unique count on each side. Run `bin/overlap.py` on exported sizes, on hashed membership lists, or on reach. Formulas and the reason each score exists: `references/overlap-math.md`.

   ```bash
   python3 bin/overlap.py sizes pairs.csv
   python3 bin/overlap.py lists membership.csv
   python3 bin/overlap.py reach reach.csv
   ```

   The sizes file needs `a,b,size_a,size_b,overlap`. The reach file needs `a,b,reach_a,reach_b,combined_reach` and returns delivered overlap as reach A plus reach B minus combined reach.
4. **Read the role of the pair before judging the score.** Classify each pair:
   - Cold with cold: two prospecting ad sets. Overlap here splits learning and reach for no gain. This is the harmful kind.
   - Cold with warm: prospecting with retargeting. High containment is expected, because retargeting exists to reach people prospecting found. Judge it on exclusions and cost inside the warm pool, not on the score.
   - Warm with warm, nested windows: a 30 day visitor list sits inside a 90 day list by construction. Keep separate only when recency gets different creative, bids, or budgets. Otherwise it is one audience wearing two names.
   - Buyers inside prospecting: a targeting leak, not layering. Fix with a purchaser exclusion.
5. **Demand delivery evidence next to any high score.** For each flagged pair, pull the same window for both ad sets: spend share, results and cost per result, reach, frequency, and learning or learning limited status. Harm shows up as one ad set taking a small share of the pair's spend despite a real budget, results too few to exit learning, frequency climbing while reach stays flat, or cost per result drifting up as the pair runs longer. A high score with clean delivery is a watch item, not a restructure.
6. **Apply the decision rules.**
   - **Merge** when the pair shares the objective and conversion event, sits at the same funnel stage, the overlap coefficient is 0.50 or higher or Jaccard is 0.30 or higher, and delivery shows one side starving. Keep the ad set with more results and the lower cost per result, move the full budget to it, carry the losing ad set's best creative over as a test creative, pause the loser, and note the pre-merge week as the comparison.
   - **Split or exclude** when the jobs genuinely differ (different intent, creative, offer, or margin) but the audiences collide. Keep both ad sets and make them disjoint: exclude each audience from the other, or exclude the warm pool and buyers from the cold ad set. Split by a real boundary the platform can hold, such as geography, placement, or a defined list, not by a near-duplicate interest stack.
   - **Keep** when the pair is cold with warm layering with exclusions and frequency controls in place, when overlap is low (coefficient under 0.25 and Jaccard under 0.15) with clean delivery, or when containment is by design and each layer has its own creative job and budget logic. Write down why it stays, so the next audit does not relitigate it.
   - **Gather more data** when either audience is under the platform floor, the window is under 7 days, or delivery evidence conflicts with the score. State what is missing and when you will recheck. Do not restructure on a score alone.
7. **Recheck after the change.** Seven days after a merge, split, or new exclusion, compare spend share, results, cost per result, frequency, and learning status against the pre-change window. One bad day reverses nothing. Two checks moving the wrong way reopen the decision, as a controlled test with exclusions, not as a return to the old structure by default. Full worked pair, one merge and one keep: `references/worked-example.md`.

## Output Contract
An overlap audit following `assets/overlap-audit-template.md`: the scoped pairs with sizes, shared counts, both directional shares, overlap coefficient, and Jaccard; the role classification and delivery evidence for every flagged pair; one decision per pair (MERGE, SPLIT OR EXCLUDE, KEEP, or GATHER MORE DATA) with the exact structural change, the surviving ad set and budget where relevant, and a recheck date with the numbers that would reverse the call. Every percent names its denominator.

## Operating Rules
1. **Never quote one directional percent alone.** The same pair reads 76 percent of a small retargeting audience and under 1 percent of a large prospecting audience. Print both shares, the sizes, and the shared count.
2. **Bands are heuristics, not platform benchmarks.** The merge and keep cutoffs in this skill are decision aids built for consistency inside one account. No platform publishes a universal overlap percent that proves waste, and vendor figures claiming a fixed cost per point of overlap do not transfer to your account.
3. **Membership is not delivery.** A paused, geo-split, or dayparted pair can share most of an audience and never meet in an auction. Confirm with auction overlap signals, delivered reach overlap, and learning status before calling overlap harmful.
4. **Low membership overlap does not clear a pair.** Broad and automated audiences deliver past their named targeting, so two tidy audiences can still meet on the same people. Check delivered overlap and frequency when delivery looks crowded.
5. **Separate ad accounts do not escape overlap.** Meta may treat several accounts as one advertiser. Score the business, not the account boundary.
6. **Protect learning when you restructure.** Splitting results across near-duplicate ad sets is how each one stays short of the results it needs to stabilise. Merging is often right because the survivor learns on the combined results, not because the overlap percent looked bad.
7. **Hash membership exports.** Score lists by a stable hashed or pseudonymised key. Never work from raw emails or phone numbers, and keep only the pair scores when the audit closes.
