A TikTok transcript is the spoken words of a video as text. For most videos TikTok has already made one: the auto captions you see in the player are a WebVTT file generated by speech recognition, and for videos that have it, you can get that file without logging in. If you want the text of one video, the fastest route is a transcript generator site. If you want the transcripts of fifty videos that rank for a search, the fastest route is an API call that returns the caption file's address.

This page covers both, plus TikTok's own captions and running Whisper yourself. The API section has a working Python example and a table of what came back when we pulled the subtitles for every video ranking for how to make cold brew: 8 of 9 had an English auto-transcript, and the longest was 343 words.

The four ways to get a TikTok transcript

1. TikTok's own captions

TikTok introduced auto captions in April 2021 as an option creators could switch on in the editor and correct by hand. In November 2022 viewers got a captions toggle of their own, plus translated captions, and from November 2023 TikTok generates captions by default on every eligible video in a supported language. Creators can edit or delete them after posting but can no longer opt out.

So the transcript exists for most recent videos in English, Spanish, Portuguese, German and a handful of other languages. What TikTok does not give you is a way to copy it. There is no "view transcript" button, no download, and no select-all on the caption text. You can read it a line at a time in the player, and that is it.

2. Transcript generator sites

Search tiktok transcript generator and you get a page of tools that take a video URL and return text. They work in one of two ways, and the difference matters. Some fetch the caption file TikTok already made; Apify's transcript scraper is open about this, returns nothing for a video without public captions, and charges $0.90 per 1,000 transcripts. Others pull the audio and run their own speech-to-text, which also works on videos without captions but means the video passes through a third party's servers. Some want an account before they return anything, and none of them are built for a list of a hundred URLs.

3. Download the video and run Whisper

For a video with no captions, or when you want control over accuracy, run OpenAI's Whisper on your own machine. It is MIT-licensed, needs Python and ffmpeg, and yt-dlp handles the download:

pip install -U openai-whisper yt-dlp
yt-dlp -x --audio-format mp3 -o clip.%(ext)s "https://www.tiktok.com/@creator/video/7497373424814165253"
whisper clip.mp3 --model turbo --output_format txt

The turbo model is the default and runs at a usable speed on a laptop. Drop --output_format and Whisper writes .txt, .srt, .vtt, .tsv and .json next to the file. This route is slow per video, and downloading videos in bulk is the part of the job TikTok's terms object to most.

4. By API

The route for many videos, for search-driven jobs and for agents. One tool call returns a video's metadata including the addresses of its caption files; a plain HTTP GET fetches the WebVTT; twenty lines of Python turn it into text. Developers have been asking for this for a while. An October 2025 thread on r/smallbusiness, "Is there a stable API to get tiktok content?", wants exactly the text of a video with timestamps, and the replies are a list of scrapers that break. The rest of this page is that route.

Getting TikTok transcripts by API

The MCP endpoint is https://mcp.tokconnect.com/mcp over Streamable HTTP with Authorization: Bearer YOUR_TOKCONNECT_KEY. Keys come from app.tokconnect.com, the free tier is 100 credits, and one tool call costs one credit. Client setup for Claude, Cursor and the rest is in the TikTok MCP guide.

Two tools do the work. search_videos takes a keyword, a count and a sort and returns each result's id. video_detail takes that id as aweme_id and returns the video's stats plus, when TikTok has captions for it, a subtitleInfos array. Here is the entry for the top cold-brew result, with the signed address shortened:

"subtitleInfos": [
  {
    "Format": "webvtt",
    "LanguageCodeName": "eng-US",
    "LanguageID": "2",
    "Size": "1477",
    "Source": "ASR",
    "Url": "https://v16m-webapp.tiktokcdn-us.com/…",
    "UrlExpire": "1790096324",
    "Version": "1:big_caption"
  }
],
"captionInfos": [
  {
    "captionFormat": "webvtt",
    "language": "eng-US",
    "languageCode": "en",
    "isAutoGen": true,
    "isOriginalCaption": true,
    "expire": "1790096324",
    "url": "https://v16m-webapp.tiktokcdn-us.com/…"
  }
]

TikTok video detail via TokConnect, pulled 20 September 2026. Open the snapshot (addresses and author fields removed).

Source is the field to filter on. ASR means TikTok's speech recognition on the original audio; MT means a machine translation of it into another language. captionInfos carries the same file with the flags spelled out: isAutoGen tells you nobody corrected it, and isOriginalCaption separates the spoken language from translations. The Url is a public HTTPS file. No cookie, no token, no login.

The Python

With the official mcp package (pip install mcp), searching a keyword and pulling every result's transcript looks like this:

import asyncio, json, os, urllib.request
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

URL, AUTH = "https://mcp.tokconnect.com/mcp", {
    "Authorization": f"Bearer {os.environ['TOKCONNECT_KEY']}"}

def vtt_to_text(vtt):
    lines = [l.strip() for l in vtt.splitlines()]
    return " ".join(l for l in lines if l and l != "WEBVTT"
                    and "-->" not in l and not l.isdigit())

async def transcripts(keyword, count=10):
    async with streamablehttp_client(URL, headers=AUTH) as (r, w, _):
        async with ClientSession(r, w) as s:
            await s.initialize()
            hits = json.loads((await s.call_tool("search_videos", {
                "keyword": keyword, "count": count,
                "sort": "relevance"})).content[0].text)["videos"]
            out = []
            for v in hits:
                d = json.loads((await s.call_tool("video_detail", {
                    "aweme_id": v["id"]})).content[0].text)
                subs = [x for x in d.get("subtitleInfos", [])
                        if x["Source"] == "ASR"
                        and x["LanguageCodeName"].startswith("eng")]
                text = None
                if subs:   # fetch now: the address expires
                    vtt = urllib.request.urlopen(subs[0]["Url"]).read().decode()
                    text = vtt_to_text(vtt)
                out.append((v["id"], d["durationMs"], text))
            return out

for vid, ms, text in asyncio.run(transcripts("how to make cold brew")):
    print(vid, f"{ms // 1000}s", (text or "no subtitles")[:80])
Using mcp 2.x?

The example above uses the Python SDK's 1.x line. In mcp 2.0 and later, which is what pip install mcp gives you today, the helper is streamable_http_client, the headers move onto an httpx2.AsyncClient passed as http_client, and the context manager yields two streams:

import httpx2
from mcp.client.streamable_http import streamable_http_client

async with streamable_http_client(URL, http_client=httpx2.AsyncClient(headers={"Authorization": f"Bearer {KEY}"})) as (read, write):
    async with ClientSession(read, write) as session:
        ...

Both forms return the same tools.

Eleven credits for a keyword: one search, ten details. The GETs are free. Run on how to make cold brew on 20 September 2026, the first line printed was the 56-second top result, and its transcript began: "Today I'm showing you how to make delicious cold brew at home / in two easy ways." Full stop, capital letters, sensible line breaks. That is what TikTok's current ASR looks like on a clear voice.

Five things that will bite you

  • The address expires. UrlExpire is a Unix timestamp. On our pull it was 48 hours out. Fetch the file in the same job as the video_detail call; don't store the URL and come back next week.
  • The file says it is a video. The CDN returns the WebVTT with a Content-Type of video/mp4. Ignore the header and parse the body.
  • Not every video has one. One of our nine had no subtitleInfos key at all. Old videos, music-only videos and unsupported languages come back without it, so treat the key as optional.
  • Size lies occasionally. The 15-second video from 2021 reported Size: "0" and still returned 431 bytes and 7 cues. Fetch anyway.
  • ASR is ASR. The captions are machine output nobody checked (isAutoGen: true). Recent videos come with punctuation and capitals; the 2021 file was all lower case with no punctuation. Product names, numbers and accents are where it slips.

What the data looks like

We searched how to make cold brew by relevance on 20 September 2026 and called video_detail on every result. TikTok returned nine videos for a count of ten.

RankLengthSubtitlesLanguageSourceReported size
156 sYeseng-USASR1,477 B
2105 sYeseng-USASR3,037 B
354 sNononenonenone
499 sYeseng-USASR3,044 B
537 sYeseng-USASR1,214 B
661 sYeseng-USASR2,219 B
760 sYeseng-USASR2,018 B
879 sYeseng-USASR2,851 B
915 sYeseng-USASR0 B (actual 431)

Data: TikTok video detail via TokConnect, pulled 20 September 2026. Detail snapshot, search snapshot.

Eight of nine ranking videos had an English auto-transcript, every one of them ASR rather than MT, and every one in a single language. We then fetched four of the files. The 105-second video gave 42 cues and 343 words; the 56-second one, 19 cues and 167 words; the 37-second one, 16 cues and 134 words; the 15-second one, 7 cues and 40 words. That is roughly 3 words a second, which is the number you need to size a corpus: a hundred one-minute how-to videos is about 18,000 words of transcript.

WebVTT fetches: snapshot with cue counts, word counts and the first two cue lines of each file.

Reading transcripts at scale: what people do with them

A single transcript is a convenience. A hundred of them, tied to the search that surfaced them, is research material you cannot get any other way.

  • Which phrases ranking videos say. TikTok search reads speech as well as captions and on-screen text, so the words spoken in the top ten for a query are a direct look at what TikTok matched. Pull them, count the phrases, and you have a keyword list from the videos themselves. The keyword research guide shows where those phrases go.
  • Hooks. The first cue of each transcript is the hook, timestamped. "Cold brew sucks, but we found a way to fix it" and "Today I'm showing you how to make delicious cold brew at home" are two of the openers on the cold-brew list, and you can pull the first three seconds of a hundred videos in one loop. The hooks guide classifies them.
  • Brand and product listening. Comments tell you what viewers think; transcripts tell you what creators are saying about a product, a competitor or a claim, in their own words. Search the brand, pull the transcripts, grep. The social listening guide builds the whole loop, comments included.
  • Academic analysis. If you qualify for TikTok's Research API, use it: its video object has a voice_to_text field, and the Research API guide covers the application. If you do not qualify, the caption file is the same text, obtained without a headless browser, for a thesis-sized sample.

Limits and etiquette

A transcript is someone's speech. Once you have a thousand of them in a database, you hold personal data about a thousand people, and GDPR and CCPA apply to it the same as they apply to comments and usernames. Keep the video id, keep the text, and think twice before keeping the handle alongside it unless you need it.

Don't republish transcripts wholesale. Quoting a line to make a point is normal; posting the full text of someone's video on your site is copying their work. TikTok's Terms of Service also restrict automated extraction from the platform, and the caption files are served by TikTok's CDN whichever route you take. The scraper guide lays out the terms question in more detail. Nothing on this page is legal advice.

Do it with an agent

None of the Python above is needed if an agent is doing the reading. Connected to the MCP, Claude or ChatGPT will run the search, fetch the details, pull each caption file and read it, then answer a question about all of them at once.

Try this in Claude, ChatGPT or Cursor with TokConnect connected

Search TikTok for "how to make cold brew" and pull the transcripts for the top 10 videos that have subtitles. List every specific claim they make (ratios, steep times, water temperature, grind size), note which claims repeat across videos and which contradict each other, and quote the opening line of each video.

That is eleven credits. The output is a comparison of what ten creators actually said, which is the thing a transcript generator can never give you, because it only ever sees one video at a time.

Frequently asked questions

Does TikTok have a transcript feature?

Not as a transcript you can copy. TikTok auto-generates captions for eligible videos by default (since November 2023) and shows them in the player, where viewers can turn them on or off from the share panel. There is no view, copy or download option for the text. The captions exist as a WebVTT file on TikTok's CDN, which is what transcript tools and the API route on this page read.

How do I get a transcript of a TikTok video?

For one video, paste its URL into a transcript generator site; the honest ones tell you whether they read TikTok's captions or run their own speech-to-text. For a video without captions, download it with yt-dlp and run whisper clip.mp3 --model turbo locally. For many videos, call video_detail for each id, take the Url from subtitleInfos, GET it and strip the WebVTT timings.

Is there a TikTok transcript API?

Not a public one. TikTok's Research API has a voice_to_text field on video objects, but it is open only to approved academic researchers at non-profit institutions. The route above uses an MCP tool that returns the video's subtitleInfos and captionInfos arrays, each with a public WebVTT address, language code, source (ASR or MT) and expiry. One call per video, one credit per call, and a plain HTTP GET for the file.

Are TikTok auto captions accurate?

Good on a clear voice in a supported language, and unedited. Every file we pulled had isAutoGen: true, meaning nobody corrected it. Recent files come with punctuation and capitals; a 2021 file was all lower case with no punctuation. Expect slips on product names, numbers, accents and music-heavy audio. If accuracy matters for one video, run Whisper on the audio and compare.

Can I get TikTok transcripts in other languages?

Yes, when TikTok has made them. subtitleInfos lists one entry per language, with LanguageCodeName such as eng-US and Source set to ASR for the spoken language or MT for a machine translation. Filter on the code you want. In our nine-video sample every file was English ASR, so translations are not there for every video.

What is the difference between a TikTok transcript and TikTok captions?

Same words, different shape. Captions are timed cues shown over the video; a transcript is the cues joined into plain text. TikTok stores the timed version as WebVTT, so a transcript is what you get after stripping the WEBVTT header and the --> timing lines, which the Python on this page does in four lines.

Sources and data