The Ad Group Overlap Audit: How Duplicate Keywords Waste CPT (and Make ROAS Look Worse Than It Is)
Running Apple Search Ads is hard enough without your own account structure working against you. One problem that quietly hurts most indie budgets: ad group overlap—the same (or effectively the same) keywords competing in multiple ad groups and campaigns.
Overlap doesn’t always “break” delivery. Instead, it wastes taps at the auction, makes it harder to diagnose what’s working, and can make ROAS look random even when your bids and creatives are fine.
Below is a practical audit and cleanup workflow you can do without guesswork.
Why ad group overlap is more expensive than it looks
Apple Search Ads runs a cost-per-tap (CPT) auction. Even if you think you’re targeting different things, overlapping keyword logic can still put the same user searches into multiple competing keyword auctions.
Typical ways overlap sneaks in:
- Same keyword in multiple ad groups (often after months of “quick fixes”).
- Exact + Broad versions of the same keyword across different ad groups. Broad can match more queries than you expect, so you end up double-covering the same intent.
- Search Results + Search Match duplication where a Search Match ad group is “discovery” but also overlaps your manual keyword coverage.
- Multiple campaigns for the same country/region (sometimes created during experiments) where both can show for similar searches.
The symptoms show up as:
- Taps that look “fine,” but installs or revenue don’t follow.
- CPA/CPI drifts even when you didn’t change bids or budgets.
- ROAS seems inconsistent across reports, because you’re not really comparing apples-to-apples anymore.
The one-hour overlap audit (what to check)
You’re not looking for a perfect account. You’re looking for conflicts that create duplicated auction coverage.
Step 1: Choose one country/region to audit
Remember: each campaign targets one country/region. Pick the biggest spender country first.
Step 2: Export your keyword performance and structure
For the selected country, pull data that includes at least:
- Keyword
- Match type (Exact / Broad) and whether it’s Search Match / Discovery
- Ad group
- Campaign
- Spend, taps, installs (and ROAS/CPA if you have it mapped)
Even a manual copy/paste of “keyword lists by ad group” is enough for the audit.
Step 3: Build a keyword map (simple matrix)
Create a table with:
- Rows: keywords (or keyword stems—more on that in a second)
- Columns: ad groups/campaigns where they appear
- A checkmark if they overlap (see next step)
You’re trying to answer: “If I search for X, where can my ads show from?”
Step 4: Mark “effective duplicates” (not just identical strings)
Overlap isn’t only exact text matches. Mark these as conflicts:
- Same exact keyword text in more than one ad group.
- Keyword contained in another keyword where both are likely to match the same queries.
- Example: having both
"photo editor"and"photo editor pro"as separate exacts may be okay—but if you also have broad on one, you can get overlap.
- Example: having both
- Exact keyword coverage duplicated by Broad of the same concept.
- If
"tracker"(Broad) exists in one ad group and"tracker"(Exact) exists elsewhere, you likely have duplication.
- If
Step 5: Confirm duplication using Search Query reports (if available)
Apple provides search query visibility so you can see what queries actually triggered your ads.
Look for situations where:
- The same query is served by multiple ad groups (or multiple campaigns).
- You see meaningfully similar queries (pluralization, small word changes) hitting more than one keyword bucket.
If you can’t map query → ad group perfectly from exports, use the data you have to validate that overlap is happening.
Cleanup plan: how to de-overlap without losing delivery
The goal is one clear “owner” for each intent bucket.
Option A (best for most indies): One intent per ad group
Pick an intent taxonomy and enforce it in structure.
Example:
- Ad group A: Exact-only for your highest-intent terms
- Ad group B: Broad-only for discovery terms you’re comfortable learning from
- Ad group C: Search Match for automatic expansion
Then apply a rule:
- If a keyword concept is already “owned” by Ad group A (Exact), remove the concept from Ad group B (Broad) unless you have a deliberate reason.
This reduces auction competition created by your own setup.
Option B: Keep broad, but remove manual duplicates
If you rely heavily on Broad to find scale:
- Keep Broad in one place.
- Remove the same keyword text from Exact in other ad groups.
- Instead of duplicating, let Broad handle those near variants.
This often stabilizes CPT and reduces “mystery” installs coming from multiple buckets.
Option C: Split by match type only when you truly isolate it
If you already separate match types, double-check you’re not accidentally overlapping concepts.
A common failure mode:
- You isolate match types but still reuse keyword concepts across ad groups.
Isolate intent buckets, not just match type labels.
What changes to make (concrete actions)
Here’s a safe checklist you can execute.
1) Remove or merge duplicate keywords
- For identical keyword strings: keep it in one ad group only.
- For effective duplicates: keep the one with better bid control.
2) Reassign “who owns the query”
When two ad groups overlap, decide:
- Which one is the primary learner (usually Search Match or Broad)
- Which one is the primary scale driver (often the tighter manual group)
Then keep coverage in one place.
3) Freeze bids during the first reconciliation window
Because you’re changing structure, don’t also tune bids.
A simple approach:
- Make de-overlap changes.
- Let delivery and metrics stabilize.
- Only then adjust CPT bids.
4) Watch the metrics that reveal overlap problems
After cleanup, compare:
- TTR (taps / impressions): overlap can create noisy tap quality
- Conversion rate (installs / taps): duplicated auction coverage often drags this
- CPT: if your own account was competing with itself, CPT can drop after cleanup
- CPA/CPI and ROAS: not because the product changed, but because attribution and auction dynamics get less chaotic
A quick example (illustrative, not a benchmark)
Imagine you have:
- Campaign 1 (US): Ad group “Exact Winners” with exact keyword
"meal planner" - Campaign 2 (US): Ad group “Broad Discovery” with broad keyword
"meal planner"
During a week, you see:
- Taps from both ad groups for similar queries
- Conversion rate is inconsistent
- CPI spikes even when you didn’t change anything
After de-overlap:
- Keep
"meal planner"exact only in one ad group. - Remove the same concept from broad (or keep broad in one ad group and remove exact from the other).
Often you’ll see CPI stabilize because you removed internal auction competition and made reporting “about the same intent bucket.”
How this ties back to real ROAS decisions
Apple Search Ads doesn’t give you per-keyword revenue directly—revenue comes from the install → purchase chain (commonly mapped via RevenueCat or similar tooling using Apple’s AdServices attribution token resolved within ~24h).
So when your account structure overlaps, you don’t just waste taps—you also blur which intent bucket produced the purchases. Cleaning overlap is one of the fastest ways to make ROAS decisions less noisy.
Where AdsBuddy can help (lightly)
If you want a shortcut: AdsBuddy reads your Apple Search Ads performance + your revenue mapping and outputs a short, prioritized list of what to change next. De-overlap usually lands high on that list because it reduces wasted auction pressure before you start tuning bids.
Takeaway
Ad group overlap is one of those problems that doesn’t look dramatic in the UI—but it quietly increases CPT cost and ruins your diagnostic signal.
Run the one-hour overlap audit, enforce “one intent owner per ad group,” freeze bids during the cleanup window, then re-check TTR, conversion rate, and CPT. Your ROAS will often get less “random” simply because your account structure stops competing with itself.