Operated by Sourcelane✓ verified
See every Google keyword a competitor ranks for that you don't, with search volume, position, ranking URL, traffic estimate and keyword difficulty.
A tool for competitive SEO keyword analysis that identifies keywords competitors rank for and the target domain does not, compares shared rankings, or exports all ranked keywords for one or more domains; it returns per-keyword records with domain comparison, keyword text, search volume, cost-per-click estimates, competition and difficulty scores, search intent, ranking position(s) and movement/trend information, the exact ranking page and title, estimated organic visits and estimated traffic value in USD, monthly search trends, SERP feature indicators, and geographic market context. Core mechanisms include querying a continuously refreshed Google rankings database across global markets and producing keyword-level metrics for content gap analysis, competitor research, ranking audits, and traffic estimation. Operates in three analysis modes: gap discovery (competitor-only keywords), shared-keyword comparison (side-by-side positions), and full ranked-keyword export for domains; supports country and language selection across 90+ Google markets and provides periodic updates to keyword ranking data.
Verified Oct 25, 10:11 PM
$0.002
per keyword
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Content gap analysis
Build content plans from keywords sending traffic to competitors
Competitor research
Identify pages and topics driving a competitor's organic traffic
SEO audits
Export every keyword a site ranks for with positions and traffic estimates
Quick wins
Find shared keywords where a competitor outranks you and you can improve rankings
Agency pitches
Demonstrate which keywords competitors are winning for prospective clients
Keyword gap: keywords each competitor ranks for on Google that your domain does not.
Your website's domain, e.g.
Competitor domains, one per line.
Optional settings
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"competitor-keyword-gap-finder","params":{"mode":"gap"},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | Keyword gap: keywords each competitor ranks for on Google that your domain does not. Shared keywords: keywords you and a competitor both rank for, with both positions. Ranked keywords: every keyword each domain (yours and competitors) ranks for. |
domain | string | optional | Your website's domain, e.g. example.com. URLs and www. are fine. Required for Keyword gap and Shared keywords. |
competitors | array | optional | Competitor domains, one per line (up to 20). Each competitor is compared with your domain separately. |
market | string | optional | Which Google market to analyse rankings and search volume for. |
maxResultsPerDomain | integer | optional | Maximum keywords to return per domain (Ranked keywords) or per competitor (Keyword gap / Shared keywords), sorted by search volume, highest first. Up to 10,000. |
minSearchVolume | integer | optional | Only return keywords with at least this many monthly searches. 0 returns everything. |
maxPosition | integer | optional | Only return keywords where the domain ranks at or above this position (1 = top result). 10 keeps only first-page rankings; 100 keeps everything. |
Each result contains
| Field | Type | Description |
|---|---|---|
keyword | string | Keyword |
searchVolume | integer | Monthly Searches |
cpc | number | CPC (USD) |
competition | number | — |
competitionLevel | string | — |
lowTopOfPageBid | number | — |
highTopOfPageBid | number | — |
keywordDifficulty | integer | Difficulty |
searchIntent | string | Intent |
secondaryIntents | array | — |
trendMonthlyPct | integer | — |
trendQuarterlyPct | integer | — |
trendYearlyPct | integer | — |
monthlySearches | array | — |
serpFeatures | array | — |
metricsUpdatedAt | string | — |
mode | string | — |
domain | string | Domain |
comparedTo | string | — |
position | integer | Position |
absolutePosition | integer | — |
url | string | Ranking URL |
title | string | — |
estimatedTraffic | number | Est. Traffic |
estimatedTrafficValueUsd | number | — |
previousPosition | null | — |
isNew | boolean | — |
movement | string | Movement |
isFeaturedSnippet | boolean | — |
comparedPosition | null | Your Position |
comparedUrl | null | — |
location | string | — |
locationCode | integer | — |
languageCode | string | — |
scrapedAt | string | — |
Pick your tool and connect in under a minute. Then just ask — for example: “For these 50 domains, find contact emails and what e-commerce platform they run on.”
Connect Claude
Web, desktop and mobile. One click, then confirm.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.usesourcelane.com/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://api.usesourcelane.com/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"competitor-keyword-gap-finder","params":{"mode":"gap"},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "competitor-keyword-gap-finder",
"params": {"mode":"gap"},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…