TikTok Transcript & Video Scraper
Media & Downloads

TikTok Transcript & Video Scraper

Extract spoken transcripts, video metadata and creator stats from any TikTok URL. Captions as text, SRT or WebVTT, plus watermark-free downloads.

Launch on Apify ↗

TikTok Video Downloader is a ready-to-run Apify actor from FlowExtract API for media & downloads. Download TikTok videos without watermark. Extract direct download links from TikTok URLs with full metadata including views, likes, shares, and comments. This page explains what it does, who it's for, and how to get the most out of it — then includes the full technical documentation below.

Use cases

  • 🎬 Extract Video URLs - Get direct playable video links from TikTok
  • 📊 Full Metadata - Views, likes, shares, comments, duration, quality
  • 💾 Optional Download - Store videos in Apify Key-Value Store with persistent links
  • 🔄 Resumable Runs - State persistence for interrupted runs

Frequently asked questions

How do I run TikTok Video Downloader?

Open TikTok Video Downloader on the Apify Store, provide your input (URLs or search parameters), and click Start. Results are available as JSON, CSV, or Excel, and via the Apify API.

Is TikTok Video Downloader free?

TikTok Video Downloader runs on Apify's pay-as-you-go platform; you only pay for the compute/usage a run consumes. Check the actor page for current pricing and any free tier.

Documentation

TikTok Transcript & Video Scraper

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

Field Type Required Default Description
videoUrls array ✅ - TikTok video URLs. Standard, short (vm.tiktok.com) and mobile formats all work.
includeTranscript boolean ❌ true Extract the spoken transcript
transcriptFormats array ❌ ["text","segments"] Any of text, segments, srt, vtt
preferredLanguage string ❌ "auto" Caption language to prefer, e.g. eng-US. auto uses the video's original language.
preferredFps string ❌ "60" Video frame rate: "30" or "60"
downloadVideo boolean ❌ false Store MP4 files on Apify
proxyConfig object ❌ - 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:

View Shows
Overview Thumbnail, caption, creator, date, engagement, transcript availability
Transcripts Transcript text, language, source and word count per video
Engagement Views, likes, comments, shares, saves and reposts
Creator Data Handle, follower count, total likes, bio, profile link
Sounds Sound title, author, duration and audio link
Download Links Stored file links and direct MP4 URLs
Failed Extractions Error code and message for anything that did not work

Pricing

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

Event Charged when
Run start Once per run start, including a restart after a platform migration
Video scraped A video is successfully scraped, for the full record
Transcript extracted A transcript is actually returned
Video downloaded An 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 Type Retryable Behavior
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

Related Actors


⚖️ Legal & Compliance

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.

Ready to Get Started?

Try this actor on Apify or contact us for custom integration