TikTok Transcript API & Subtitle Scraper avatar

TikTok Transcript API & Subtitle Scraper

Pricing

from $1.00 / 1,000 transcript extracteds

Go to Apify Store
TikTok Transcript API & Subtitle Scraper

TikTok Transcript API & 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

Proooxy

Proooxy

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

2

Monthly active users

8 days ago

Last modified

Features

Limited permissions

Share

Get the transcript of a TikTok video as text, or its subtitles as SRT or VTT — for one video, a list of links or every video on a profile.

This TikTok transcript extractor reads the captions TikTok already has for each video: the creator's own or TikTok's auto-generated ones. No API key, no Whisper, no speech-to-text, so a video without captions has no transcript to read. Run it in Apify Console with no code, or call it as a TikTok transcript API from your own code or an AI agent.

💡 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

🚀 How to get the transcript of a TikTok video

  1. Paste one or more TikTok video links, short links, @username handles or video IDs into urls.
  2. Pick an outputFormat: text for plain text, srt or vtt for subtitles, json for timestamped segments, or llm for clean text to feed an AI model.
  3. Set languages in order of preference. eng matches eng-US.
  4. Start the run, then export the results as JSON, CSV or Excel, or read them over the API.

The smallest input is one link:

{
"urls": [
"https://www.tiktok.com/@tiktok/video/7627209981670001950"
]
}

You get the full transcript with timestamps, metadata and engagement stats. A video with no captions, creator or auto-generated, still gets a row, with its error field set, and you are not charged for it.

📋 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
proxyConfigurationobjectNo proxyA proxy for every request. Without one, a video page TikTok refuses is fetched again through Apify's residential proxy; an Apify proxy group gets the same retry, and your own proxyUrls are used as they are

📤 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.

📤 Download TikTok subtitles as SRT, VTT, text or JSON

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

With srt or vtt, each result also carries the complete subtitle file in its srt or vtt field. Save that text as a .srt or .vtt file and it loads in video players and editors.

🗂️ 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

🚀 TikTok transcript API for Python and JavaScript

Call the scraper from your own code with the Apify API client and read the records shown above:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('autofacts/tiktok-subtitle-transcript-scraper').call({
urls: ['https://www.tiktok.com/@tiktok/video/7627209981670001950'],
outputFormat: 'text',
languages: ['eng'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const video of items) console.log(video.title, video.text);
import os
from apify_client import ApifyClient
client = ApifyClient(token=os.environ["APIFY_TOKEN"])
run = client.actor("autofacts/tiktok-subtitle-transcript-scraper").call(run_input={
"urls": ["https://www.tiktok.com/@tiktok/video/7627209981670001950"],
"outputFormat": "text",
"languages": ["eng"],
})
for video in client.dataset(run.default_dataset_id).iterate_items():
print(video["title"], video["text"])

The Python example uses apify-client 3.x, where a run is an object (run.default_dataset_id). The plain HTTP call is in Use with AI agents below.

🎯 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

By default the Actor reads TikTok without a proxy. When TikTok refuses a video page — a block page, a captcha, a 403 or a 429 — that page is fetched again through Apify's residential proxy, on a new session and from a US address unless you set a proxy country.

To send every request through a proxy, set proxyConfiguration: pick an Apify proxy group, and a refused page still gets the residential retry; or supply your own proxyUrls, which are used as they are.

⚠️ 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 fetches a refused page again from another IP and has 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 Transcript Scraper APIVideo captions as clean text
Instagram Transcript ScraperInstagram Reels turned into text with timestamps
Google Trends Trending NowWhat is trending on Google right now, in 125 countries, to find the videos worth transcribing
Bluesky ScraperPosts, profiles, feeds and interactions
Schema Markup Scraper & SEO AuditorJSON-LD, Open Graph and a 0-100 SEO audit of any URL
HTML to PDF & URL to PDF APITurn any URL or HTML into PDF, PNG, JPEG or WebP

All of them: apify.com/autofacts