Keyword Gap Analysis: Competitor Keywords You Don't Rank For
Pricing
from $1.00 / 1,000 gap keywords
Keyword Gap Analysis: Competitor Keywords You Don't Rank For
Compare your domain with up to 5 competitors and get the keywords they rank for on Google and you don't, with search volume, CPC, keyword difficulty, intent and each competitor's position and URL. Also finds keywords where they outrank you. No API key needed.
Pricing
from $1.00 / 1,000 gap keywords
Rating
0.0
(0)
Developer
VNCNT Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 hours ago
Last modified
Categories
Share
Put in your domain and up to 5 competitors and get the Google keywords they rank for and you don't. Every keyword comes back as one row with its monthly search volume, CPC, keyword difficulty (0-100) and search intent, how many of your competitors rank for it, each competitor's position and ranking URL, and the best one to copy. Two more modes show keywords where a competitor outranks you (usually the quickest wins) and every keyword you share.
It's the keyword gap report from the big SEO suites, without the monthly subscription. No API key, no login, $0.02 per competitor plus $1 per 1,000 keywords.
Built for:
- SEO freelancers and agencies: a content plan for a client in one run, backed by what their competitors already rank for.
- Shopify, Etsy and print-on-demand store owners: see which product and gift searches bring traffic to the bigger stores in your niche.
- Bloggers and KDP authors with their own site: find the topics similar sites rank for that you've never written about.
- Developers and AI agents: one call returns clean JSON you can sort, filter and feed into a content brief.
What you get
Row (type) | What's in it | Charged |
|---|---|---|
keyword | keyword, gapType, searchVolume, cpc, competition, keywordDifficulty, intent, searchVolumeTrendYearly, competitorsRanking, bestCompetitor, bestPosition, bestUrl, yourPosition, yourUrl, positionsBehind, competitorTraffic, positions (domain to position), competitors (domain, position, URL, estimated traffic) | gap-keyword |
competitor | competitor, yourDomain, mode, country, status, totalKeywords (the full size of the gap with your filters), keywordsReturned, keywordsDelivered | competitor-compared |
skipped | inputs that weren't valid or weren't compared, with the reason | free |
When several competitors rank for the same keyword, it's merged into one row, so a keyword with competitorsRanking: 3 is one all three of them get traffic from.
Input examples
The classic gap, top 100 keywords:
{ "yourDomain": "example.com", "competitors": ["competitor-one.com", "competitor-two.com"], "maxKeywords": 100 }
Page-one keywords only, easiest first, without other brands:
{ "yourDomain": "example.com", "competitors": ["competitor-one.com"], "maxCompetitorPosition": 10,"sortBy": "difficulty", "excludeKeywordsContaining": ["amazon", "etsy"] }
Keywords where you already rank but a competitor beats you, in the UK:
{ "yourDomain": "example.co.uk", "competitors": ["competitor.co.uk"], "mode": "behind", "country": "GB" }
Tips
- Max keyword rows is your cost cap: 100 rows = $0.10, 1,000 rows = $1.00, plus $0.02 per competitor and the $0.005 run start.
- Branded keywords (ones that contain your brand or the competitor's, taken from the domain) are skipped by default, since you can't really win "competitor login".
totalKeywordson the competitor row tells you how big the whole gap is, even if you only asked for 100 rows.- Runs take a few seconds. Data is DataForSEO's Google keyword database, refreshed monthly, so positions are a recent snapshot, not a live check of today's results.
- To see the competitor's full keyword list (not just the gap), use Website Traffic Checker.
Output examples
A missing row (the competitor ranks, you don't):
{"type": "keyword", "keyword": "customised tshirt", "gapType": "missing","searchVolume": 135000, "cpc": 7.82, "competition": "HIGH", "keywordDifficulty": 51, "intent": "transactional","competitorsRanking": 1, "bestCompetitor": "printful.com", "bestPosition": 7,"bestUrl": "https://www.printful.com/make-your-own-shirt","yourDomain": "gelato.com", "yourPosition": null, "competitorTraffic": 5.5,"positions": { "printful.com": 7 }, "country": "US"}
A behind row (you both rank, they're ahead):
{"type": "keyword", "keyword": "print on demand", "gapType": "behind","searchVolume": 22200, "cpc": 8.78, "keywordDifficulty": 76, "intent": "commercial","bestCompetitor": "printify.com", "bestPosition": 3, "bestUrl": "https://printify.com/print-on-demand/","yourPosition": 4, "yourUrl": "https://www.gelato.com/print-on-demand", "positionsBehind": 1}
A competitor summary row:
{ "type": "competitor", "competitor": "printful.com", "yourDomain": "gelato.com", "mode": "missing","country": "US", "status": "ok", "totalKeywords": 17299, "keywordsReturned": 50, "keywordsDelivered": 48 }
The dataset has two views, Gap keywords and Competitor summary. Export to CSV, Excel or JSON, or send results to Google Sheets, Slack or email with Apify integrations.
Pricing (pay per event)
| Event | Price | When it is charged |
|---|---|---|
| Actor start | $0.005 | once per run |
competitor-compared | $0.02 | one competitor compared with your domain that returned keywords |
gap-keyword | $0.001 | one keyword row delivered (merged across competitors) |
So 1 competitor with 100 keywords costs $0.125, and 3 competitors with 300 keywords cost $0.365.
You are not charged for:
- competitors with no matching keywords, and competitors the data provider couldn't answer for;
- skipped inputs, and anything beyond your run's maximum charge. The run lowers the keyword limit to fit your maximum charge and says so in the log.
Apify free plan: 2 competitors and 50 keywords per run. Any paid Apify plan unlocks 5 competitors and 1,000 keywords.
Use from AI agents (MCP)
AI assistants such as Claude, ChatGPT and Cursor can run this Actor through Apify's MCP server (https://mcp.apify.com). The agent can look up the Actor, read its input schema, run it and read the results. Runs use your own Apify account and are charged at the prices on this page.
- Actor name:
vncntlabs/keyword-gap-finder - Server URL with only this tool:
https://mcp.apify.com?tools=vncntlabs/keyword-gap-finder. The defaulthttps://mcp.apify.comalso works; the agent can then search Apify Store and call the Actor by name. - Claude (desktop app or claude.ai): Settings > Connectors > Add custom connector, paste the server URL, then sign in to Apify.
- ChatGPT: turn on Developer mode, then Settings > Apps & Connectors > Create, paste the server URL and choose OAuth.
- Cursor: run
/add-plugin apifyin Cursor chat and connect the Apify MCP server under Cursor Settings > Tools & MCPs, or add the server tomcp.json:
{ "mcpServers": { "apify": { "url": "https://mcp.apify.com?tools=vncntlabs/keyword-gap-finder" } } }
Example prompt: "Use the Apify Actor vncntlabs/keyword-gap-finder to find 50 keywords competitor.com ranks for in the top 10 that example.com doesn't, easiest first, and group them into blog post ideas."
To cap the cost of an agent's run, it can pass maxTotalChargeUsd in the run options.
FAQ
Where does the data come from? DataForSEO's Google keyword and ranking database (DataForSEO Labs), the same kind of data the big SEO suites use. Search volume is Google Ads monthly volume; difficulty and positions are DataForSEO's estimates.
Why is my domain showing no gap? Very new or very small sites may not be in the keyword database yet. The competitor row then says no-data and you aren't charged for it.
Can I compare more than 5 competitors? Not in one run. Run it again with the next batch; each competitor costs the same either way.
Does it check subdomains? It compares whole domains, so blog.example.com rankings count for example.com.
Related tools: Keyword Search Volume for volume on your own list, Google Rank Tracker to track the keywords you go after, and Website SEO Audit to fix your pages first.
Questions or a filter you'd like added? Email hello@vncntlabs.com.
Not affiliated with Google, Semrush or Ahrefs.