Operated by Sourcelane✓ verified
A YouTube rank-tracking connector that finds where specified videos and channels rank in YouTube search for given keywords, by country and language, and reports position, presence, position history and competitor context. It scans YouTube search results (counting organic video results in the order shown), supports optional inclusion of Shorts, treats a channel target by identifying its best-ranked video and enumerating all its positions, and compares each run against the previous check to compute movement and numeric position change. The connector also extracts competing results for each keyword with metadata such as title, channel, views and upload age, and provides search-context information including estimated total results, how many results were scanned, and the timestamp and locale for each check. It operates without requiring YouTube API credentials and returns one record per keyword × tracked video/channel containing ranking, presence, multi-position listings, matched-video metadata, competitor listings, movement since last check, and search-context metadata.
Verified Sep 28, 3:56 AM
$0.005
per keyword rank
Up to 100 per call. Only pay for results returned; failed calls are refunded.
| 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":"youtube-rank-tracker","params":{"keywords":["espresso machine review","best espresso machine"],"targets":["@jameshoffmann"]},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
keywords | array | required | Search terms to check rankings for, one per line (e.g. 'espresso machine review'). Each keyword is searched once and every target is matched against the same results. |
targets | array | required | Your videos and/or channels, one per line. Accepts video URLs or IDs (youtube.com/watch?v=..., youtu.be/..., /shorts/...) and channel URLs, @handles or channel IDs (UC...). A channel matches any of its videos in the results; its best position is reported. |
country | string | optional | Country whose YouTube search results you want to see. Searches are made as a viewer located in this country, because YouTube ranks results differently by location. |
language | string | optional | YouTube interface language code, e.g. en, de, es or pt-BR. This changes rankings noticeably, so keep it the same between runs you want to compare. |
searchDepth | integer | optional | How many search results to scan per keyword when looking for your targets. Targets ranking beyond this are reported as not found. Max 200. |
includeShorts | boolean | optional | Count Shorts (including the Shorts shelves shown inside search results) as ranked positions. When off, positions count regular video results only, which is how most people read YouTube rankings. |
topCompetitors | integer | optional | How many of the top-ranking videos to include with each row so you can see who outranks you. Set 0 to leave them out. |
Each result contains
| Field | Type | Description |
|---|---|---|
keyword | string | Keyword |
target | string | Target |
targetType | string | Type |
targetId | string | — |
found | boolean | Found |
position | integer | Position |
allPositions | array | — |
matchedVideoId | string | — |
matchedTitle | string | Matched video |
matchedUrl | string | URL |
matchedIsShort | boolean | — |
views | integer | Views |
channelName | string | Channel |
channelId | string | — |
previousPosition | null | Previous |
positionChange | null | Change |
previousCheckedAt | null | — |
movement | string | Movement |
country | string | — |
language | string | — |
includeShorts | boolean | — |
searchDepth | integer | — |
scannedResults | integer | Scanned |
estimatedResults | integer | — |
topCompetitors | array | — |
checkedAt | string | Checked at |
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.
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":"youtube-rank-tracker","params":{"keywords":["espresso machine review","best espresso machine"],"targets":["@jameshoffmann"]},"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": "youtube-rank-tracker",
"params": {"keywords":["espresso machine review","best espresso machine"],"targets":["@jameshoffmann"]},
"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…