Operated by Sourcelane✓ verified
Extract the full chat from any YouTube livestream or premiere - every message with its author, timestamp, membership badge and Super Chat amount.
A scraper for YouTube live chat that extracts every chat message from livestreams, premieres, and archived replays into one message-level record per chat entry. Outputs include message text with custom emoji preserved as shortcodes, message classification (regular messages, paid messages, paid stickers, memberships and membership gifts), the message timestamp and offset within the stream, author metadata and badges, membership and moderation status, gift counts for gifted memberships, and parsed paid-contribution details (numeric amount and currency across YouTube-supported currencies). The connector also produces per-video chat aggregates with message counts by type, unique chatter counts, per-currency paid totals, top chatters and the chat time range, and it can capture new messages while a stream is actively running.
Verified Sep 28, 3:56 AM
$0.0005
per chat message
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Super Chat revenue analysis
Total earnings per currency and identify who contributed
Audience research
Extract viewer questions, reactions and requests from chat text
Community management
Export full chat logs for moderation review or records
Highlight finding
Detect chat spikes to identify noteworthy moments in a stream
Creator and sponsor due diligence
Measure real engagement on a streamer's audience
Esports and event archives
Preserve chat alongside broadcast recordings
URLs or IDs of YouTube livestreams, premieres or their archived replays.
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":"youtube-live-chat-scraper","params":{"videoUrls":["https://www.youtube.com/watch?v=Z1sqWFs86uU"]},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
videoUrls | array | required | URLs or IDs of YouTube livestreams, premieres or their archived replays. Up to 20 per run. |
maxMessagesPerVideo | integer | optional | Stop after this many chat messages per video. Set 0 to read the whole chat. |
messageTypes | string | optional | Which chat items to keep. Paid only is the cheapest way to pull a stream's Super Chat revenue. |
startOffsetSecs | integer | optional | For replays: only keep chat from this point in the video onwards. 0 starts at the beginning. YouTube serves chat replay in order, so earlier chat is still read - it is simply not returned. |
endOffsetSecs | integer | optional | For replays: stop at this point in the video. 0 reads to the end of the stream. |
liveCollectSecs | integer | optional | For streams that are live right now: how long to keep listening for new messages before finishing the run. |
Each result contains
| Field | Type | Description |
|---|---|---|
videoId | string | Video Id |
videoUrl | string | Video Url |
videoTitle | string | Video Title |
channelTitle | string | Channel Title |
isReplay | boolean | Is Replay |
messageId | string | Message Id |
messageType | string | Message Type |
offsetSeconds | null | Offset Seconds |
offsetTimestamp | null | Offset Timestamp |
publishedAt | string | Published At |
authorName | string | Author Name |
authorChannelId | string | Author Channel Id |
authorChannelUrl | string | — |
authorPhotoUrl | string | — |
isOwner | boolean | — |
isModerator | boolean | — |
isVerified | boolean | — |
isMember | boolean | — |
memberBadge | null | — |
message | string | — |
amountText | null | — |
amountValue | null | — |
amountCurrency | null | — |
giftCount | null | — |
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. 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":"youtube-live-chat-scraper","params":{"videoUrls":["https://www.youtube.com/watch?v=Z1sqWFs86uU"]},"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-live-chat-scraper",
"params": {"videoUrls":["https://www.youtube.com/watch?v=Z1sqWFs86uU"]},
"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…