Extract caption transcripts and useful metadata from public TikTok video URLs. Each successful result contains non-empty transcript text from a caption track exposed by TikTok—never a placeholder URL/title row.
What it returns
- Caption transcript text and language
- TikTok video ID, creator username, description, and duration
- Public caption-track and playable-media URLs discovered from the video page
- JSON, CSV, Excel, API, webhook, and MCP-compatible dataset output
Input
{
"startUrls": [
{ "url": "https://www.tiktok.com/@creator/video/1234567890123456789" }
],
"preferredLanguage": "en",
"maxItems": 1
}
startUrls accepts direct public tiktok.com/@creator/video/{id} links and TikTok's vm.tiktok.com or vt.tiktok.com short links. Profiles, search pages, and non-TikTok URLs are rejected before fetching. preferredLanguage selects a matching caption track when available; otherwise the first available track is used.
Output
{
"url": "https://www.tiktok.com/@creator/video/1234567890123456789",
"videoId": "1234567890123456789",
"authorUsername": "creator",
"description": "Video description",
"durationSeconds": 28,
"language": "en",
"transcript": "The complete caption transcript appears here.",
"captionUrl": "https://...",
"videoUrl": "https://...",
"captionSource": "auto"
}
| Field | Meaning |
|---|---|
url |
Canonical public TikTok video URL after redirects |
videoId |
TikTok video identifier |
authorUsername |
Public creator username, when exposed |
description |
Video post description, when exposed |
durationSeconds |
Video duration, when exposed |
language |
Selected caption-track language |
transcript |
Non-empty normalized caption text |
captionUrl |
Source caption-track URL |
videoUrl |
Discovered playable-media URL |
captionSource |
TikTok's caption source label, when exposed |
A public video must expose a caption track. If the video has no captions, is private, removed, or region restricted, the Actor reports a clear error and saves no misleading transcript row, so no result event is charged; the once-per-run start event still applies. It does not generate a speech-to-text transcript when TikTok provides no captions.
API usage
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/best-tiktok-ai-transcript-extractor').call({
startUrls: [{ url: 'https://www.tiktok.com/@creator/video/1234567890123456789' }],
preferredLanguage: 'en',
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].transcript);
MCP endpoint: https://mcp.apify.com?tools=fetch_cat/best-tiktok-ai-transcript-extractor
Responsible use and limits
Process only public videos you are allowed to use. The Actor does not bypass login walls, private-video controls, or geographic restrictions. TikTok can change its public page and caption formats; include the run ID and one reproducible public video URL in support reports.