Exact vs Broad Cannibalization in Apple Search Ads: How to Stop Paying for the Same Click Twice
Apple Search Ads lets you run Exact and Broad match keywords side by side, plus Search Match. That’s useful—but it also creates a specific failure mode: Exact and Broad can end up targeting the same underlying user intent, competing for the same queries and sometimes producing overlapping tap traffic. When that happens, your reporting looks “alive” but your decision-making stalls.
This post is a focused audit for indie teams: find cannibalization, quantify which match type is actually driving outcome, and adjust bids/keyword structure so you’re not paying for the same intent twice.
What “cannibalization” looks like in Apple Search Ads
Cannibalization isn’t just “both keywords got impressions.” It’s when they both end up serving the same (or very similar) search queries, making ROAS comparisons unreliable.
Common signals:
- Both Exact and Broad keywords show decent TTR, but installs/CPA don’t improve proportionally.
- Your “best” keyword by ROAS changes week to week without a clear product/app change.
- You see high spend on Broad even after you “moved budget” to Exact (or vice versa).
- Search terms report shows the same query (or near-identical variants) associated with multiple keywords.
Remember: Apple Ads runs a CPT auction per ad group, and match types influence eligible traffic. If multiple keywords are eligible for the same query intent, you can end up “splitting” outcomes across keywords—and paying different CPTs for essentially the same user.
Step 1: Build a “query-to-keyword” map from Search Terms
The only reliable way to spot overlap is to look at Search Terms.
- Go to your Apple Search Ads report view that lists search terms.
- Filter to your main country/region and a time window long enough to include normal learning (for most indies, “at least a couple of weeks” is safer than a few days).
- Export or copy the top search terms by spend.
- For each high-spend term, note which keywords/match types received taps.
What you’re looking for:
- A single search term that appears under both Exact and Broad keywords.
- Different terms that are clearly the same intent (e.g., small spelling variants, “app” vs “game” wording, “lite” vs “free” queries) mapping back to both match types.
Quick classification rule
For each overlapping search term, label it:
- Exact-sourced: It mostly maps to your Exact keyword(s).
- Broad-sourced: It mostly maps to your Broad keyword(s).
- Shared: It maps strongly to both.
If you have many “Shared” terms, you likely have cannibalization.
Step 2: Compare performance at the intent level (not the keyword level)
Now that you know overlap, stop using keyword-level ROAS as the deciding metric.
Instead, compute or compare these intent-level signals for each category (Exact-sourced / Broad-sourced / Shared):
- TTR: Are the taps coming from genuinely relevant queries?
- Conversion rate (installs/taps): Does the traffic actually install?
- CPA/CPI: What does it cost to get the install outcome you care about?
- ROAS (revenue/spend): Only after you’re confident attribution is consistent.
Why this matters: even if Broad shows better ROAS, you might still be paying for duplicates if Exact would have captured the same installs at a lower CPT.
Step 3: Decide what your Broad keywords are “allowed” to do
Broad match is most valuable as a discovery layer. The problem is when it also functions as your main harvesting layer.
Pick one of these intended roles for Broad:
- Discovery role: Broad is only here to find new intents you don’t have in Exact yet.
- Scale role: Broad is allowed to compete broadly, and Exact is mostly redundant.
- Fallback role: Broad only runs when Exact can’t win auction participation.
Most indie teams benefit from the Discovery role because it keeps your reporting clean and your bidding more controllable.
Step 4: Fix cannibalization with bid hierarchy (simple rule)
Once you identify overlapping “Shared” intent, implement a bid hierarchy so one layer wins and the other learns.
A practical rule:
- For Overlapping/Shared intents, ensure Exact has a higher effective CPT bid than Broad.
- For intents that are only discovered via Broad (Broad-sourced), keep Broad bids competitive.
This doesn’t require perfect numbers—what you need is directional separation.
How to implement without wrecking delivery
- Reduce Broad bids first, not to zero—start with a moderate cut for the broad keywords that frequently overlap.
- If you’re managing ad groups, consider structuring so that Exact and Broad for the same head terms are not in the same ad group unless you intentionally want them to compete.
- Re-run your overlap mapping after you’ve given the campaign time to stabilize.
Step 5: Turn “Broad winners” into Exact coverage (the non-guessy loop)
If a Broad keyword produces good install conversion (and ideally good ROAS) on specific search terms, don’t keep paying Broad to “find” it.
Do this:
- From Search Terms, identify the specific queries that correlate with the best outcomes.
- Add those queries as Exact keywords (one ad group per country/region still holds).
- Keep Broad running, but lower it so Exact can capture the repeatable demand.
The goal is to convert stable demand into Exact, while Broad handles the long tail.
Step 6: Watch for “hidden overlap” caused by keyword sets
Even if your Exact and Broad keywords are different strings, cannibalization can still happen if they represent the same intent.
Examples of overlap patterns:
- Exact: “productivity app” + Broad: “productivity”
- Exact: “habit tracker” + Broad: “habit”
- Exact: “photo editor” + Broad: “image editor”
If these both frequently show up on the same search terms report entries, you’re paying twice for the same user journey.
Mitigation pattern: tighten your Exact, widen your discovery
- Make Exact match the query you want to own.
- Keep Broad match broad, but not so broad that it constantly re-hits your owned head terms.
Step 7: Use a sanity check to decide whether you should touch bids or coverage
Sometimes “cannibalization” is really a coverage issue.
Ask:
- Do you have enough impressions for Exact on the head intent? If Exact is under-delivering, lowering Broad can accidentally reduce your total eligible traffic.
- Is Broad capturing queries you truly don’t want (irrelevant installs)? If yes, you may need negatives (keyword hygiene) rather than only bid changes.
Also: Apple Search Ads attribution resolves within ~24 hours, but revenue mapping to installs often depends on your install→purchase pipeline (e.g., RevenueCat). Make sure your ROAS comparison isn’t distorted by inconsistent revenue attribution.
Common “do this instead” outcomes
If you apply the overlap audit and bid hierarchy, you should typically see one (or more) of the following:
- Shared intents consolidate under Exact (more stable ROAS by match type).
- Broad spend drops while install conversion stays the same or improves.
- Your search terms report becomes easier: fewer high-spend terms appear under multiple match types.
If nothing changes, it usually means:
- Exact bids are still not strong enough to win the auction for those intents.
- Broad negatives are missing, so Broad keeps “stealing” the same demand.
- The conversion signal is too noisy (insufficient volume) to make match-type conclusions yet.
Where AdsBuddy fits (lightly)
If you want this audit to be fast, AdsBuddy’s advisory flow (ASA + revenue review) can translate your exact/broad structure into a short prioritized list of changes you can approve—usually focusing on keyword grouping and bid hierarchy first. You still stay in control; it’s not an auto-optimizer.
Takeaway
Exact vs Broad cannibalization is one of the fastest ways to turn Apple Search Ads into “busy reporting with unclear decisions.” The fix isn’t more guesswork—it’s an overlap audit from Search Terms, a clear role for Broad (discovery), and a bid hierarchy that lets Exact own repeatable intent.
Do that once, and your next ROAS review will finally tell you something actionable.