TikTok Transcript & Video Metadata Scraper API
Pricing
from $1.00 / 1,000 results
TikTok Transcript & Video Metadata Scraper API
Extract existing TikTok transcripts, captions, WebVTT subtitles, timestamps, and structured metadata from public TikTok videos. Supports single URLs, bulk processing, and AI workflows.
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
LanceAPI
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
7
Monthly active users
6 days ago
Last modified
Categories
Share
🎬 TikTok Transcript & Video Metadata Scraper API
Turn public TikTok video URLs into clean transcripts, subtitles, translations, and structured video metadata—one result per URL.
This Actor saves you from building a fragile multi-step workflow. It first uses captions already available for the video. If a video has no usable captions and you enable AI transcript fallback, it can generate a transcript from the spoken audio automatically. Need another language? Enable translation and receive the original transcript and translated version together in the same result.
⭐ Why users choose it
A transcript when you need certainty
Many TikTok videos have captions, but some do not. Turning on aiTranscript gives you a practical safety net: existing captions are always preferred, and AI transcription runs only when no usable caption is available. You do not need to inspect every video first or build a second workflow for missing transcripts.
Extract and translate in one run
Set translate to true, choose a target language, and the Actor handles the rest. The original transcript remains untouched, while translated text, timed segments, WebVTT, and SRT are returned separately. It is a simple one-step path from a TikTok URL to multilingual content.
Transcript plus useful context
Each successfully resolved video can include its description, creator, engagement counts, hashtags, duration, sound information, cover image, and publication time. This makes the Dataset ready for content research, competitor analysis, indexing, and AI workflows.
Safe bulk processing
Submit one URL or a batch. Each URL is processed independently, so one invalid, private, deleted, or temporarily unavailable video does not stop the rest of the run.
🚀 Quick start
{"tiktokUrls": ["https://www.tiktok.com/@samuelszuchan/video/7654471521490062605?is_from_webapp=1&sender_device=pc"],"preferredLanguage": "en","aiTranscript": true,"translate": true,"targetLanguage": "es","formats": ["text", "segments", "vtt", "srt"]}
The Actor returns one Dataset record for each unique URL.
Input
| Field | Type | Default | Description |
|---|---|---|---|
tiktokUrls | string[] | Required | One or more public TikTok video URLs. A single item processes one video; multiple items form a batch. |
preferredLanguage | string | en | Preferred language among captions already available on TikTok. English is the fallback. This setting does not translate. |
aiTranscript | boolean | false | If no usable caption exists, generate a transcript from the video's spoken audio. Existing captions always take priority. |
formats | string[] | text, segments | Choose from text, segments, vtt, and srt. Existing compatibility fields remain available. |
translate | boolean | false | Keep the original transcript and add a translated version in the same result. |
targetLanguage | string | en | Language for the translated transcript. Used only when translate is enabled. |
The input form provides selectable language names, so users do not need to memorize language codes. Supported translation targets include English, Spanish, Portuguese, French, German, Italian, Japanese, Korean, Simplified Chinese, Traditional Chinese, Arabic, Hindi, Russian, Indonesian, Turkish, Vietnamese, Thai, Dutch, Polish, and Ukrainian.
Free Apify users can submit up to 5 unique URLs per run. Paid Apify users can submit up to 200. Exact duplicate strings are removed before processing.
Caption language and translation are different
preferredLanguagechooses from captions that already exist for the video.targetLanguagetells the Actor what language to create whentranslateis enabled.- If the transcript is already in the target language, it is reused without a translation charge.
Output
Core transcript fields:
| Field | Description |
|---|---|
status | success, partial_success, no_transcript, private_video, deleted_video, invalid_url, or error. |
transcriptText | Plain transcript text. |
transcriptSegments | Timestamped { start, end, text } segments. |
transcriptVtt | WebVTT subtitle document. |
transcriptSrt | SRT subtitle document when available. |
transcriptSource | tiktok_caption, tiktok_auto_caption, or ai. |
language | Selected or detected transcript language. |
Optional translation fields:
| Field | Description |
|---|---|
translationText | Translated plain text. |
translationSegments | Translated timed segments with the original timestamps preserved. |
translationVtt | Translated WebVTT subtitles. |
translationSrt | Translated SRT subtitles. |
translationLanguage | Requested target language. |
Video and creator fields include videoId, tiktokUrl, videoDescription, authorUsername, authorNickname, authorId, viewsCount, likesCount, commentsCount, sharesCount, coverImageUrl, hashtags, videoDuration, video dimensions, publication time, region, sound information, creator totals, verification status, and ad status.
Status behavior
| Status | What it means | What remains available |
|---|---|---|
success | All requested stages completed. | Metadata, transcript, and requested translation. |
partial_success | Video metadata or the original transcript succeeded, but a later requested stage could not finish. | Completed earlier-stage data is preserved. |
no_transcript | Video metadata was found, but no usable caption or AI transcript was produced. | Video and creator metadata. |
private_video | The video is not publicly accessible. | A structured status record. |
deleted_video | The video is missing or unavailable. | A structured status record. |
invalid_url | The input is not a supported TikTok URL. | A structured status record. |
error | Video resolution failed before usable metadata could be produced. | A structured status record and safe error message. |
Importantly, a transcript-stage problem does not erase video information that was already retrieved. For example, if AI transcription is temporarily unavailable, the result is partial_success with the video metadata preserved and the transcript fields empty.
Example: AI fallback with translation
{"status": "success","videoId": "7654471521490062605","tiktokUrl": "https://www.tiktok.com/@samuelszuchan/video/7654471521490062605","transcriptText": "Here are three ways to improve your next video.","transcriptSegments": [{ "start": 0.46, "end": 3.2, "text": "Here are three ways to improve your next video." }],"transcriptSource": "ai","language": "en","translationText": "Aquí tienes tres formas de mejorar tu próximo video.","translationSegments": [{ "start": 0.46, "end": 3.2, "text": "Aquí tienes tres formas de mejorar tu próximo video." }],"translationLanguage": "es","videoDescription": "Three practical video tips","authorUsername": "samuelszuchan","viewsCount": 125000,"likesCount": 8400,"commentsCount": 316,"sharesCount": 540,"processedAt": "2026-09-14T12:00:00.000Z"}
API usage
Actor ID:
lance_api/tiktok-transcript-scraper
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('lance_api/tiktok-transcript-scraper').call({tiktokUrls: ['https://www.tiktok.com/@samuelszuchan/video/7654471521490062605?is_from_webapp=1&sender_device=pc',],aiTranscript: true,translate: true,targetLanguage: 'es',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("lance_api/tiktok-transcript-scraper").call(run_input={"tiktokUrls": ["https://www.tiktok.com/@samuelszuchan/video/7654471521490062605?is_from_webapp=1&sender_device=pc"],"aiTranscript": True,"translate": True,"targetLanguage": "es",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
cURL
curl --request POST \"https://api.apify.com/v2/acts/lance_api~tiktok-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \--header "Content-Type: application/json" \--data '{"tiktokUrls": ["https://www.tiktok.com/@samuelszuchan/video/7654471521490062605?is_from_webapp=1&sender_device=pc"],"aiTranscript": true,"translate": true,"targetLanguage": "es"}'
Keep your Apify token in a secure environment variable. Do not place it in source code, prompts, screenshots, or shared logs.
🤖 Use with AI agents
What is AI Agent support?
An AI agent can run this Actor for you, collect its Dataset, and turn the results into summaries, comparisons, tables, or research notes. Instead of writing API requests yourself, you can ask ChatGPT, Claude, Cursor, Codex, or another compatible AI client in everyday language.
Before you start
You need an Apify account, an Apify API token, and an AI client compatible with the Apify MCP Server.
| AI client | Supported when compatible with Apify MCP Server |
|---|---|
| ChatGPT | ✅ |
| Claude | ✅ |
| Cursor | ✅ |
| Codex | ✅ |
Connect your AI client
This Actor works with any AI client compatible with the Apify MCP Server. Connect the client using your own Apify account and API token, then ask it to find and run lance_api/tiktok-transcript-scraper. Connection screens vary by client and can change over time, so follow the current documentation for your AI client or Apify MCP Server.
Copyable Agent prompt
Use the Apify Actor lance_api/tiktok-transcript-scraper for the TikTok URLs I provide.Return one row per URL. Preserve every returned status, including no_transcript,partial_success, invalid_url, private_video, deleted_video, and error. UsepreferredLanguage only to select an existing caption language; never describe itas translation. If I request a transcript even when captions are missing, setaiTranscript to true. If I request another language, set translate to true and usetargetLanguage. Keep the original transcript separate from the translation.After the run, retrieve the Dataset and summarize only the data actually returned.Never invent missing transcripts, metadata, speaker labels, or word-level timing.Do not retry invalid URLs indefinitely. Explain partial results clearly, and neveromit URLs that returned no_transcript or another non-success status.
Example conversations
- “Summarize these TikTok videos. If captions are missing, use AI transcript fallback.”
- “Compare the opening hooks in these videos and show the view and like counts beside each one.”
- “Extract every transcript, translate it to English, and export a table with the original and translated text.”
- “Show only videos without transcripts, but keep their URLs, creators, descriptions, and engagement data.”
Pricing when used by AI agents
AI client calls use exactly the same event-based pricing as direct Actor, API, Task, or schedule runs. Pricing is not based on the number or length of prompts. Using an AI client through MCP does not change the Actor's pricing.
AI Agent FAQ
Which AI clients can use this Actor?
Any AI client compatible with the Apify MCP Server, including ChatGPT, Claude, Cursor, and Codex.
Can my AI agent summarize or compare the transcripts?
Yes. The agent can use the returned transcript and metadata for summaries, tables, comparisons, and other analysis.
Does AI Agent access cost extra?
It does not change this Actor's pricing. Your AI client or platform may have its own separate plan.
Where should I store my Apify API token?
Use the secure credential or environment-variable storage supported by your AI client. Never paste the token into an ordinary prompt.
💰 Pricing
Pricing is event-based. You pay only for the parts that successfully produce usable results.
Base result pricing
| Charge | Free | All other Apify tiers | When charged |
|---|---|---|---|
Video result (video-result) | $0.002/result | $0.001/result | When usable video metadata is returned, including success, no_transcript, or a metadata-preserving partial_success. |
Transcript result (transcript-result) | $0.001/result | $0.001/result | When non-empty transcriptText is returned, whether it came from an existing caption or AI fallback. |
Optional AI transcript and translation pricing
| Optional service | Free | Starter | Scale | Business |
|---|---|---|---|---|
| AI transcription, per 1,000 started video minutes | $5.00 | $3.50 | $3.00 | $2.50 |
| Translation, per started 1,000 source characters | $0.10 | $0.09 | $0.08 | $0.07 |
AI transcription uses the transcript-minute event. Each started video minute is one unit: 60 seconds is 1 unit and 61 seconds is 2 units. It is charged only when AI fallback successfully returns a transcript.
Translation uses the translation-1k-characters event. Each started 1,000 Unicode characters in the original transcript is one unit: 1–1,000 characters is 1 unit and 1,001–2,000 is 2 units. Spaces, punctuation, numbers, English letters, and Chinese characters each count as characters. Billing is based on the original transcript, not the translated output. If source and target are the same language, translation is reused without this charge.
The events combine according to the work completed:
| Result | Charged events |
|---|---|
| Metadata with an existing transcript | video-result + transcript-result |
| Metadata with a successful AI transcript | video-result + transcript-result + started transcript-minute units |
| Successful translation | The applicable result events + started translation-1k-characters units |
| Metadata found, but transcript unavailable or AI fallback failed | video-result only |
| Original transcript succeeded, but translation failed | video-result + transcript-result; no translation charge |
private_video, deleted_video, invalid_url, or resolution error | No result event |
Requesting multiple output formats does not multiply charges. Failed AI transcription and failed translation do not trigger their service events. Exact duplicate input strings are removed before processing. The Actor's Pricing tab is the source of truth for the currently published event configuration.
🎯 Use cases
- Summarize and classify TikTok videos with AI agents
- Compare hooks, scripts, calls to action, and messaging
- Create searchable transcript archives and RAG datasets
- Produce multilingual subtitles without a separate translation workflow
- Export transcript and engagement tables for research
- Add public TikTok context to content-analysis pipelines
How it works
- Validate and deduplicate the input URLs.
- Resolve each public TikTok video.
- Retrieve publicly available caption data and select the preferred language.
- When requested and no usable caption exists, generate an AI transcript from the video's spoken audio.
- When requested, translate the final transcript while keeping the original.
- Normalize transcript formats and public video metadata.
- Write one structured Dataset record per unique URL.
FAQ
Does AI transcription replace existing TikTok captions?
No. Existing usable captions always come first. AI is a fallback only when aiTranscript is enabled and no usable caption is available.
What happens if AI transcription cannot run?
The Actor keeps any video metadata already retrieved and returns partial_success with empty transcript fields. It does not charge AI transcription or a transcript result when no transcript was produced.
Does translation overwrite the original transcript?
No. Original fields remain unchanged. The translated version is returned in separate translation* fields.
What if translation fails?
The original transcript and metadata remain available with status: "partial_success". No translation event is charged.
Can I process multiple videos?
Yes. Put all URLs in tiktokUrls. Each URL receives its own Dataset record and is isolated from failures on other inputs.
Are speaker labels or word-level timestamps included?
No. Segments include caption-level start time, end time, and text. Speaker diarization and word-level timestamps are not claimed.
Does the Actor return comments?
It returns the public comment count when available, not individual comments.
Limitations and responsible use
- Only public TikTok videos are supported. Private, deleted, restricted, or otherwise unavailable content cannot be accessed.
- Caption, media, metadata, and engagement availability can vary by video, region, and time.
- AI transcription quality depends on speech clarity, language, background sound, and recording quality.
- Translation preserves segment timing but translated sentence length and phrasing can differ from the original.
- Cover and media URLs can expire and should not be treated as permanent assets.
- Use the Actor responsibly and comply with applicable platform terms, privacy requirements, and copyright law.
Support
Open the Actor's Issues tab in Apify Console or email lanceapi2026@hotmail.com. Include the Run ID, returned status, safe error message, and a public example URL when appropriate. Never send API tokens, cookies, session IDs, or other secrets.