TikTok Transcript & Subtitle Scraper
Pricing
from $1.00 / 1,000 transcript extracteds
TikTok Transcript & Subtitle Scraper
Extract TikTok subtitles & transcripts instantly from native captions — no Whisper, no API key. Get timestamped JSON, SRT, VTT, plain text, or LLM-ready output. Supports video URLs, short links, and @profile batch scraping. Rich metadata included. Pay only for successful extractions.
Pricing
from $1.00 / 1,000 transcript extracteds
Rating
0.0
(0)
Developer
Richard Feng
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
TikTok Subtitle & Transcript Scraper
Extract subtitles and transcripts from any public TikTok video — instantly, accurately, at scale. No API key, no Whisper, no speech-to-text. Just the exact captions TikTok already generated, delivered in the format you need.
💡 Why this Actor?
Most TikTok transcript tools on Apify use Whisper AI to re-transcribe audio. That's slow, expensive, and can hallucinate words that were never said.
This Actor takes a different approach: it extracts TikTok's native captions directly from their CDN. The same subtitles viewers see on-screen, pulled in milliseconds instead of minutes.
| This Actor | Whisper-based actors | |
|---|---|---|
| Speed | ~2s per video | 10–30s per video |
| Accuracy | Exact (TikTok's own captions) | ~95% (AI can mishear) |
| Cost | Pay per result only | Pay per result + Whisper API |
| Languages | All that TikTok provides | Depends on model |
🚀 Quick start
Paste one or more TikTok URLs and hit Start:
{"urls": ["https://www.tiktok.com/@tiktok/video/7627209981670001950"]}
That's it. You'll get the full transcript with timestamps, metadata, and engagement stats.
📋 What you can pass as input
The urls field accepts any mix of:
https://www.tiktok.com/@username/video/7123456789012345678 (video URL)https://vm.tiktok.com/ZMrAbCdEf (short link)https://vt.tiktok.com/ZSrXyZ123 (short link)https://www.tiktok.com/t/ZTRaBcDeF (short link)https://www.tiktok.com/@username (all videos from profile)@username (profile shorthand)7123456789012345678 (raw video ID)
When you pass a profile URL or @username, the Actor enumerates that user's videos and extracts subtitles from each one. Use maxVideos to limit how many.
📋 Input reference
| Field | Type | Default | Description |
|---|---|---|---|
urls | string[] | required | TikTok URLs, short links, @username handles, or raw video IDs |
outputFormat | select | json | json srt vtt text llm |
languages | string[] | ["eng"] | Preferred languages in priority order. Prefix matching supported — eng matches eng-US |
includeAutoGenerated | boolean | true | Include TikTok's auto-generated captions |
maxVideos | integer | 0 | Max videos to process in total across all inputs. 0 = unlimited. Videos you name explicitly are taken first, then profiles fill whatever budget is left |
maxConcurrency | integer | 3 | Parallel workers (1–10). Lower = safer from rate limits |
proxyConfiguration | object | Apify residential | Proxy to route requests through. Residential is strongly recommended; you can also supply your own proxyUrls, or disable the proxy for local testing |
📤 Example output
Real output from @tiktok/video/7627209981670001950:
{"videoId": "7627209981670001950","url": "https://www.tiktok.com/@tiktok/video/7627209981670001950","title": "your TikTok grandpa @writers cramp is proud of you","authorName": "TikTok","authorId": "tiktok","description": "your TikTok grandpa @writers cramp is proud of you","createTime": "2026-04-10T19:10:35.000Z","playCount": 54600,"likeCount": 3656,"commentCount": 837,"shareCount": 291,"thumbnail": "https://p16-common-sign.tiktokcdn-us.com/...","availableLanguages": ["eng-US"],"language": "eng-US","isAutoGenerated": true,"segments": [{ "text": "I'm 81 years old and I'm known as the TikTok Grandpa", "start": 0.04, "end": 3.64 },{ "text": "my name is Ian Smith", "start": 3.641, "end": 4.721 },{ "text": "and I make positive thinking and motivational videos as writers cramp", "start": 4.722, "end": 9.001 }],"text": "I'm 81 years old and I'm known as the TikTok Grandpa my name is Ian Smith and I make positive thinking and motivational videos...","duration": 77,"wordCount": 243,"segmentCount": 29,"extractedAt": "2026-04-12T02:45:36.000Z","error": null}
The segments array (with start/end timestamps in seconds) is included when outputFormat is json. Other formats populate the text field and optionally srt or vtt.
📤 Output formats
| Format | What you get | Best for |
|---|---|---|
| json | text + segments[] with timestamps | RAG pipelines, structured data, analytics |
| srt | text + srt (SubRip subtitle file) | Video editing, subtitle files |
| vtt | text + vtt (WebVTT subtitle file) | Web players, accessibility |
| text | text only (plain transcript) | Search indexing, simple analysis |
| llm | text cleaned of [Music], speaker labels, annotations | AI training, summarization, content repurposing |
🗂️ Output fields
Every result includes full video metadata alongside the transcript:
| Field | Description |
|---|---|
videoId | TikTok video ID |
url | Canonical video URL |
title / description | Video caption text |
authorName / authorId | Creator display name and handle |
createTime | ISO 8601 publish timestamp |
playCount / likeCount / commentCount / shareCount | Engagement metrics |
thumbnail | Cover image URL |
availableLanguages | All subtitle languages found on this video |
language | Language code of the extracted transcript, e.g. eng-US |
languageName | Human-readable language, e.g. English (United States) |
isAutoGenerated | true if captions are auto-generated, false if creator-uploaded |
segments | Array of { text, start, end } (JSON format only) |
text | Full transcript as a single string |
srt / vtt | Subtitle file content (only when that format is selected) |
duration | Video length in seconds |
wordCount / segmentCount | Transcript statistics |
extractedAt | When the extraction happened |
error | null on success. Inputs that fail still produce a row, with error set and the other fields empty — so every input is accounted for in the dataset |
🎯 Profile scraping
Pass @username or a profile URL to extract subtitles from multiple videos:
{"urls": ["@tiktok"],"maxVideos": 10,"outputFormat": "llm"}
The Actor fetches the profile, enumerates videos via TikTok's creator API, then processes each video's subtitles individually. Pagination is handled automatically — set maxVideos to control how many.
💳 Pricing
Pay-Per-Event — you're charged a fixed amount per successfully extracted transcript. You are never charged for:
- Failed extractions (video has no captions, network error, etc.)
- URL resolution (short links, profile enumeration)
- Videos that are private, deleted, or region-locked
If you set a maximum total charge on the run, the Actor stops as soon as the platform reports that budget is reached, rather than continuing to extract unpaid.
⚙️ Proxy
TikTok blocks datacenter IPs aggressively. Residential proxies are strongly recommended for reliable operation on Apify. The Actor defaults to Apify's residential proxy group and rotates the proxy session on every video.
You can change this with the proxyConfiguration input — pick a different Apify proxy group, supply your own proxyUrls, or turn the proxy off entirely for small local batches.
⚠️ Limitations
- Public videos only — private or restricted content is not accessible
- Existing captions only — this Actor extracts captions that TikTok already has. Videos without any subtitles (no auto-generated or creator-uploaded captions) will return an error. For those, you need a Whisper-based transcription tool
- Auto-caption availability — TikTok doesn't generate captions for every video. Very short clips, music-only content, or videos in unsupported languages may not have captions
- Thumbnail URLs expire — TikTok serves cover images from a signed CDN, and the
thumbnaillink stops working within hours. Download the image if you need to keep it - Rate limits — TikTok rate-limits requests per IP. The Actor handles this with proxy session rotation and configurable concurrency, but very large batches may need lower concurrency settings
💡 Use cases
- RAG pipelines — feed TikTok transcripts into vector databases for retrieval-augmented generation
- Content repurposing — convert viral TikToks into blog posts, newsletters, or threads
- Competitive analysis — extract and analyze competitor content at scale
- Trend research — analyze language, topics, and messaging across thousands of videos
- Accessibility — generate subtitle files (SRT/VTT) for reposting on other platforms
- Training data — build multilingual datasets from TikTok's auto-generated captions
- SEO — make TikTok video content searchable and indexable
🤖 Use with AI agents
This Actor is callable as a tool by any MCP-capable agent — Claude, Cursor, VS Code — or by your own code, with no wrapper and nothing extra to deploy.
Connect over MCP
https://mcp.apify.com?tools=autofacts/tiktok-subtitle-transcript-scraper
In a client that reads an mcpServers configuration block:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=autofacts/tiktok-subtitle-transcript-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
The agent reads this Actor's parameters and their descriptions straight from the input schema, and the hosted server infers the result field types from the dataset schema — so a model knows what to send and what comes back before it ever calls anything.
Or call the API directly
curl -X POST "https://api.apify.com/v2/acts/autofacts~tiktok-subtitle-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"urls": ["https://www.tiktok.com/@tiktok/video/7627209981670001950"], "languages": ["eng"]}'
The response body is the dataset records described above.
🧰 Other Actors by autofacts
Apify only auto-recommends Actors in the same category, so here are the ones that actually pair with this scraper:
| Actor | What it's for |
|---|---|
| YouTube Subtitle & Transcript Scraper | Video captions as clean text |
| Bluesky Scraper | Posts, profiles, feeds and interactions |
| Schema Markup Scraper & SEO Auditor | JSON-LD, Open Graph and a 0-100 SEO audit of any URL |
| Universal Web Printer | Turn any URL or HTML into PDF, PNG, JPEG or WebP |
All of them: apify.com/autofacts