TikTok Transcript Scraper - Subtitles in Every Language
Pricing
from $2.00 / 1,000 transcripts
TikTok Transcript Scraper - Subtitles in Every Language
Get transcripts of TikTok videos or a creator's latest videos. Uses TikTok's own captions (ASR, translations, creator subtitles) and Whisper AI for videos without captions. Plain text, timestamps, SRT/WebVTT and video stats. Pay only for transcripts. URLs, share links, IDs or profiles.
Pricing
from $2.00 / 1,000 transcripts
Rating
5.0
(1)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
34
Total users
6
Monthly active users
a day ago
Last modified
Categories
Share
TikTok Transcript Scraper
Extract the full transcript of any public TikTok video, or of a creator's latest videos. Paste video links or a profile, get clean text out: TikTok's own speech-recognition captions (ASR), its machine translations (MT), and creator-uploaded subtitles, each as a row with a plain-text transcript, timestamped segments, optional SRT/WebVTT, and the video's engagement stats. Videos without captions can be transcribed from their audio with Whisper AI. No login, no cookies, no browser.

Why Use This Scraper?
- Whole profiles, not just single links - give a handle like
@bbcnewsand get transcripts of its latest videos (up to 30 per profile), newest first. - Videos without captions still get a transcript - turn on
whisperFallbackand caption-less or freshly uploaded videos are transcribed from their audio with Whisper AI. - Every caption language - when TikTok has more than one track (the original plus translations), each comes back as its own row. Filter to just the languages you need.
- Timestamped segments included - each row carries a
segmentsarray (start,end,text) precise to the millisecond, ready for subtitling, clipping, or search indexing. - Know what you're reading - every row is flagged
ASR,MT, orcreator, so you can separate spoken-word originals from machine translations. - Video metadata for free - author, caption, publish date, duration, plays, likes, comments, shares, and saves ride along on every row at no extra charge.
- SRT and WebVTT on demand - switch on
includeSrtorincludeVttand get subtitle files ready for any video editor or player. - You pay only for transcripts - private, deleted, and caption-less videos are listed in the run's
ERRORSrecord with the reason, and are not charged. The run's status line says how many videos were transcribed and why any were not.
Overview
This Actor takes a list of TikTok videos and/or profiles and returns their subtitle tracks as structured transcripts. One dataset row = one video-language combination (almost always one row per video). It works with public videos only and requires no TikTok account.
Supported Inputs
| Input form | Example |
|---|---|
| Full video URL | https://www.tiktok.com/@nasa/video/723987198712345678 |
| Share link | https://vm.tiktok.com/ZMabc123/, https://vt.tiktok.com/xyz/, https://www.tiktok.com/t/ZTabc123/ |
| Bare video ID | 723987198712345678 |
| Profile | @bbcnews, bbcnews, https://www.tiktok.com/@bbcnews (in profiles) |
Video forms can be mixed freely in the videos list. A profile URL or @handle pasted into videos is treated as a profile.
Use Cases
- Content repurposing - turn spoken TikTok videos into blog posts, newsletters, or captions for other platforms.
- AI & LLM pipelines - feed clean video text into summarizers, RAG systems, and agents instead of transcribing audio yourself.
- Trend & competitor research - analyze what creators in your niche actually say, at scale, across languages.
- Brand safety & compliance - audit influencer scripts and sponsored-content disclosures in written form.
- Accessibility & localization - pull existing translations to bootstrap subtitles for your own edits.
- Search & discovery - index transcripts to make a video library searchable by spoken content.
How It Works
- Resolve - every input is normalized to a numeric video ID. Share links are followed for free before any paid lookup happens. A profile is resolved to its latest videos in one request.
- Extract - the video's caption tracks are collected: ASR originals, machine translations, and creator uploads, with an optional language filter. With
whisperFallbackon, a video with no caption track is downloaded and transcribed with Whisper AI. - Deliver - each track's subtitle file is downloaded and parsed into a plain-text transcript plus timestamped segments, and written as one dataset row. Anything that could not be transcribed goes to the
ERRORSrecord, uncharged.
Input Configuration
| Field | Type | Default | Description |
|---|---|---|---|
videos | array | - | TikTok video URLs, share links, or bare numeric IDs. |
profiles | array | - | Handles or profile URLs; each profile's latest videos are transcribed. |
maxVideosPerProfile | integer | 10 | Latest videos per profile, 1 to 30. |
maxItems | integer | no limit | Most videos per run, direct URLs first, then profile videos. |
languages | array | all | Optional filter, prefix-matched - ["eng"] matches eng-US. One row per matching language. |
includeSrt | boolean | false | Include an SRT subtitle file in each row (srt field). |
includeVtt | boolean | false | Include the raw WebVTT subtitle text in each row (vtt field). |
whisperFallback | boolean | false | Transcribe videos that have no captions from their audio with Whisper AI (premium event, videos up to 10 minutes). |
whisperModel | string | tiny | tiny, base or small; used only by the Whisper fallback. |
Give at least one video or one profile. Runs on the free Apify plan transcribe up to 3 videos; the status line names anything left out, and nothing left out is charged.
Example input:
{"videos": ["https://www.tiktok.com/@easyenglishwithfun/video/7607978879944379670","https://vm.tiktok.com/ZMabc123/","7673836093183151363"],"profiles": ["@bbcnews"],"maxVideosPerProfile": 5,"languages": ["eng"],"includeSrt": true}
Output Overview
One row per video per language (almost always one per video). A 3-language video produces 3 rows, each carrying the full video metadata plus that language's transcript. Profile videos also carry sourceProfile and isPinned. Videos that cannot be delivered (private, deleted, no captions, photo posts) are not written to the dataset and not charged: they go to the run's ERRORS key-value record with a reason code and a message, and the run's status line counts them.
Output Samples
Transcript row (trimmed):
{"videoId": "7607978879944379670","videoUrl": "https://www.tiktok.com/@easyenglishwithfun/video/7607978879944379670","authorUsername": "easyenglishwithfun","authorNickname": "Easy English with fun","authorVerified": false,"caption": "Simple English Conversation 💬 | A Friendly Market Dialogue for Beginners 🇺🇸 #LearnEnglish #EnglishConversation …","createdAt": "2026-02-17T23:23:48.000Z","durationSeconds": 72,"playCount": 2100000,"likeCount": 116800,"commentCount": 857,"shareCount": 11000,"saveCount": 21282,"originalLanguage": "eng-US","language": "eng-US","languageId": "2","source": "ASR","isAutoGenerated": true,"isOriginalCaption": true,"subtitleFormat": "webvtt","subtitleUrl": "https://v16-webapp.tiktokcdn-us.com/…","subtitleUrlExpiresAt": "2026-08-18T14:02:35.000Z","segmentCount": 24,"segments": [{ "start": 0, "end": 4.6, "text": "Are you busy right now? No, I have time." },{ "start": 4.6, "end": 7.2, "text": "Why? Could you please help me?" },{ "start": 7.2, "end": 9.8, "text": "Yes, of course. What do you need?" }],"transcript": "Are you busy right now? No, I have time. Why? Could you please help me? Yes, of course. What do you need? I'm very thirsty. I need some water. …","transcriptDurationSeconds": 57.819,"scrapedAt": "2026-08-16T14:02:41.000Z"}
ERRORS record entry (video without captions, uncharged):
{"input": "https://www.tiktok.com/@bbcnews/video/7690191232705891606","videoId": "7690191232705891606","reason": "no_captions","message": "No transcript available for video 7690191232705891606 - the video has no caption track…"}
Reason codes: no_captions, video_unavailable, photo_post, language_not_available, link_unresolved, invalid_input, whisper_no_speech, too_long_for_whisper, profile_not_found, profile_private, profile_no_videos, and, for failures worth a retry, captions_unreachable, whisper_failed, lookup_failed, profile_unreadable.
Key Output Fields
| Field | Meaning |
|---|---|
language / languageId | BCP-47-style language code (eng-US, hun-HU) and TikTok's internal ID for this track. |
source | ASR = auto speech recognition of the original audio, MT = TikTok's machine translation, creator = uploaded by the creator, whisper = transcribed from the audio by the Whisper fallback. |
isOriginalCaption | true on the track in the video's original spoken language. |
originalLanguage | The video's detected original language - even on translated rows. |
transcript | The full plain-text transcript for this language. |
segments | Timestamped cues: start / end in seconds (millisecond precision) + text. |
transcriptDurationSeconds | Seconds of the video actually covered by captions. |
subtitleUrl / subtitleUrlExpiresAt | Direct WebVTT file URL and when it expires (typically ~48 h). |
playCount … saveCount | The video's engagement stats at scrape time. |
sourceProfile / isPinned | For videos found through a profile: which profile, and whether it is pinned there. |
srt / vtt | Subtitle files, when includeSrt / includeVtt is on. |
FAQ
Do I need to log in or provide cookies? No. The Actor never touches your TikTok account and only reads public videos.
Which videos have transcripts?
Any video where the creator added captions or TikTok's automatic speech recognition produced them - that covers most spoken-word content. Music-only videos, very fresh uploads and photo posts often have no caption track. Turn on whisperFallback to transcribe caption-less videos from their audio; without it they are listed in the ERRORS record and not charged.
Can I transcribe a whole profile?
Yes. Put the handle or profile URL in profiles and set maxVideosPerProfile (up to 30). The Actor transcribes that profile's latest videos, newest first, and skips photo posts.
Can I get just English?
Yes - set "languages": ["eng"]. The filter is prefix-matched, so eng catches eng-US and eng-GB. Without a filter you get every available language as separate rows.
Is this transcription AI? How accurate is it?
The Actor returns TikTok's own caption tracks - the same subtitles viewers see in the app. Original-language tracks (source: "ASR" or "creator") are typically very accurate; machine translations ("MT") are TikTok's automatic translations, delivered as-is and flagged so you can tell them apart.
What happens with a private or deleted video?
It is listed in the ERRORS record with the reason, it is not charged, and the run continues with your other videos.
What does it cost? Pay per result: one charge per transcript row delivered, plus a small per-run start fee. Whisper transcripts carry an extra premium event. Videos that could not be transcribed cost nothing. No subscription.
Support
Found a bug or need a field added? Open an issue on the Actor's Issues tab in Apify Console, or email muhamed.didovic@gmail.com.
Additional Services
Need a custom TikTok or social-media scraper, enrichment pipeline, or a private version of this Actor? Custom builds available - reach out at muhamed.didovic@gmail.com.
Explore More Scrapers
- YouTube Transcript Scraper - the same clean transcripts for YouTube videos, with Whisper AI fallback
- Instagram Transcript Scraper - transcripts for Instagram Reels and videos
- Video Transcripts MCP Server - YouTube & TikTok transcripts as an MCP tool for AI agents
- TikTok Comments Scraper - every comment on any video, deduplicated, with commenter profiles
- TikTok Followers & Following Scraper - followers, following, and suggested accounts with per-account stats
Browse the full portfolio: muhamed-didovic.github.io
🤖 For AI Agents & LLM Apps
Purpose: Return the transcript(s) of public TikTok videos in every available language, with timestamped segments.
Minimal tested input:
{ "videos": ["https://www.tiktok.com/@easyenglishwithfun/video/7607978879944379670"], "languages": ["eng"] }
Profile input: { "profiles": ["@bbcnews"], "maxVideosPerProfile": 5 }.
Output: array of flat objects, one per video-language. Fields: videoId, videoUrl, authorUsername, authorNickname, authorId, authorVerified, caption, createdAt, durationSeconds, playCount, likeCount, commentCount, shareCount, saveCount, originalLanguage, language, languageId, source (ASR|MT|creator|whisper), isAutoGenerated, isOriginalCaption, subtitleFormat, variant, subtitleUrl, subtitleUrlExpiresAt, segmentCount, segments[{start,end,text}], transcript, transcriptDurationSeconds, sourceProfile, isPinned, scrapedAt (+ srt / vtt when includeSrt / includeVtt is on).
Behavior & billing: Pay-per-event - one charge per transcript row. For LLM context economy, set "languages" to one language so each video returns exactly one row, and read the transcript field. Private/deleted/caption-less videos and unresolvable links are not written to the dataset and not charged; they are listed in the ERRORS key-value record (input, videoId, reason, message), and the run's status message counts them. No login/cookies required.
⚠️ Disclaimer
This Actor accesses publicly available data on TikTok for legitimate research, accessibility, market-intelligence, and business-analysis purposes. It does not log in, bypass authentication, or access private content. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). The authors are not responsible for any misuse. Users must:
- Respect rate limits and avoid overloading TikTok's infrastructure
- Not use scraped data to violate user privacy or platform terms
- Process any personal data only with a lawful basis and in compliance with their jurisdiction
- Not republish scraped content in violation of copyright
We do not store scraped data; the Actor returns it directly to your Apify dataset for your authorized use. TikTok is a trademark of ByteDance Ltd.; this Actor is not affiliated with or endorsed by TikTok or ByteDance.
SEO Keywords
tiktok transcript scraper, tiktok transcript extractor, tiktok profile transcripts, tiktok srt download, tiktok whisper transcription, get tiktok transcript, tiktok video to text, tiktok subtitles download, tiktok captions scraper, tiktok subtitle extractor, tiktok speech to text, tiktok asr captions, tiktok transcript api, tiktok video transcript generator, extract tiktok captions, tiktok webvtt download, tiktok transcript multiple languages, tiktok translation captions, tiktok video text export, tiktok transcript for ai, tiktok content analysis, tiktok transcript csv, tiktok accessibility captions, video transcript scraper, apify tiktok transcript