Video Transcript API — YouTube + TikTok for AI Agents avatar

Video Transcript API — YouTube + TikTok for AI Agents

Pricing

$1.00 / 1,000 transcripts

Go to Apify Store
Video Transcript API — YouTube + TikTok for AI Agents

Video Transcript API — YouTube + TikTok for AI Agents

Fetch video transcripts from YouTube and TikTok in one JSON schema for AI pipelines and agents. $1 per 1,000 transcripts, misses free, no start fee, batch up to 1,000 URLs.

Pricing

$1.00 / 1,000 transcripts

Rating

0.0

(0)

Developer

architek.earth

architek.earth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Categories

Share

🎬 Video Transcript API — YouTube + TikTok, One Schema for AI Agents

One API for every video platform your agents watch. Paste YouTube and TikTok URLs in one list and get back one JSON shape for all of them: platform, videoId, url, title, transcript, language, durationSec. Recorded 18 Oct 2026 on Apify infrastructure: 7 of 7 YouTube and 12 of 12 TikTok test URLs were answered on the first attempt, with 0 retries — 15 transcripts, and the captionless and non-existent videos correctly returned as free status rows.

From Architekture, makers of the Threads, Reddit, Substack and retail scrapers.

🤖 Built for AI workflows. One deterministic, schema-stable row per URL — drop it into LLM context, RAG pipelines or agent tool calls via the Apify API, the Apify MCP server (mcp.apify.com), LangChain, LlamaIndex, or AI coding agents like Claude Code and Cursor. Your agent never has to branch on which platform a link came from.

🌐 Platforms📍 Access📦 Recorded run💰 From🔑 Standout fields
YouTube + TikTok in one list (Instagram Reels: free status row)Public videos, no login 🌍5 YouTube + 10 TikTok transcripts, 0 retries$1.00 / 1,000 transcriptssame transcript / language / durationSec on every platform, optional timestamps

Give it video URLs and get one row per distinct URL:

  • the full transcript as one plain-text string, ready for a prompt
  • the language you got (en, de, en-US …) and whether it was auto-generated
  • the video title (TikTok: the caption text), author/channel and duration in seconds
  • optional segments with start time, duration and text for each cue

🚀 Why choose this actor

  • 🔗 One schema across platforms. YouTube and TikTok rows have exactly the same fields, in the same types. Mix links in one run; no per-platform parsing on your side.
  • 💸 $1 per 1,000 transcripts, no start fee, no per-minute fee. A 20-minute TED talk costs the same $0.001 as a 30-second TikTok.
  • 🆓 Never pay for misses. No captions, private, removed, wrong language, blocked or not a video URL: you get a free row with a machine-readable status and a plain-English message.
  • ✅ Never charged for a language you did not ask for. Ask for de and the video has only English: the row is language_unavailable (free) and lists what exists.
  • 🔎 Batch-friendly. Up to 1,000 URLs per run, 4 in parallel; the same video given twice (or as a short link) is delivered and charged once, and the repeat gets a free duplicate row.
  • 📈 Resumable. After a platform migration or a resurrect, the run continues where it stopped, without duplicate or re-charged rows.

⚠️ Worth knowing up front

QuestionAnswer
Does it transcribe audio itself?❌ No. It returns the captions the platform already has (uploaded or auto-generated). No speech-to-text, so no hallucinated words.
Instagram Reels?❌ Not in this version. Instagram shows logged-out visitors no caption tracks (checked 18 Oct 2026). Reel URLs get a free not_supported row.
How many TikToks have subtitles?In our 18 Oct 2026 sample of 15 news and brand videos, 12 had TikTok's auto-captions. Videos without speech usually have none (free row).
Do I need an account or cookies?❌ No. Public videos only.
Translation?❌ Not in this version. You get the tracks the platform has; languages picks among them.
Which TikTok links work?tiktok.com/@user/video/…, embeds and m.tiktok.com/v/….html (tested live). vm./vt.tiktok.com and /t/ short links are supported (live check pending). Photo posts get a free row.

⚡ Try the example

{
"videoUrls": [
"https://www.youtube.com/watch?v=iG9CE55wbtY",
"https://www.tiktok.com/@nasa/video/7697300954667994381"
]
}

Add "includeTimestamps": true for per-cue timing, or "languages": ["de", "en"] to prefer German, then English.

⚙️ Input parameters

ParameterTypeDefaultDescription
videoUrlsarray—YouTube (watch, youtu.be, Shorts, embed, live, or a bare 11-character ID) and TikTok URLs, mixed. Instagram Reel URLs get a free not_supported row. Up to 1,000.
languagesarray[]Language codes in order of preference (en, de, pt-BR). Empty = the video's own language (the track the platform shows by default). No match = free language_unavailable row.
includeTimestampsbooleanfalseAdds segments (start, duration in seconds, text). Off keeps rows small for LLM context.
proxyConfigurationproxyApify ResidentialUsed for YouTube only. YouTube refuses Apify datacenter IPs (7 player clients tested 18 Oct 2026), so Residential is the default and the only tested option. TikTok always uses the Apify datacenter proxy.
feedbackstring—A note to the maintainers. Read by a human.

🧱 Stable fields for automations

Every row has every field below (null when not applicable), whatever the platform or status. New fields are only ever added.

FieldMeaning
platformyoutube, tiktok or instagram (null for an unrecognised URL).
videoId, urlThe platform's video ID and the canonical video URL.
titleYouTube title; TikTok caption text (TikTok has no separate title).
transcriptThe whole transcript as one string (null unless status is ok).
languageLanguage of the transcript you got, e.g. en, de, en-US.
durationSecVideo length in seconds.
statusok (charged) or a free status: no_captions, language_unavailable, unavailable, private, age_restricted, blocked, error, invalid_url, not_supported, duplicate.
messageWhy, in plain English, when status is not ok.
isAutoGenerated, isTranslatedAuto captions (YouTube ASR, TikTok's auto-captions); isTranslated is true only for a TikTok machine-translated track you asked for in languages (never chosen unasked).
authorYouTube channel name or TikTok handle.
segments, segmentCountCues (start, duration, text) when includeTimestamps is on; segmentCount always.
availableLanguagesThe caption tracks the video has, so you can re-ask in another language.
input, scrapedAtThe URL exactly as you gave it; ISO 8601 UTC time.

📦 Output example

Assembled from values recorded on 18 Oct 2026 (transcripts shortened here).

{
"platform": "tiktok",
"videoId": "7697300954667994381",
"url": "https://www.tiktok.com/@nasa/video/7697300954667994381",
"title": "There was plenty to see across NASA this week 🚀 …",
"transcript": "From breaking records on Mars to lighting up the skies over Earth, NASA put on quite a show this week. …",
"language": "en-US",
"durationSec": 121,
"status": "ok",
"message": null,
"isAutoGenerated": true,
"isTranslated": false,
"author": "nasa",
"segments": null,
"segmentCount": 43,
"availableLanguages": [{ "language": "en-US", "isAutoGenerated": true, "isTranslated": false }],
"input": "https://www.tiktok.com/@nasa/video/7697300954667994381",
"scrapedAt": "2026-10-18T22:02:20Z"
}

The same shape from YouTube:

{ "platform": "youtube", "videoId": "iG9CE55wbtY", "title": "Do schools kill creativity? | Sir Ken Robinson | TED", "transcript": "Good morning. How are you? …", "language": "en", "durationSec": 1203, "status": "ok", "isAutoGenerated": false, "segmentCount": 427 }

A video without captions (free):

{ "platform": "youtube", "videoId": "TtIrFvWoY8E", "title": "NASA Climate Spiral", "transcript": null, "durationSec": 30, "status": "no_captions", "message": "This video has no captions (the uploader disabled them or none were generated). Not charged." }

🧠 Advanced usage

  • 🗂️ Agent tool call: expose the actor as one tool, "get transcript for these URLs"; branch only on status.
  • 🔎 RAG over a channel: feed transcript to your chunker; keep url and videoId as citation metadata.
  • 📈 Clip search: turn on includeTimestamps and search segments[].text to jump to the second a phrase is said.
  • ✅ Completion check: read RUN_SUMMARY. It has status (COMPLETE, PARTIAL, NO_RESULTS, BUDGET_LIMIT, TIME_LIMIT, ABORTED, STATE_SAVE_FAILED, PUSH_FAILED, INVALID_INPUT, NOT_CONFIGURED), transcripts, byPlatform, byStatus, charged and pending.

🔌 Integrations

Export as JSON, CSV or Excel; push to Google Sheets; trigger from Make, Zapier or n8n; get a webhook when a run finishes; schedule with the Apify Scheduler.

💸 How much does it cost?

1,000 transcripts ≈ $1.00. A 50-video research batch ≈ $0.05. Videos without captions, private or removed videos and Instagram links cost nothing. Platform usage (including the residential proxy YouTube needs) is included, and there is no start fee.

💰 Pricing

EventPriceCovers
transcript$1.00 / 1,000One row with status: "ok" — one video's transcript, any length, any platform

Every other row is free. A run stops cleanly at your spending limit, with charges equal to transcripts delivered.

❓ FAQ

Why is a TikTok transcript slightly off? TikTok's auto-captions are speech recognition. We return them verbatim and mark them isAutoGenerated: true; we never edit or "fix" words.

Which YouTube track do I get with no languages? The one YouTube itself shows by default; if YouTube marks none, the spoken language (a manual track in it wins over auto-captions).

Why blocked? The platform refused the request after 3 attempts on fresh IPs. It is free; re-run just those URLs later.

🤖 For AI agents & LLM apps

architekture/unified-transcript-api turns YouTube and TikTok video URLs into transcripts in one deterministic, schema-stable JSON shape: platform, videoId, url, title, transcript, language, durationSec, plus a machine-readable status. Invoke it from any agentic workflow via the Apify API or the Apify MCP server (mcp.apify.com) as a tool call. Cost is bounded before it starts: $1.00 per 1,000 transcripts, no start fee, and misses are free. Honest limits: existing captions only (no speech-to-text, no translation), public videos only, no Instagram in this version.

Works out of the box with LangChain, LlamaIndex and AI coding agents — call it as a tool from Claude Code, Cursor, or any MCP client via mcp.apify.com.

🧰 More Architekture scrapers

🙋 Support

Open an Issue on this actor's page; a human replies within a day.

This actor reads only captions that YouTube and TikTok show logged-out visitors on public videos, without an account. Transcripts can be copyrighted and can contain personal data. You are responsible for having the right to use them (copyright, GDPR/CCPA) and for the platforms' terms. Not affiliated with YouTube, Google, TikTok, ByteDance, Instagram or Meta.

📝 Changelog

  • 2026-10-18: 1.0. YouTube and TikTok transcripts in one schema; language preference with free language_unavailable; optional timestamps; short-link resolution and de-duplication; free status rows for every miss (Instagram Reels included); clean stops at the spending limit and timeout; resumable after platform migration.