Keyword Cannibalization in Apple Search Ads: How to Stop Internal Auctions From Inflating Your CPI
Apple Search Ads can look like it’s working—until you notice your CPI creeping up even when your bids haven’t changed. One very common reason: keyword cannibalization, where multiple ad groups compete for the same user searches and “bid against” each other in the auction. The result is usually higher CPT, lower TTR, and worse conversion, because you’re paying for the same intent more than once.
This post gives you a concrete way to diagnose cannibalization and rebuild your keyword structure so you control which ad group wins.
What “keyword cannibalization” actually means in ASA
In Apple Search Ads, keywords don’t just “target” searches—they compete via auctions. When you have overlapping coverage (especially broad + exact for similar terms, sometimes across different ad groups), these effects show up:
- Broad captures the same traffic you already get from exact
- Multiple ad groups try to show on the same search
- Apple picks a winner, but the competition often leads to higher CPT
- Your reporting can mislead you: each keyword might look “fine” individually while the total account efficiency drops
Even if Apple only shows one ad per impression, overlap still matters because it changes the auction environment and can shift which keyword ad group is most likely to win.
How to detect cannibalization (3 checks)
Do these checks using your ASA reports (and, if you have it, your search term report).
1) Look for rising CPT on keywords that didn’t change
If you see CPT increasing on terms that are stable, check whether broad coverage is expanding their match universe.
What to do:
- Compare CPT trend for your historically stable winners vs CPT trend for your broad discovery keywords.
- If broad CPT is rising and overall CPA/CPI is rising too, overlap is a suspect.
2) Cross-check search terms: are broad and exact both “claiming” the same queries?
On Search Results keyword performance, use your search term insights (when available) to see which queries both:
- your exact keyword matches (directly or via close variants), and
- your broad keyword also matches.
What you’re looking for:
- Search terms where both your broad and exact are eligible and showing activity.
- Patterns where broad is getting the majority of taps, but exact also gets some taps—classic overlap.
3) Compare funnel metrics by ad group, not just by keyword
Cannibalization often shows up as:
- TTR drops slightly (more taps per impression means less qualified traffic or less relevance per winning auction)
- Install conversion (installs/taps) drops (you’re paying for the right term, but the “ad group” isn’t the best landing intent)
If one ad group’s taps convert worse while another’s convert better—but both are reaching similar searches—overlap is likely.
Why the overlap happens most with broad + exact
Broad match types typically have wider match behavior than exact. In practice, that means:
- Broad can capture queries that are already “owned” by an exact keyword
- When both are present, the auction can promote the broad keyword in moments where it shouldn’t—pushing your CPI up
The key is not to ban broad, but to stop broad from competing with your exact winners for the same intent at the same bid power.
A restructure that usually fixes it: “one intent per ad group (by role)”
Here’s a simple model that works well for indie apps:
Role A: Exact = your known winners (high precision)
- Put your exact match keywords that represent high-intent queries into an ad group that is optimized for those terms.
- Keep bids at a level where that ad group is profitable based on your historical CPI/ROAS.
Role B: Broad = discovery only (lower bid ceiling)
- Put broad match keywords that might find new queries into a separate ad group.
- Set a lower max CPT bid for broad than for exact.
The goal: when broad starts learning, it can discover—but it shouldn’t routinely outbid your exact winners for the same searches.
Role C: Search Match (Discovery/Search Match) = separate exploration lane
If you use Discovery/Search Match, keep it in its own ad group.
Why this matters:
- If Search Match shares coverage with your exact/broad ad groups, you lose the ability to reason about performance changes.
- Separating roles makes it easier to decide what to scale.
Step-by-step: rebuild without blowing up your spend
Step 1) Export your current keyword/ad group map
Create a quick table:
- ad group name
- keyword text
- match type (exact/broad)
- max CPT bid
Also list: which keywords are “winners” (best conversion and acceptable CPI) and which are “explorers” (discovery, higher CPT, more variable conversion).
Step 2) Identify overlap clusters
Find keyword pairs that are effectively the same intent, like:
- “app name” exact + “app name” broad
- “feature keyword” exact + “feature keyword” broad
- “app category” exact + broad versions that also capture brand-like queries
Don’t overthink it—if they’re the same semantic intent, treat them as overlapping.
Step 3) Move overlapping exact terms into the exact “lane”
For each intent cluster:
- Keep the exact keyword only in the exact ad group.
- Remove it from broad ad groups when possible.
If you still want some broad coverage for that intent:
- keep broad keywords, but ensure the broad ad group max CPT is conservative.
Step 4) Lower the broad bid ceiling before you remove things
If you’re worried about traffic drop, use this safer sequence:
- First, reduce broad max CPT (discovery lane)
- Then watch whether exact ad group taps/CPT stabilize
- Only then remove redundant overlap keywords from broad where you see no gain
This avoids the “cold turkey” problem where you remove overlap and accidentally starve discovery.
Step 5) Add/adjust negatives to enforce your structure
Negative keywords are often framed as “stop wasting spend,” but in cannibalization scenarios they’re also about routing:
- If broad is matching exact-intent queries you already own, add negatives so those queries prefer the exact lane.
Practical approach:
- Use your search terms to find queries where broad is generating taps with poor profitability compared to exact.
- Negate selectively to reduce overlap—not blanket negatives that kill discovery.
What success looks like after the fix
Within a few days (time depends on your traffic volume and attribution lag):
- CPT should drop or stabilize for your exact winners
- Broad lane CPI should become more variable (that’s okay), but it shouldn’t “steal” your exact winners at high CPT
- Funnel metrics should become more interpretable:
- exact lane: more stable installs/taps
- broad lane: more search-term diversity, with mixed conversion
If CPI improves but TTR collapses too hard, you may have constrained targeting too aggressively. If CPI doesn’t improve, overlap may be happening via Search Match or via other semantically similar keywords you haven’t grouped yet.
Common pitfalls when fixing cannibalization
- Changing everything at once. If you restructure keywords and bids simultaneously, you won’t know what worked.
- Not separating ad groups by role. If exact and broad share an ad group, you can’t tell whether auction competition is hurting you.
- Believing keyword-level revenue. Apple doesn’t give per-keyword revenue. You only get the install→purchase chain attribution (resolved within ~24h). Use taps→installs conversion and your purchase mapping (e.g., via RevenueCat) to evaluate.
Where AdsBuddy fits (lightly)
If you want to make this less manual: an advisory tool like AdsBuddy can read your ASA performance alongside revenue attribution and return a short, prioritized list of structural changes (like which keywords to move, which bids to cap, and what to negate) for you to approve and apply.
Closing takeaway
Keyword cannibalization is usually not about “bad keywords.” It’s about auction dynamics created by overlapping match coverage. Fix it by giving each intent a role—exact for precision, broad/Search Match for discovery—separate ad groups, lower broad bid ceilings, and reduce overlap with targeted negatives.
If you want, tell me your current ad group layout (exact vs broad vs Search Match, and which keywords overlap). I can suggest a cleaner “intent lane” structure to try next.