Sourcelane

YouTube Keyword Research Tool

YouTube

Operated by Sourcelane✓ verified

A YouTube keyword research connector that expands one or more seed keywords into large sets of real YouTube search queries using YouTube's autocomplete service and multiple expansion methods (direct suggestions, alphabetic expansion, question/modifier expansion). For each suggested query the connector optionally measures competition by scraping the current top results and computing demand and competition metrics: estimated number of competing videos, aggregated top-10 view statistics (average, median, min, max), count of recent top results (freshness), count of distinct channels in top positions, proportion of Shorts in the top results, and metadata for the top video and the top-results list. These signals are combined into a single 0–100 opportunity score that balances demand, competition and freshness. The connector supports market targeting by country and language and can run as suggestions-only or include full competition measurement.

Verified Sep 28, 3:56 AM

$0.005

per keyword

Up to 100 per call. Only pay for results returned; failed calls are refunded.

What people use it for

Trust & reliability

7d uptime trend
WindowUptimeSuccess ratep50p95Calls
24h————0
7d————0
30d————0

Calling contract

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":"youtube-keyword-research","params":{"seedKeywords":["sourdough bread"]},"maxResults":10}'

Request params

FieldTypeRequiredDescription
seedKeywordsarrayrequiredTopics to research, one per line. Each seed is expanded through YouTube's own search suggestions.
expansionstringoptionalHow to expand each seed. Alphabet soup queries the seed followed by every letter a-z; Questions adds how/what/why prefixes and best/vs/tutorial suffixes; Both combines them for the widest list.
maxKeywordsPerSeedintegeroptionalKeywords to keep for each seed, in the order YouTube suggests them. 0 = everything found, up to 2,000 per seed.
includeCompetitionbooleanoptionalRun a YouTube search for every keyword to capture the estimated result count, top-10 view statistics, freshness, unique channels and an opportunity score. Turn off for a suggestions-only run that is much faster.
countrystringoptionalTwo-letter country code that controls which suggestions and rankings YouTube returns, e.g. US, GB, AU, DE.
languagestringoptionalLanguage code for suggestions and search, e.g. en, de, pt-BR.

Each result contains

FieldTypeDescription
keywordstringKeyword
seedKeywordstringSeed Keyword
sourcestringSource
suggestionRankintegerSuggestion Rank
wordCountintegerWord Count
isQuestionbooleanIs Question
estimatedResultsintegerEstimated Results
top10AvgViewsintegerTop10 Avg Views
top10MedianViewsintegerTop10 Median Views
top10MinViewsintegerTop10 Min Views
top10MaxViewsintegerTop10 Max Views
top10VideosUnderOneYearintegerTop10 Videos Under One Year
top10UniqueChannelsinteger—
top10ShortVideosinteger—
topVideoTitlestring—
topVideoChannelstring—
topVideoViewsinteger—
topVideoUrlstring—
topVideosarray—
opportunityScoreinteger—

Use YouTube Keyword Research Tool from Claude, ChatGPT or Cursor

Pick your tool and connect in under a minute. Then just ask — for example: “Get the transcript of this video and turn it into a blog outline: <url>”

Connect Claude

Web, desktop and mobile. Paste one URL.

  1. 1Copy your personal connector URL
  2. 2In Claude open Settings → Connectors → Add custom connector
  3. 3Paste the URL and click Add — done
Manual setup (config files, REST, Python) +

Claude Code

Adds the Sourcelane MCP server with your key as a header.

terminal
claude mcp add --transport http sourcelane https://api.usesourcelane.com/mcp \
  --header "Authorization: Bearer sl_live_your_agent_key"

Claude Desktop (config file)

Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.

claude_desktop_config.json
{
  "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"
      }
    }
  }
}

Cursor & Windsurf

Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).

mcp.json
{
  "mcpServers": {
    "sourcelane": {
      "url": "https://api.usesourcelane.com/mcp",
      "headers": {
        "Authorization": "Bearer sl_live_your_agent_key"
      }
    }
  }
}

VS Code

Save as .vscode/mcp.json. VS Code prompts for your key once.

.vscode/mcp.json
{
  "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
    }
  ]
}

ChatGPT Custom GPT (Actions)

Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.

OpenAPI schema URL
https://usesourcelane.com/openapi.json

REST

One POST. Pass maxResults to cap cost.

curl
curl -X POST https://api.usesourcelane.com/v1/call \
  -H "Authorization: Bearer sl_live_your_agent_key" \
  -H "Content-Type: application/json" \
  -d '{"listing":"youtube-keyword-research","params":{"seedKeywords":["sourdough bread"]},"maxResults":10}'

Python, LangChain, CrewAI, OpenAI Agents SDK…

Wrap the REST call as a tool, or point an MCP client at the endpoint.

python
import requests

res = requests.post(
    "https://api.usesourcelane.com/v1/call",
    headers={"Authorization": "Bearer sl_live_your_agent_key"},
    json={
        "listing": "youtube-keyword-research",
        "params": {"seedKeywords":["sourdough bread"]},
        "maxResults": 10,
    },
    timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])

Reviews

—

0 reviews

5
0
4
0
3
0
2
0
1
0

Leave a review

Loading reviews…