Operated by Sourcelane✓ verified
Get the full transcript of any TikTok video as text with timestamps. Paste video links or a username to transcribe a whole profile in bulk.
A tool that converts TikTok videos into structured, searchable text and timing data by extracting existing TikTok captions or applying speech-to-text to video audio. Outputs include full spoken-text transcripts with detected language and word counts, fine-grained timestamped segments (start/end seconds) for every line of speech suitable for subtitles and clipping, an indication of whether the text came from platform captions or from audio transcription, available caption languages, and video metadata such as creator identifiers and display name, caption text, post date, duration, and engagement metrics. The connector supports bulk processing of multiple videos or entire profiles, language selection/detection, and produces timestamped transcripts optimized for content repurposing, analysis, and automated NLP/LLM workflows.
Verified Oct 25, 10:11 PM
$0.005
per video transcript
Up to 100 per call. Only pay for results returned; failed calls are refunded.
Content research
Read what top creators say without watching hours of video
Repurposing
Turn TikToks into blog posts, newsletters, tweets or scripts
Hook and script analysis
Study the first lines of viral videos to write better hooks
Brand and product monitoring
Find every time a creator mentions a brand or competitor
AI and LLM workflows
Feed clean transcripts into language models for summaries and insights
Subtitles and accessibility
Export timestamped segments as captions
TikTok video URLs, short links or video IDs, one per line.
Usernames or profile URLs.
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":"tiktok-transcript-scraper","params":{"videoUrls":["https://www.tiktok.com/@stoolpresidente/video/7499229683859426602"]},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
videoUrls | array | optional | TikTok video URLs, short links (vm.tiktok.com) or video IDs, one per line (up to 500 per run). |
profiles | array | optional | Usernames (with or without @) or profile URLs. The latest videos of each profile are transcribed. |
maxVideosPerProfile | integer | optional | How many of the most recent videos to transcribe for each profile (1-500). |
language | string | optional | Two-letter language code (e.g. en, es, de). When TikTok has captions in several languages this one is picked; otherwise the original language is used. Leave empty for the video's own language. |
aiFallback | boolean | optional | When a video has no TikTok captions, listen to the audio and transcribe it with speech-to-text (charged per minute of video). Turn off to only return videos that already have captions. |
includeTimestamps | boolean | optional | Add a segments list with start and end times (in seconds) for every line of speech. |
Each result contains
| Field | Type | Description |
|---|---|---|
inputUrl | string | — |
profile | string | — |
status | string | Status |
message | null | — |
source | string | — |
videoId | string | — |
videoUrl | string | Video |
author | string | Creator |
authorName | string | — |
description | string | — |
createdAt | string | — |
durationSeconds | number | Seconds |
views | integer | Views |
likes | integer | — |
comments | integer | — |
shares | integer | — |
language | string | Language |
availableLanguages | array | — |
transcript | string | Transcript |
wordCount | integer | Words |
segments | array | — |
scrapedAt | string | — |
Pick your tool and connect in under a minute. Then just ask — for example: “What are the top 25 TikTok videos for 'protein coffee' this week, and what hooks do they use?”
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":"tiktok-transcript-scraper","params":{"videoUrls":["https://www.tiktok.com/@stoolpresidente/video/7499229683859426602"]},"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": "tiktok-transcript-scraper",
"params": {"videoUrls":["https://www.tiktok.com/@stoolpresidente/video/7499229683859426602"]},
"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…