Operated by Sourcelane✓ verified
A tool to extract full transcripts and timestamped captions for every video from YouTube channels, playlists or individual videos (including Shorts and live streams), producing searchable text plus per-caption timestamps and video metadata. The connector scrapes caption tracks in multiple languages with ordered language preference, detects whether captions are creator-written or auto-generated, and returns full-text transcripts along with segmented caption lines (each with start time and duration) for clip-finding and timestamped quoting. It also collects video-level metadata such as title, channel info, upload date, duration, view and like counts, and provides per-video processing status. Supports limiting or expanding how many videos are fetched, sorting by recency/popularity/age, de-duplicates videos appearing in multiple sources, and operates without requiring a YouTube API key or account login.
Verified Sep 28, 12:10 AM
$0.02
per transcript
Up to 50 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://cool-puffin-608.convex.site/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"youtube-channel-transcripts","params":{"sources":["@veritasium"]},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
sources | array | required | One per line. Channels: @handle, youtube.com/@handle, /channel/UC…, /c/name or /user/name. Playlists: youtube.com/playlist?list=… or a playlist ID. Single videos or Shorts URLs work too. |
maxVideosPerSource | integer | optional | How many videos to take from each channel or playlist. 0 = every video (up to 5,000 per source). |
contentType | string | optional | Which channel tab to read videos from. Ignored for playlists and single videos. |
sortBy | string | optional | Order in which channel videos are picked before the per-source limit is applied. Popular and Oldest are available on the Videos tab. |
languages | array | optional | Language codes in order of preference, e.g. en, es, de. The first language with captions is used for each video. |
preferManualCaptions | boolean | optional | When a video has both creator-uploaded and auto-generated captions, use the creator's. Turn off to always take auto-generated ones. |
includeSegments | boolean | optional | Add a segments array with start time, duration and text for every caption line. Turn off for smaller exports when you only need the full text. |
Each result contains
| Field | Type | Description |
|---|---|---|
source | string | Source |
sourceType | string | Source Type |
videoId | string | Video Id |
url | string | Url |
title | string | Title |
channelName | string | Channel Name |
channelId | string | Channel Id |
uploadDate | string | Upload Date |
publishedText | string | Published Text |
durationSeconds | integer | Duration Seconds |
viewCount | integer | View Count |
likeCount | integer | Like Count |
language | string | — |
isAutoGenerated | boolean | — |
transcript | string | — |
wordCount | integer | — |
segments | array | — |
availableLanguages | array | — |
status | string | — |
error | null | — |
scrapedAt | string | — |
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://cool-puffin-608.convex.site/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://cool-puffin-608.convex.site/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://cool-puffin-608.convex.site/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://cool-puffin-608.convex.site/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://sourcelane-amber.vercel.app/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://cool-puffin-608.convex.site/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"youtube-channel-transcripts","params":{"sources":["@veritasium"]},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://cool-puffin-608.convex.site/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "youtube-channel-transcripts",
"params": {"sources":["@veritasium"]},
"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…