TikTok Transcript Scraper — Video Subtitles & Captions by URL
Pricing
from $3.00 / 1,000 transcript delivereds
TikTok Transcript Scraper — Video Subtitles & Captions by URL
Get TikTok video transcripts by link or video ID: TikTok's own captions as clean text plus timed segments, with language, author and caption. $0.003 per transcript on every plan. No captions, no charge. No login, no cookies.
Pricing
from $3.00 / 1,000 transcript delivereds
Rating
0.0
(0)
Developer
Nicholas Cheng
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 hours ago
Last modified
Categories
Share
TikTok Transcript Scraper
Give it TikTok video links or IDs — get back what is said in each video, as clean text with timestamps. The transcript is TikTok's own caption track for the video, with its language and the creator's handle and caption. No login, no cookies, no proxy configuration. Accepts full links (tiktok.com/@name/video/…), share links (vm.tiktok.com/…, tiktok.com/t/…), or bare 19-digit video IDs.
You pay only for transcripts that came back. A video without captions, a photo post, or a deleted or private video produces an explanatory row and costs nothing.
| Input | Video URLs, share links, or numeric video IDs — or a CSV / Google Sheet of them |
| Output | One row per transcript: plain text + timed segments + language, author, caption, duration |
| Price | $0.003 per transcript — the same on every Apify plan |
| Not charged | Videos without captions, photo posts, unavailable videos |
What you get
Real output from a run (NASA, 7667244788046892319):
{"inputOrder": 1,"itemType": "transcript","videoId": "7667244788046892319","requestedAs": "7667244788046892319","url": "https://www.tiktok.com/@nasa/video/7667244788046892319","authorHandle": "nasa","authorNickname": "NASA","description": "Drop your questions below! 🚀","createdAt": "2026-07-27T16:25:49.000Z","durationSeconds": 13,"transcriptLanguage": "eng-US","transcriptType": "auto-generated","transcript": "My name is Jared Isaacman. I'm the administrator of NASA. I don't know anything about TikTok, but my team's got it covered, and they say that you should drop your questions in the chat.","subtitles": [{"language": "eng-US","type": "auto-generated","text": "My name is Jared Isaacman. I'm the administrator of NASA. I don't know anything about TikTok, but my team's got it covered, and they say that you should drop your questions in the chat.","segments": [{ "start": 0.02, "end": 1.46, "text": "My name is Jared Isaacman." },{ "start": 1.461, "end": 3.181, "text": "I'm the administrator of NASA." },{ "start": 3.182, "end": 5.501, "text": "I don't know anything about TikTok," },{ "start": 5.502, "end": 6.901, "text": "but my team's got it covered," },{ "start": 6.902, "end": 9.681, "text": "and they say that you should drop your questions in the chat." }]}],"subtitlesNote": null}
transcript— the spoken-language track as one string.subtitles— every caption track TikTok has for the video, each with timedsegments;typeisauto-generated(TikTok's speech recognition) ormachine-translated.transcriptLanguage— TikTok's label for the spoken language. It comes from TikTok's own language detection, which is occasionally wrong; check it before relying on it.
Input
{"videoUrls": ["https://www.tiktok.com/@nasa/video/7695090484124929293","https://vm.tiktok.com/ZMabc123/","7514320905909194030"]}
| Option | Notes |
|---|---|
videoUrls | Full links, share links (followed to the final URL), or bare video IDs. De-duplicated |
listUrl | A public .csv / .txt, or a Google Sheet shared as "Anyone with the link". With several columns, only TikTok links are read |
maxConcurrency | Videos fetched at the same time, 1–10 (default 3) |
maxItems | Hard cap on transcripts for the run |
Every row carries inputOrder (its position in your list) so results map back to your sheet. Long lists are a
normal run: throttled videos are retried slowly at the end, and a migrated or resurrected run skips everything
already delivered — never fetched or charged twice.
Pricing
$0.003 per transcript, on every Apify plan — Free, Bronze, Silver, Gold, Platinum, Diamond. Check the Pricing tab: all six columns are identical. No start fee, no per-minute fee.
Charged once per transcript delivered. A video that turns out to have no captions is a free row, so the price you see is the price per transcript you actually get.
What you are not charged for
| What happens here | |
|---|---|
| Videos without captions | One row with chargedForThis: false and the reason. Common for music-only clips and videos without speech. |
| Photo posts | No audio, nothing to transcribe — free row. |
| Unavailable videos | Deleted, private, or mistyped links — free row with TikTok's own reason. |
| The free plan | Same code path, same fields, same price. No demo mode, no row cap. |
What this Actor cannot do
- No speech recognition of our own. The transcript is the caption track TikTok generated for the video. If TikTok has none, you get none — we do not download the audio and transcribe it. In our own sample of 25 videos across eleven accounts, 15 had captions.
- No video lists. You bring the links; for an account's videos, collect the links first.
- For play, like, comment and share counts, use the
TikTok Video Stats Scraper (it can include the transcript
too, with
includeSubtitles).
How it stays working
The video page is fetched exactly as a browser without cookies would fetch it; TikTok lists the video's caption tracks in the page data, and the caption file is downloaded the same way. There is no login to get banned and no signature to reverse-engineer. Measured from a datacenter address over three rounds: the same 15 of 25 videos had captions every round, and all 48 caption downloads returned text.
Integrating
curl -X POST "https://api.apify.com/v2/acts/nick.cheng~tiktok-transcript-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H 'Content-Type: application/json' \-d '{"videoUrls":["https://www.tiktok.com/@nasa/video/7695090484124929293"]}'
Official clients exist for JavaScript and Python; results export as JSON, CSV or Excel; and the Actor is available as a tool to AI agents through Apify's MCP server.