TikTok Transcript & Subtitle Scraper avatar

TikTok Transcript & Subtitle Scraper

Pricing

from $1.00 / 1,000 transcript extracteds

Go to Apify Store
TikTok Transcript & Subtitle Scraper

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

Richard Feng

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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 ActorWhisper-based actors
Speed~2s per video10–30s per video
AccuracyExact (TikTok's own captions)~95% (AI can mishear)
CostPay per result onlyPay per result + Whisper API
LanguagesAll that TikTok providesDepends 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

FieldTypeDefaultDescription
urlsstring[]requiredTikTok URLs, short links, @username handles, or raw video IDs
outputFormatselectjsonjson srt vtt text llm
languagesstring[]["eng"]Preferred languages in priority order. Prefix matching supported — eng matches eng-US
includeAutoGeneratedbooleantrueInclude TikTok's auto-generated captions
maxVideosinteger0Max videos to process in total across all inputs. 0 = unlimited. Videos you name explicitly are taken first, then profiles fill whatever budget is left
maxConcurrencyinteger3Parallel workers (1–10). Lower = safer from rate limits
proxyConfigurationobjectApify residentialProxy 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

FormatWhat you getBest for
jsontext + segments[] with timestampsRAG pipelines, structured data, analytics
srttext + srt (SubRip subtitle file)Video editing, subtitle files
vtttext + vtt (WebVTT subtitle file)Web players, accessibility
texttext only (plain transcript)Search indexing, simple analysis
llmtext cleaned of [Music], speaker labels, annotationsAI training, summarization, content repurposing

🗂️ Output fields

Every result includes full video metadata alongside the transcript:

FieldDescription
videoIdTikTok video ID
urlCanonical video URL
title / descriptionVideo caption text
authorName / authorIdCreator display name and handle
createTimeISO 8601 publish timestamp
playCount / likeCount / commentCount / shareCountEngagement metrics
thumbnailCover image URL
availableLanguagesAll subtitle languages found on this video
languageLanguage code of the extracted transcript, e.g. eng-US
languageNameHuman-readable language, e.g. English (United States)
isAutoGeneratedtrue if captions are auto-generated, false if creator-uploaded
segmentsArray of { text, start, end } (JSON format only)
textFull transcript as a single string
srt / vttSubtitle file content (only when that format is selected)
durationVideo length in seconds
wordCount / segmentCountTranscript statistics
extractedAtWhen the extraction happened
errornull 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 thumbnail link 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:

ActorWhat it's for
YouTube Subtitle & Transcript ScraperVideo captions as clean text
Bluesky ScraperPosts, profiles, feeds and interactions
Schema Markup Scraper & SEO AuditorJSON-LD, Open Graph and a 0-100 SEO audit of any URL
Universal Web PrinterTurn any URL or HTML into PDF, PNG, JPEG or WebP

All of them: apify.com/autofacts