TikTok Transcript & Video Scraper avatar

TikTok Transcript & Video Scraper

Pricing

from $0.30 / 1,000 ๐Ÿ“Š video scrapeds

Go to Apify Store
TikTok Transcript & Video Scraper

TikTok Transcript & Video Scraper

Extract spoken transcripts from TikTok videos as text, SRT or WebVTT with timestamps. Every video also returns 58 fields: upload date, views, likes, saves, hashtags, sounds, and creator follower counts. Pick a caption language, or download watermark-free MP4s. No login needed.

Pricing

from $0.30 / 1,000 ๐Ÿ“Š video scrapeds

Rating

5.0

(6)

Developer

FlowExtract API

FlowExtract API

Maintained by Community

Actor stats

8

Bookmarked

81

Total users

1

Monthly active users

11 hours ago

Last modified

Share

Turn any TikTok URL into structured data. Get the spoken transcript, 58 metadata fields, creator profile stats, and an optional watermark-free MP4 download. No login, no API key.

Features

  • ๐Ÿ“ Transcripts - Spoken content as plain text, timestamped segments, SRT or WebVTT
  • ๐ŸŒ Language Choice - Pick which caption track you get when a video offers more than one
  • ๐Ÿ“Š 58 Fields Per Video - Upload date, engagement stats, hashtags, mentions, sound details, AI-content flags
  • ๐Ÿ‘ฅ Creator Data - Handle, bio, follower count, total likes, video count, verified status
  • ๐ŸŽฌ Watermark-Free Links - Direct MP4 URLs at your chosen frame rate
  • ๐Ÿ’พ Optional Download - Store MP4s on Apify with permanent links
  • ๐Ÿ”„ Resumable Runs - State persistence survives migration, timeout and abort
  • ๐Ÿ›ก๏ธ Block Handling - Detects TikTok's firewall challenge and rotates proxy sessions automatically

Input

FieldTypeRequiredDefaultDescription
videoUrlsarrayโœ…-TikTok video URLs. Standard, short (vm.tiktok.com) and mobile formats all work.
includeTranscriptbooleanโŒtrueExtract the spoken transcript
transcriptFormatsarrayโŒ["text","segments"]Any of text, segments, srt, vtt
preferredLanguagestringโŒ"auto"Caption language to prefer, e.g. eng-US. auto uses the video's original language.
preferredFpsstringโŒ"60"Video frame rate: "30" or "60"
downloadVideobooleanโŒfalseStore MP4 files on Apify
proxyConfigobjectโŒ-Proxy configuration. Residential is strongly recommended.

Example Input

{
"videoUrls": [
{ "url": "https://www.tiktok.com/@username/video/1234567890" },
{ "url": "https://vm.tiktok.com/ABC123" }
],
"includeTranscript": true,
"transcriptFormats": ["text", "segments", "srt"],
"preferredLanguage": "auto",
"proxyConfig": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

How Transcripts Work

TikTok runs speech recognition on videos that contain speech and publishes the result as a caption track. This Actor reads that track directly. Nothing is re-transcribed, so the text matches what TikTok itself shows viewers, and extraction is fast and cheap.

Transcripts are only returned when the video has one. A video with no speech, such as music or sound effects, returns available: false along with TikTok's own reason. That is a normal result, not an error, and it is never charged.

In a sample of 31 public videos, 13 carried a transcript. Coverage is much higher on talking-head, news and tutorial content than on music or dance videos.

Choosing a language

Some videos carry more than one caption track: the original spoken language plus machine translations TikTok has already generated. Set preferredLanguage to pick one.

{ "preferredLanguage": "eng-US" }

If the language you ask for is not available on a given video, you get that video's original track instead, and transcript.language tells you what you actually received. transcript.availableLanguages lists every track the video offers, and transcript.source is ASR for speech recognition or MT for a translation of it.

The Actor never invents a translation. It only returns tracks TikTok has already published.

Sample Output

Each video produces one dataset record. Abbreviated below.

{
"videoId": "1234567890",
"webVideoUrl": "https://www.tiktok.com/@username/video/1234567890",
"directUrl": "https://v16-webapp-prime.tiktok.com/...",
"title": "Video caption text",
"createTime": "2026-04-02T15:22:04.000Z",
"hashtags": ["cooking", "recipe"],
"mentions": ["someoneelse"],
"authorUsername": "username",
"author": "Creator Name",
"authorVerified": true,
"authorFollowers": 4800000,
"authorLikes": 120400000,
"authorBio": "Profile bio text",
"viewCount": 734500,
"likeCount": 24600,
"commentCount": 181,
"shareCount": 411,
"collectCount": 1573,
"repostCount": 0,
"duration": 8,
"quality": "540p",
"musicTitle": "original sound",
"musicIsOriginal": true,
"transcript": {
"available": true,
"language": "eng-US",
"source": "ASR",
"isAutoGenerated": true,
"wordCount": 42,
"segmentCount": 9,
"availableLanguages": ["eng-US", "spa-ES"],
"text": "Full spoken transcript as a single string",
"segments": [
{ "start": "00:00:00.380", "end": "00:00:03.600", "startSeconds": 0.38, "endSeconds": 3.6, "text": "First line of speech" }
],
"srt": "1\n00:00:00,380 --> 00:00:03,600\nFirst line of speech\n",
"error": null
},
"download": {
"available": true,
"url": "https://api.apify.com/v2/key-value-stores/.../records/...",
"status": "completed",
"fileSizeHuman": "1.5 MB"
},
"success": true
}

Dataset Views

Seven pre-configured views, switchable from the dataset tab:

ViewShows
OverviewThumbnail, caption, creator, date, engagement, transcript availability
TranscriptsTranscript text, language, source and word count per video
EngagementViews, likes, comments, shares, saves and reposts
Creator DataHandle, follower count, total likes, bio, profile link
SoundsSound title, author, duration and audio link
Download LinksStored file links and direct MP4 URLs
Failed ExtractionsError code and message for anything that did not work

Pricing

Pay per event. You are billed for results, not for runtime.

EventCharged when
Run startOnce per run start, including a restart after a platform migration
Video scrapedA video is successfully scraped, for the full record
Transcript extractedA transcript is actually returned
Video downloadedAn MP4 is stored, and only if you switch downloads on

Failed videos are never charged. Videos with no speech are charged as a scrape but not as a transcript.

Downloads start a second Actor

If you switch downloadVideo on, this Actor hands the file transfer to Universal Downloader. You will see two Actor runs in your account for the same job, and that second Actor bills you separately on top of the download event here.

This is why the download event is priced low. It is meant to sit alongside the other Actor's charge rather than duplicate it.

Downloads are off by default. If you only need transcripts and metadata, leave them off and no second Actor is ever started.

Proxy Configuration

TikTok blocks datacenter traffic aggressively. Residential proxies are strongly recommended:

{
"proxyConfig": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

The Actor detects TikTok's firewall challenge, which arrives as a normal-looking HTTP 200 rather than an error, and retries on a fresh session automatically.

State Persistence & Resumability

Runs are resumable. If a run is interrupted by migration, timeout or abort, the next run with the same input picks up where it stopped. State is saved every 3 videos, on migration, on abort and before exit.

Error Handling

Error TypeRetryableBehavior
Firewall challengeโœ…New proxy session, then retry
Network timeoutโœ…Exponential backoff
Rate limiting (429)โœ…Extended backoff
Server errors (5xx)โœ…Standard backoff
Video not found (404)โŒImmediate fail
Private/restricted videoโŒImmediate fail
Invalid URLโŒImmediate fail

Run Summary

A summary is written to the Key-Value Store under RUN_SUMMARY:

{
"total": 10,
"processed": 10,
"successful": 9,
"failed": 1,
"transcripts": {
"enabled": true,
"extracted": 6,
"unavailable": 3,
"coverageRate": 67
},
"downloads": { "enabled": true, "successful": 9, "failed": 0 },
"resumed": false,
"completedAt": "2026-09-11T10:35:00.000Z"
}

Limitations

  • Memory is capped at 512 MB. Runs use around 110 MB in practice, and the work is network-bound rather than memory-bound, so more allocation would cost you without running faster.
  • Transcripts exist only where TikTok generated captions. Videos without speech return none.
  • Translated tracks are returned only where TikTok already published them. The Actor does not translate.
  • Direct MP4 URLs expire after a few hours. Use downloadVideo: true for permanent links.
  • Private videos cannot be extracted, and some region-restricted videos may be unavailable.

๐Ÿค Support & Resources

Social Media


This Actor extracts publicly available data from TikTok. It does not log in, bypass authentication, or access private content. You are responsible for using the output in line with TikTok's Terms of Service, applicable copyright law, and data protection regulations such as GDPR and CCPA. Transcripts and video files remain the property of their creators.


Built and maintained by FlowExtract API.