TikTok Transcript Scraper: Captions & Subtitles avatar

TikTok Transcript Scraper: Captions & Subtitles

Pricing

from $1.20 / 1,000 transcripts

Go to Apify Store
TikTok Transcript Scraper: Captions & Subtitles

TikTok Transcript Scraper: Captions & Subtitles

Get TikTok transcripts as plain text and timestamped segments from video URLs, whole profiles or keywords. Uses TikTok's own captions and subtitles. No login, no API key. Pay only for videos that have a transcript.

Pricing

from $1.20 / 1,000 transcripts

Rating

0.0

(0)

Developer

Stan Van Rooy

Stan Van Rooy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

TikTok Transcript Scraper: Captions, Subtitles & Timestamps 📝

The TikTok Transcript Scraper turns TikTok videos into clean transcripts: plain text plus timestamped segments, with no login, no cookies and no API key. Paste a video link, a whole profile or a keyword, click Start, and export TikTok transcripts as JSON, CSV or Excel, or pull them from the Apify API.

It reads the captions and subtitles TikTok already publishes for a video, so it is fast and cheap, and you only pay for videos that actually have a transcript. Videos without captions still get a row that says why, free of charge.

Built for content research, hook and script analysis, AI and RAG datasets, and searchable archives of what creators said.

🚀 How to get TikTok transcripts

  1. Add what you want transcribed, in any mix:
    • Video URLs (regular links, vm.tiktok.com and vt.tiktok.com short links, or bare video IDs),
    • Profiles (@handle or profile URL) to transcribe a creator's videos,
    • Keywords to transcribe the videos TikTok search returns.
  2. Set how many videos to read per profile and per keyword.
  3. Click Start.

That is it. No TikTok account, no browser extension, no proxy setup on your side.

📊 What data do you get?

Per video (one row each)

  • Full transcript as plain text
  • Timed segments: start and end time in seconds plus the text of every caption line
  • Transcript language, whether the captions are TikTok auto captions, creator captions or a translation, and every caption language available for the video
  • Video ID, URL, description and upload time
  • Creator handle and display name
  • Duration, views, likes, comments and shares
  • For videos without a transcript: has_transcript: false and the reason (photo post, music only, no captions, unavailable)

Every row also carries the input it came from (the URL, profile or keyword you entered), so you can group transcripts by creator or topic in your own pipeline.

📥 Input

FieldTypeNotes
videoUrlsarrayTikTok video URLs, short links or bare video IDs.
profilesarrayProfile URLs or @handles. Transcribes the profile's videos, newest first.
keywordsarraySearch terms. Transcribes the videos TikTok search returns.
maxVideosPerProfileintegerVideos per profile. 0 for every public video. Default 20.
maxVideosPerKeywordintegerVideos per keyword. 0 for as many as search returns. Default 20.
languagestringoriginal (default) for the spoken language, or a code such as en, es or pt-BR to prefer that language when TikTok has a track for it.
includeSegmentsbooleanAdd the timed segments array. Default true.
proxyConfigurationobjectAdvanced. Apify residential proxies by default.

Use any combination of the first three fields. Minimal input:

{
"videoUrls": ["https://www.tiktok.com/@tiktok/video/7681309378095353118"]
}

📤 Output

One row per video.

{
"video_id": "7681309378095353118",
"url": "https://www.tiktok.com/@tiktok/video/7681309378095353118",
"author_username": "tiktok",
"author_nickname": "TikTok",
"description": "You showed us what it means to be a Pop Girl this summer...",
"create_time": "2026-09-03T14:03:39Z",
"duration_sec": 67,
"views": 258200,
"likes": 10200,
"comments": 1191,
"shares": 1305,
"has_transcript": true,
"transcript_language": "en",
"transcript_source": "auto",
"transcript_text": "Hey, it's Nicole. This summer, you were the main character. You made it sound iconic...",
"segments": [
{ "start_sec": 0.1, "end_sec": 1.3, "text": "Hey, it's Nicole." },
{ "start_sec": 1.301, "end_sec": 3.301, "text": "This summer, you were the main character." }
],
"available_languages": ["en"],
"no_transcript_reason": null,
"input_source": "https://www.tiktok.com/@tiktok/video/7681309378095353118",
"input_type": "video"
}

A video without captions looks the same with has_transcript: false, empty transcript fields and a no_transcript_reason such as "No spoken audio: the video only uses music or a sound, so TikTok has no captions for it."

Field descriptions

  • video_id, url: The TikTok video.
  • author_username, author_nickname: The creator's handle and display name.
  • description: The creator's caption text with hashtags.
  • create_time: Upload time in ISO 8601 (UTC).
  • duration_sec: Video length in seconds.
  • views, likes, comments, shares: Engagement counts at scrape time.
  • has_transcript: True when a transcript was found. Only these rows are charged.
  • transcript_language: Language code of the transcript, for example en.
  • transcript_source: auto for TikTok auto captions, creator for captions the creator added, translation for TikTok's translation of the captions.
  • transcript_text: The full transcript as one plain text string.
  • segments: Timed caption lines with start_sec, end_sec and text.
  • available_languages: Every caption language TikTok has for the video.
  • no_transcript_reason: Why there is no transcript, when there is none.
  • input_source, input_type: The URL, profile or keyword that led to this video, and which kind it was.

✨ Why this TikTok transcript scraper

  • Bulk in, transcripts out. A single video, a creator's whole profile or every result for a keyword, all in one run.
  • Pay only for transcripts. Videos without captions are listed with a reason and are never charged.
  • Text and timestamps. Plain text for reading and search, timed segments for clips, subtitles and quotes.
  • No login, no cookies, no API key. The scraper runs fully anonymous. You never hand over a TikTok account.
  • Fast. It reads TikTok's own caption files instead of transcribing audio: 40 video URLs finish in under 10 seconds, and 120 videos from profiles and keywords in under a minute.
  • Clean exports. JSON, CSV or Excel from the Apify Console, or fetch results from the Apify API.

💡 Use cases

  • Content research: Collect every script from a creator to study hooks, structure and calls to action.
  • Marketing and brand monitoring: What is actually said in the videos about a product, brand or keyword.
  • AI and RAG datasets: Feed timestamped TikTok text into summarisation, sentiment, topic modelling or a vector database.
  • Journalism and compliance: A searchable, timestamped record of claims made in videos.
  • Repurposing: Turn TikTok videos into blog posts, captions, threads and newsletters.

🔌 TikTok transcript API: run it from code

Every Apify Actor is also an API. Call this scraper with the Apify client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("stanvanrooy6/tiktok-transcript-scraper").call(run_input={
"profiles": ["@tiktok"],
"maxVideosPerProfile": 50,
"includeSegments": True,
})
for video in client.dataset(run["defaultDatasetId"]).iterate_items():
if video["has_transcript"]:
print(video["url"], video["transcript_text"][:80])

The same works from JavaScript, cURL or any HTTP client. See the API tab above for ready-made snippets and the dataset endpoints.

⚠️ Limits and good to know

  • Transcripts come from the captions TikTok publishes. Videos that only use music or a sound, photo posts, and some videos where TikTok did not generate captions have no transcript. In September 2026 tests on about 400 videos from creator profiles and keyword searches, 79% had one. Talking content (reviews, news, advice, tutorials) was at 90% or more; silent comedy and music only content was much lower.
  • Photo posts found through profiles and keywords are skipped, so the video limits count real videos. A photo post you enter as a URL gets a row with the reason.
  • Most transcripts are TikTok auto captions: accurate for clear speech, but names and slang can be misheard.
  • language picks a caption track TikTok already has. When the video has no track in that language, you get the original transcript.
  • Profiles and keywords take about 10 seconds longer to start than video URLs.
  • Transient network errors are retried automatically.

💰 Pricing

This Actor uses pay per event, so there is no monthly subscription and you only pay for what you get.

  • Transcripts: $1.50 per 1,000 videos with a transcript ($0.0015 each). $1.35 on a Silver plan, $1.20 on Gold and above.
  • Videos without captions: free.
  • Run start: $0.002 per GB of memory, under one cent for a default run.

Transcribing 1,000 TikTok videos costs about $1.50, and less when some of them have no captions. New Apify accounts include monthly free usage credit, which is enough to try the scraper at no cost.

🎯 Example inputs

All transcripts from a creator:

{
"profiles": ["https://www.tiktok.com/@garyvee"],
"maxVideosPerProfile": 0
}

Transcripts for a keyword, text only:

{
"keywords": ["iphone review"],
"maxVideosPerKeyword": 100,
"includeSegments": false
}

A batch of single videos, English when available:

{
"videoUrls": [
"https://www.tiktok.com/@tiktok/video/7681309378095353118",
"https://vm.tiktok.com/ZMabcdefg/",
"7669681716176456980"
],
"language": "en"
}

❓ FAQ

How do I get the transcript of a TikTok video?

Paste the video URL into Video URLs and click Start. The transcript appears in the dataset as plain text and as timed segments, ready to copy or export.

Is there a free TikTok transcript generator?

You can run this one for free within the monthly free usage credit that comes with every new Apify account. After that it is $1.50 per 1,000 transcripts with no subscription, and videos without captions are free.

Do I need a TikTok account or login?

No. The scraper runs fully anonymous and cookie free. You never share credentials.

What happens if a video has no captions?

You get a row with has_transcript: false and the reason, for example a video that only uses music. That row is not charged.

Which languages are supported?

Any language TikTok captions. By default you get the transcript in the language spoken in the video. Set language to a code such as en to prefer a TikTok caption track in that language when one exists.

Can I get subtitles with timestamps?

Yes. Every row includes segments with the start and end time of each caption line in seconds, which you can turn into SRT or VTT subtitles.

How many videos can I transcribe from one profile?

Set maxVideosPerProfile to any number, or 0 for every public video. Large profiles with thousands of videos work; the scraper keeps reading until the feed ends.

How do I download or export TikTok transcripts?

Run the scraper, then download the dataset as JSON, CSV or Excel from the Apify Console, or read it from the Apify API and dataset endpoints.

The scraper only collects publicly visible data that any anonymous viewer can see, and it does not log in or bypass access controls. Transcripts and descriptions can contain personal data, so handle the data in line with GDPR, CCPA and your own use case. If you are unsure, consult a lawyer.

Can you add a field or an option I need?

Yes. Open an issue on the Issues tab and describe what you need. I actively maintain this Actor and add requested fields and options.

🤝 Feedback and feature requests

I actively maintain this Actor. Found a bug or need a field? Open an issue on the Issues tab.

All of them share the same no-login engine and output conventions.

Typical workflow: find videos with the TikTok Search Scraper, read what was said with the TikTok Transcript Scraper, pull the audience reaction with the TikTok Comments Scraper, and profile the creators behind them with the TikTok Profile Scraper.


Built with ❤️ for the Apify community