Most accounts don't lose auctions because their bids are too low. They lose because they never entered the auction at all. Competitor keyword gap analysis is the fix: a structured pass over the terms your rivals bid on that you don't, so you stop finding out about profitable queries six months after a competitor has already built a quality score moat on them. The concept is simple. The execution is where most people cheat, because getting a real list of a competitor's keywords is harder than the tool vendors admit, and pretending an estimate is a fact is how you end up funding a campaign built on fiction.
This post is the honest version of the method: where competitor keyword data actually comes from, how reliable each source is, how to classify the gap into four buckets, and how to turn the good bucket into a live test campaign without a spreadsheet marathon.
What a keyword gap actually is
A keyword gap is the set of search terms a competitor is actively bidding on where you have no presence: no keyword, no close variant coverage, no impression share. Not "keywords they rank for organically", that's an SEO exercise. In the Google Ads context, the gap is about paid auctions you're absent from.
Gaps come in three flavors:
- Missing themes. They bid on an entire use case or problem framing you never thought to cover. This is the valuable kind.
- Missing variants. You cover the theme but not the phrasing: they own the "for teams" and "pricing" modifiers, you only run the head term.
- Missing intent stages. You bid bottom-funnel only; they also buy comparison and alternative queries where deals are actually decided.
The point of the analysis is not to copy their keyword list. Some of their keywords are mistakes, some are brand terms you have no business touching, and some are irrelevant to your product. The point is to find the subset where their spend is a signal you can borrow.
Competitor keyword gap analysis: the honest data inventory
Here is the uncomfortable part. No public source hands you a competitor's keyword list. Every input is partial, and you should know exactly how partial before you build on it.
| Source | What it shows | What it doesn't |
|---|---|---|
| Your own search terms report | Real queries you already matched to | Anything you never entered auctions for |
| Auction Insights | Who overlaps with you, per campaign | What keywords they run, zero query detail |
| Ads Transparency Center | Their live creatives and formats | Keywords and targeting, not exposed at all |
| Third-party estimation tools | Modeled keyword lists | Certainty. These are estimates built from panels and scraping |
Read that table before trusting any "competitor keywords" export. Auction Insights answers who, not what. The Ads Transparency Center answers what they say, not what they bid on. Third-party keyword lists are useful, we use them too, but they are estimates and must be labeled as estimates when you present the analysis. A modeled list that's directionally right is a fine starting hypothesis. Treating it as ground truth is how fabricated precision creeps into your planning, which is the exact failure mode we've written about in why we ban fabricated ad metrics.
If you want to go deeper on what Auction Insights can and can't tell you, we cover it in the Google Ads Auction Insights guide.
Step 1: build your own keyword inventory first
You can't find a gap without knowing your own coverage, and most accounts don't actually know it. Export every active keyword across every campaign, plus the last 90 days of your search terms report. Deduplicate, then collapse to themes: not 400 raw strings, but 20 to 40 clusters like "category head terms", "pricing queries", "alternative-to queries", "integration queries".
This inventory is the left side of the comparison. Skipping it is the most common mistake in gap analysis: people diff a competitor list against their memory of their account, and memory always claims more coverage than the account actually has.
Step 2: get the competitor list, sources cited
Pull competitor keyword estimates from whatever tool you use, and tag each source. A practical stack:
- Estimated keyword lists for two or three direct rivals. Label every row "estimated".
- Auction Insights from your own account, to confirm which rivals actually show up against you and in which campaigns. This validates that the rival is worth analyzing at all.
- Their live ads in the Ads Transparency Center. Creatives leak intent: an ad headlined around "migrate from X" tells you a migration keyword theme exists even though no tool shows you the exact term.
In AdWhispr this step is one prompt: research_competitor_keywords pulls the keywords a named competitor is bidding on, in the same chat where your own inventory and the eventual campaign launch live. More on that flow in competitor keyword research with an AI assistant.
Step 3: classify the gap into four buckets
Diff the competitor list against your inventory. Everything they run that you don't lands in one of four buckets. This classification is the entire value of the exercise, a raw gap list is noise.
| Bucket | Definition | Action |
|---|---|---|
| Winners to steal | High intent, relevant to your product, plausible CPC | Test campaign, this quarter |
| Irrelevant | Their product does it, yours doesn't | Delete, and add as negatives if they leak into broad match |
| Brand terms | Their own brand and product names | Separate decision entirely, see below |
| Question marks | Relevant but unclear intent or scary CPC | Small-budget test or park for next pass |
Two notes. First, brand terms get their own bucket because bidding on a rival's brand is a strategy with its own economics and risks, big enough that we wrote it up separately in bidding on competitor keywords. Don't let brand terms sneak into your "winners" bucket by accident. Second, the irrelevant bucket is not waste: those terms become negatives that protect your broad match campaigns from drifting into their territory.
Step 4: prioritize by intent and CPC tolerance
You will not fund the whole winners bucket, so rank it. Two axes matter:
- Intent stage. A gap on "best [category] for agencies" beats a gap on "[category] definition" every time. Commercial-investigation and purchase-intent queries first, informational queries last or never.
- CPC tolerance. For each theme, ask what a click can cost before the unit economics break, given your conversion rate and deal size. If a theme's going rate is beyond your tolerance, it's not a gap, it's a moat. Move it to question marks and revisit when your landing page or offer improves.
A useful tiebreaker: how long has the competitor been on the theme? A theme they've run ads against for months is a theme that's probably paying for itself. It's the same logic as days-running as a Meta performance proxy: sustained spend is the closest thing to a public performance signal you'll get.
Step 5: turn the gap into a test campaign structure
Don't dump gap keywords into existing campaigns. They'll inherit budgets, bidding history, and negatives that were never designed for them, and you'll never get a clean read. Instead:
- One test campaign per theme, or per two or three tightly related themes.
- Phrase and exact match to start. Broad match on unproven themes burns the budget before you learn anything.
- A modest, capped daily budget you can afford to lose entirely, this is research spend.
- Ad copy that answers the intent you inferred, not recycled copy from your core campaigns.
- A kill rule written down before launch: the spend threshold and time window after which a theme with no conversions gets paused, no debate.
Run two to four weeks depending on volume. Themes that convert graduate into your permanent structure with their own budgets. Themes that don't become documented dead ends, which is also valuable: the next person to run this analysis won't re-test them blind.
Cadence: quarterly full pass, monthly spot check
Gap analysis decays. Competitors launch features, enter keywords, abandon themes. A workable rhythm:
- Quarterly: the full pass. Rebuild your inventory, re-pull competitor estimates, reclassify, refresh the test queue.
- Monthly: a spot check. Scan Auction Insights for new names or big overlap swings, and skim the Ads Transparency Center for new creative themes from your top rivals. Fifteen minutes, and it catches most moves early enough to matter.
Write down the date and sources of each pass. When someone asks in Q3 why you're bidding on a theme, "Q2 gap analysis, source: estimated list plus their transparency center creatives, validated by a converting test" is an answer. "It was in a spreadsheet" is not.
FAQ
What is a competitor keyword gap analysis?
It's a structured comparison between the search terms your competitors bid on in Google Ads and the terms you cover. The output is a classified list of auctions you're absent from, sorted into keywords worth testing, irrelevant terms, competitor brand terms, and unproven question marks.
Can I see a competitor's exact Google Ads keywords?
No public source shows them exactly. Auction Insights shows who overlaps with you but not on which queries, and the Ads Transparency Center shows creatives but not keywords. Third-party tools model keyword lists from panel and scrape data, useful as directional estimates, but they should always be labeled as estimates, never presented as fact.
How often should I run a keyword gap analysis?
A full pass quarterly and a light spot check monthly works for most accounts. The full pass rebuilds your inventory and reclassifies the gap; the monthly check just scans Auction Insights for new competitors and the Transparency Center for new creative themes.
Should gap keywords go into my existing campaigns?
No. Put them in dedicated test campaigns with capped budgets, phrase and exact match, and a pre-written kill rule. Mixing unproven themes into proven campaigns contaminates both the test and your existing performance data.
The manual version of this workflow spans four tools and at least one afternoon. AdWhispr collapses it into one conversation: ask research_competitor_keywords what a rival bids on, diff it against your own account in the same thread, classify the buckets by talking through them, then hand the winners bucket to launch_search_campaign and it becomes a real, capped test campaign without leaving the chat. The whole loop, research to live campaign, is the workflow shown in from research to launch in one prompt. Connect the MCP server at https://adwhispr.com/api/mcp or run npx adwhispr-mcp-server config; it works in Claude, ChatGPT, Cursor, and Claude Code, and the Free plan needs no credit card.
Stop guessing what rivals bid on, start citing your inputs: run a competitor keyword gap analysis with AdWhispr.
