YouTube Transcript & Video-Context Extractor avatar

YouTube Transcript & Video-Context Extractor

Pricing

from $12.00 / 1,000 video transcribeds

Go to Apify Store
YouTube Transcript & Video-Context Extractor

YouTube Transcript & Video-Context Extractor

LLM-ready YouTube transcripts, metadata and chapters for AI agents. Batch by video, playlist or channel. No login, no API key.

Pricing

from $12.00 / 1,000 video transcribeds

Rating

0.0

(0)

Developer

Zeeshan Faizal

Zeeshan Faizal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

YouTube Transcript & Video-Context Extractor — LLM-Ready Transcripts for AI Agents

Extract clean, structured YouTube transcripts, video metadata, and chapters — batch by video, playlist, or channel. Built for AI agents, RAG pipelines, and LLM apps. No login, no YouTube API key, no cookies.

Give it YouTube video URLs (or bare IDs), a playlist, or a channel, and get back agent-ready transcripts as structured JSON, Markdown, SRT subtitles, or plain text — with timestamps, auto-detected chapters, caption language handling, and full video metadata. Pay only for what you extract (pay-per-event), and default to Apify's automatic proxy so you never need to buy your own.

Keywords: youtube transcript, youtube transcript api, video transcript scraper, youtube captions, youtube subtitles, transcript extractor, LLM, RAG, AI agent, video to text, youtube summary input, timestamps, chapters, SRT, playlist transcript, channel transcript.


Why this Actor

  • LLM-ready output. Every record includes a joined text field and an agent-ready markdown document (H1 title, metadata block, chapters, timestamped or paragraph-segmented body) — drop it straight into a prompt or a vector store.
  • Batch anything. One video, a list of videos, a whole playlist, or a channel's recent uploads — capped by maxVideos so you never over-scrape.
  • Language + translation aware. Prefer a specific caption language, prefer human (manual) captions over auto-generated, and optionally translate via YouTube's own translation tracks.
  • Chapters + metadata. Title, channel, duration, publish date, view count, description, thumbnails, available caption languages, and video chapters.
  • Robust by design. Two extraction paths (watch-page parse + innertube), per-video error isolation, retries with backoff, and graceful handling of no-caption / private / removed / live videos — one bad video never aborts the run.
  • No paid proxy required. Defaults to Apify's automatic datacenter proxy. Switch on residential only if you hit blocks at scale.

Input

Provide at least one source. Everything is optional beyond that.

FieldTypeDefaultDescription
videoUrlsstring[]Video URLs (watch, youtu.be, shorts, embed) or bare 11-char IDs
playlistUrlstringPlaylist URL or ID → expanded to its videos
channelUrlstringChannel URL (/channel/UC…, /@handle, /c/, /user/) or bare @handle → recent uploads
startUrlsrequest[]Advanced: list of { "url": … }; video/playlist/channel auto-detected
languagestringautoPreferred caption language code, e.g. en, es, de
translateTostringTranslate captions into this language (best-effort, uses YouTube translation tracks)
preferManualCaptionsbooleantruePrefer human captions over auto-generated
includeTimestampsbooleantrueKeep per-segment timestamps (off = paragraph prose)
includeChaptersbooleantrueExtract chapters when present
outputFormatenumjsonjson · markdown · srt · text
maxVideosinteger50Cap after playlist/channel expansion
maxConcurrencyinteger5Parallel videos (raise only with residential proxies)
proxyConfigurationproxyApify autoDefaults to Apify datacenter proxy; enable RESIDENTIAL if blocked

Example input

{
"videoUrls": [
"https://www.youtube.com/watch?v=arj7oStGLkU",
"PHDbWvnkDL0"
],
"playlistUrl": "https://www.youtube.com/playlist?list=PLUCPc-R61w-s",
"language": "en",
"preferManualCaptions": true,
"includeTimestamps": true,
"includeChapters": true,
"outputFormat": "json",
"maxVideos": 25
}

Output

One dataset record per video. Metadata and flags are always present; the transcript representation follows outputFormat.

json (default) — abridged real record

{
"videoId": "arj7oStGLkU",
"url": "https://www.youtube.com/watch?v=arj7oStGLkU",
"title": "Inside the Mind of a Master Procrastinator | Tim Urban | TED",
"channel": "TED",
"channelUrl": "https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug",
"durationSeconds": 844,
"publishDate": "2016-04-06T09:59:35-07:00",
"viewCount": 61765891,
"availableCaptions": [
{ "language": "en", "kind": "manual", "name": "English" },
{ "language": "es", "kind": "manual", "name": "Spanish" }
],
"chapters": [],
"transcriptAvailable": true,
"isAutoGenerated": false,
"language": "en",
"translatedTo": null,
"transcript": [
{ "start": 12.645, "dur": 1.37, "text": "So in college," },
{ "start": 15.349, "dur": 1.564, "text": "I was a government major," }
],
"text": "So in college, I was a government major, which means I had to write a lot of papers. ...",
"markdown": "# Inside the Mind of a Master Procrastinator ..."
}

markdown — agent-ready document

# Inside the Mind of a Master Procrastinator | Tim Urban | TED
- **Channel:** TED (https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug)
- **URL:** https://www.youtube.com/watch?v=arj7oStGLkU
- **Duration:** 14:04
- **Published:** 2016-04-06
- **Views:** 61,765,891
- **Transcript:** manual captions (en)
## Transcript
**[00:12]** So in college,
**[00:15]** I was a government major,
...

srt returns a standard subtitle string; text returns the full joined transcript. Videos with no captions return a record with transcriptAvailable: false (still with metadata); private/removed/unavailable videos return a row with error and errorMessage.

Pricing (pay-per-event)

You pay per unit of value delivered — nothing for videos that fail:

EventPriceWhen
Actor start$0.00005Once per run (covers startup)
Video transcribed$0.005Per video with a delivered transcript
Video metadata (no captions)$0.002Per valid video that has no captions

Private, removed, age-restricted, or otherwise unavailable videos are never charged. A 1,000-video run of transcribable videos costs about $5. Set a max charge per run in the Console to cap spend — the Actor stops gracefully when it's reached.

Languages, limits & behavior

  • Languages: any language YouTube has captions for. language picks the track; preferManualCaptions prefers human captions; falls back to auto-generated. translateTo uses YouTube's translation tracks (best-effort — YouTube rate-limits translation, and the Actor returns the original captions if a translation is unavailable).
  • Playlists expand up to ~100 videos per page (then capped by maxVideos). Channels expand to the most recent uploads. Use maxVideos to control cost.
  • No captions is not an error — you get metadata and transcriptAvailable: false.
  • Live / private / age-restricted / removed videos are handled gracefully as error rows; the run continues.
  • Blocks: YouTube rate-limits aggressive extraction from shared IPs. The default Apify proxy works for typical volumes; for large runs or if you see empty transcripts, enable RESIDENTIAL proxy groups and/or lower maxConcurrency.

Use with AI agents / MCP

This Actor is designed as a tool for LLM agents: point it at a video and feed the markdown or text straight into a prompt, or push transcript segments into a vector database for RAG. It runs headless (plain HTTP, no browser), so it's fast and cheap to call at scale.

This Actor reads publicly available caption data and public video metadata for videos you supply. It does not log in, does not bypass access controls, does not download video/audio, and does not access members-only or private content. It respects rate limits with backoff. You are responsible for using extracted transcripts in accordance with YouTube's Terms of Service and applicable copyright law. See LEGAL.md.