A keyword gap is simple in theory: it's a keyword your competitors rank for that you don't. Finding them manually is where founders waste hours. Here's how to do it efficiently — and which gaps are actually worth targeting.
What makes a keyword gap worth targeting
Not all gaps are gaps worth closing. You could spend two months writing articles about keywords that will never bring you a customer. The three filters that matter:
Search volume: At least 200 searches per month in English (lower floors apply for French, German, Spanish — native speakers search less for niche tools). Below that threshold, even a #1 ranking might bring fewer than 20 visitors a month.
Keyword difficulty: Under 70. Above that, you're competing against well-funded editorial teams with thousands of backlinks. For most indie SaaS products, difficulty under 40 is where the real opportunity is.
Intent match: This is the one most founders skip. A keyword like "invoice generator free" is a gap if your competitors rank for it — but if you sell a paid B2B invoicing product, every click is wasted. The searcher wants something free. Target gaps where the person searching has a reason to actually use your product.
Method 1: Manual check with Google Search Console + a free tool
This takes about 45 minutes per competitor and doesn't scale, but it works:
- Export your top 500 keywords from GSC (Search Console → Performance → Export)
- Use Ubersuggest's free tier or Semrush's trial to pull your top competitor's keyword list (top 300 sorted by traffic)
- Create a spreadsheet. Column A: your keywords. Column B: competitor keywords. In column C:
=COUNTIF($A:$A, B2)— this flags every competitor keyword you don't rank for - Filter column C to 0. That's your raw gap list
- Manually remove garbage (branded terms, navigational queries, keywords with intent that doesn't match your product)
The problem: this is per-competitor. If you have 5 competitors, you're doing this 5 times. And you're looking at historical snapshots, not live rankings.
Method 2: Pull competitor keywords from DataForSEO or SerpApi
If you're comfortable with a spreadsheet and a small API bill, this is faster:
DataForSEO's Labs API gives you the top 300 keywords per domain, with volume, difficulty, and CPC. Pull all your competitors in one call, union the keyword lists, subtract your own GSC keywords, and filter by your thresholds. Cost: roughly $0.002 per domain lookup — a few cents for 5 competitors.
The gap you're looking for: keywords that appear in 2+ competitor lists but not your own. Those are validated by the market, not just one outlier site.
Method 3: Run it automatically
Manual gap analysis is a one-time snapshot. Keyword rankings shift weekly — new competitors enter, old ones drop pages, Google reshuffles. Running this every week manually is not realistic for a solo founder.
The programmatic approach: schedule a weekly pull of your competitors' top keywords, diff them against your GSC data, filter by volume + difficulty + intent, and surface only the actionable ones. That's exactly what WriteGap does on Monday mornings.
The two types of gaps that convert differently
Competitor gaps are keywords two or more of your direct competitors rank for that you don't. These are low-risk: the market has already proven people search for this, and product-adjacent sites already answer it. Your job is to do it better.
Unclaimed keywords are related to your product category but nobody in your competitive set ranks for them yet. These are higher risk but higher reward — you could own a keyword before anyone else builds a page for it. Finding them requires starting from your product's core function and expanding outward using keyword suggestion APIs.
A good weekly brief should include both. Competitor gaps give you safe volume. Unclaimed gaps give you a chance to get ahead.
Common mistakes
Targeting branded competitor keywords. "Semrush pricing" might have 8,000 monthly searches, but 90% of those searchers already have a vendor in mind. You might rank #1 for it and convert almost nobody.
Ignoring difficulty. A gap with 5,000 searches per month and difficulty 80 will take 18 months to crack. A gap with 600 searches and difficulty 25 might get you to page 1 in 8 weeks. Volume isn't everything.
Writing for the gap, not for the intent. The article you write to rank for a keyword needs to match what the searcher expects to find. Look at the top 3 results for your target keyword before you write a word. That's your template for what Google thinks the searcher wants.
What to do with the gaps you find
Once you have a filtered list, prioritize by: (low difficulty × reasonable volume × high intent match). Pick two or three gaps per week. For each one, check the top 3 results and note what sections they cover. Your article needs those sections plus at least one angle the top results miss — that's your edge.
Write the article with the target keyword in the H1, in the first 100 words, and in two or three H2 headings. Add schema markup. Submit to GSC for indexing. Then track weekly — most articles hit page 2 within 3–6 weeks and page 1 within 8–12 if the difficulty was honestly low.
Finding keyword gaps isn't the hard part. The hard part is being disciplined enough to only target the gaps that will actually bring you customers.