How to Scrape TikTok Video Transcripts and Review Content Themes
A TikTok caption may be a few words while the video explains a product, answers a question, or makes a claim. To study those themes, keep the caption and spoken transcript as separate fields.
The TikTok Video Transcript Scraper collects recent videos from accounts or selected video URLs, returning post context, available transcripts, and timestamped cues. I maintain this Apify Actor. Its first pass can use platform transcripts; optional AI transcription covers some videos without those transcripts at an additional cost.

Start with the transcript already available
The usernames array accepts a username, an @handle, or a TikTok profile URL. The alternative videoUrls array accepts full links to specific videos. Use direct links when your review needs a fixed sample rather than whichever recent clips discovery returns.
No TikTok account or cookies are part of the documented workflow. The default proxy configuration enables Apify residential proxies for rate-limit handling, so check your account access and usage before scaling.
Open the Actor, select Input, switch to JSON, and paste:
{
"usernames": ["nasa"],
"maxResults": 3,
"transcribeWithAI": false,
"language": "auto",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
Click Start, then inspect the completed dataset. This requests at most three videos across the run and leaves AI off. It is a small discovery example, not a claim that every returned video will contain speech or captions.
The README describes roughly twelve recent videos available from an account. maxResults defaults to fifty but cannot make account discovery return the full posting history. For older clips, supply known video URLs and check their public availability.
Separate missing transcripts from missing videos
Inspect hasTranscript, transcriptSource, transcriptLanguage, and skippedReason. A returned video with no transcript still has useful metadata, but it should not silently enter a text-analysis sample as an empty document.
The spoken words are in transcript; the post caption is description. transcriptCues contains start, end, and text for each segment. detectedLanguage reflects the language detected by TikTok itself, which can be missing even when the transcript has a language value.
Other output fields include id, url, handle, createdAt, durationSeconds, hashtags, author information, music information, and play, like, comment, share, and save counts. commentCount is a count, not a collected comment thread; this Actor does not document comment extraction.

The retained screenshot shows earlier output, not a fresh account check. Platform captions and AI transcripts can both contain errors, particularly in proper names, technical terms, overlapping speech, or audio with music.
Enrich the gaps selectively
After the first pass, inspect videos with hasTranscript: false. Check skippedReason and listen briefly before deciding whether another transcription attempt is useful. A wordless clip does not become relevant to spoken-theme analysis just because AI is enabled.
Copy the URLs of selected speech-bearing gaps into videoUrls, remove the broad account input, and set transcribeWithAI to true. The documented behavior uses AI only where a video lacks its own transcript. Keep a small cap while checking the result.
language controls spoken-language handling for AI transcription, not translation. Leave it automatic unless you have identified the correct language and need to override detection. Do not assume a transcript is accurate simply because it came back in the expected language.
Estimate the events before repeating clips
Pricing as of September 6, 2026 is $0.003 per returned video, $0.005 when a transcript is returned, and $0.020 per started minute when AI transcription is used. The start event is $0.00005 per GB of allocated memory, minimum one event.
A video returned with its platform transcript therefore incurs $0.008 in video and transcript events. A successfully AI-transcribed 61-second video incurs $0.003 + $0.005 + two minutes × $0.020 = $0.048, before the start charge and any separate usage. A returned video with no transcript has the video fee alone.
A second run is a new collection, so include its video event in your budget rather than treating the second pass as a free patch to the first dataset. The active start rate differs from the README's older $0.001 figure. Check live pricing and actual run charges for your case.
Create a theme sheet with traceable examples
Export JSON to preserve timestamped cues. Build one row per video with ID, URL, author, publication date, transcript source, transcript status, and collection time. Add a separate evidence sheet with one row per relevant cue or short passage.
Choose a small set of themes before coding the sample, such as product explanation, customer question, or behind-the-scenes process. Read the transcript in context, assign a theme, and retain the segment time supporting the decision. Keep caption-only themes separate from spoken ones.
Before quoting a passage, listen to the source segment and record a reviewed version alongside the original transcript. If a summarization tool helps with classification, require source IDs and cue times in its output. A concise summary without retrievable evidence is difficult to audit.
For engagement analysis, compare videos of similar age and record when counts were collected. playCount is not a count of unique people or purchases. Save counts and follower counts add context but do not verify conversion or campaign effectiveness.
Monitor recent posts without assuming memory
For later account runs, onlyPostsNewerThan accepts an absolute date or a phrase such as 7 days. It filters the age of discovered videos. Overlapping scheduled windows can return the same clip again, so deduplicate your archive by id and retain the latest metadata observation separately.
A discovery limit can leave gaps if an account posts more videos than the accessible recent set between runs. A narrower date filter does not fix that coverage gap. Keep known URLs when completeness matters to your review.
The TikTok transcript Node.js example supports a later archive workflow. For product listings use the separate TikTok Shop guide. The LinkedIn and X transcript guides, plus the social media scraping guide, cover related sources.
Frequently asked questions
Does a username return the account’s full video history?
No. The README describes roughly twelve recent videos per account. Use known video URLs for older clips, and do not treat a high maxResults value as historical backfill.
Are platform transcripts free to return?
They avoid the AI-minute event, but the video and transcript events still apply when text is returned. AI transcription adds a per-started-minute charge when used.
Will a rolling date filter prevent duplicates?
No. A date filter selects an age window; it does not remember previous runs. Deduplicate saved results by video id.
