YouTube Transcript Scraper - Bulk Subtitles, SRT & RAG Chunks avatar

YouTube Transcript Scraper - Bulk Subtitles, SRT & RAG Chunks

Pricing

Pay per event

Go to Apify Store
YouTube Transcript Scraper - Bulk Subtitles, SRT & RAG Chunks

YouTube Transcript Scraper - Bulk Subtitles, SRT & RAG Chunks

Extract YouTube transcripts in bulk from videos, playlists, channels, @handles or searches. Timestamped segments, plain text, SRT, VTT and RAG-ready chunks, in any caption language, with optional translation.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Data Mill

Data Mill

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

What does YouTube Transcript Scraper do?

This Actor extracts YouTube transcripts and subtitles in bulk and hands them back in whatever shape your pipeline needs: timestamped segments, plain text, SRT, WebVTT, or RAG-ready chunks with per-chunk timestamped links.

Give it anything YouTube: a video URL or ID, a youtu.be or /shorts/ link, a playlist, a channel URL or @handle, or a search like ytsearch:apache spark tutorial. Playlists, channels and searches expand into their videos automatically. Run it in the Console, call it over the API, schedule it, or let an AI agent use it through MCP.

Why this one and not the others

Most YouTube transcript Actors read the watch page and then call /api/timedtext. As of 2026 that route returns an empty body — YouTube gates it behind a session token, which is why so many transcript tools now fail intermittently. This Actor goes through YouTube's InnerTube API (what the official mobile apps use), falls back across seven clients, and runs on a residential proxy by default because YouTube refuses datacenter IPs outright. That combination is why transcripts keep arriving.

This ActorTypical alternative
InputVideos, playlists, channels, @handles, searchOne video URL per run
OutputSegments, text, SRT, VTT, RAG chunksSegments only
LanguagesPick priority order, see all available tracksWhatever comes first
TranslationYouTube auto-translation to any languageNone
MetadataTitle, channel, duration, views, thumbnail, tagsNone
FailuresPer-video status, run keeps goingRun dies

Why use YouTube Transcript Scraper?

  • Feed RAG pipelines and LLMs. The chunks format returns overlapping passages sized for embedding models, each carrying startSeconds, endSeconds and a deep link back to that moment in the video, so your answers can cite the exact timestamp.
  • Repurpose content at scale. Turn an entire channel's back catalogue into blog drafts, summaries or newsletters in one run.
  • Ship subtitles. Download ready-to-use .srt or .vtt files, including YouTube-translated versions.
  • Research and analysis. Search a topic, pull every transcript, and analyse what is actually being said across creators.
  • Accessibility and SEO. Publish text versions of video content that search engines can index.

How to use YouTube Transcript Scraper

  1. Click Try for free.
  2. Paste your sources into YouTube videos, playlists, channels or searches. Mix types freely — one video, a whole channel, and a search can all go in the same run.
  3. Set Max videos so a large channel cannot surprise you.
  4. Choose your Output formats. Pick chunks if this is going into a vector database.
  5. Click Start, then export from the Output tab as JSON, CSV, Excel or HTML.

Input

FieldTypeDescription
videoUrlsarrayVideos, IDs, playlists, channels, @handles, or ytsearch:query
maxVideosintegerCap on videos processed per run
preferredLanguagesarrayLanguage codes in priority order, e.g. ["ja","en"]
includeAutoGeneratedbooleanAccept YouTube's automatic captions (default on)
translateTostringHave YouTube translate captions, e.g. ja
outputFormatsarraysegments, text, srt, vtt, chunks
chunkCharactersintegerTarget chunk size for RAG (default 1200)
chunkOverlapCharactersintegerOverlap between chunks (default 150)
includeMetadatabooleanTitle, channel, duration, views, thumbnail
includeDescriptionbooleanFull description and tags (off by default)
skipVideosWithoutCaptionsbooleanOmit caption-less videos entirely
{
"videoUrls": ["https://www.youtube.com/@MrBeast", "ytsearch:apache spark tutorial"],
"maxVideos": 50,
"preferredLanguages": ["en"],
"outputFormats": ["text", "chunks"],
"chunkCharacters": 1200
}

Output

One item per video. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

{
"videoId": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"status": "ok",
"title": "Me at the zoo",
"channel": "jawed",
"channelUrl": "https://www.youtube.com/channel/UC4QobU6STFB0P71PMvOGN5A",
"durationSeconds": 19,
"viewCount": 403777047,
"language": "en",
"languageName": "English",
"isAutoGenerated": false,
"availableLanguages": ["en", "de"],
"wordCount": 39,
"segmentCount": 6,
"text": "All right, so here we are, in front of the elephants ...",
"transcript": [
{ "startSeconds": 1.2, "durationSeconds": 4.118, "text": "All right, so here we are, in front of the elephants" }
],
"chunks": [
{
"index": 0,
"startSeconds": 1.2,
"endSeconds": 18.88,
"text": "All right, so here we are, in front of the elephants ...",
"charCount": 212,
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw&t=1s"
}
]
}

Data you can extract

FieldDescription
videoId, urlVideo identifier and canonical link
statusok, no_captions, unavailable, network_error or invalid_input
title, channel, channelId, channelUrlVideo and creator identity
durationSeconds, viewCount, thumbnailUrl, isLiveVideo metadata
description, keywordsFull description and tags (opt-in)
language, languageName, isAutoGeneratedWhich caption track was used
availableLanguagesEvery caption language the video offers
translatedTo, translationErrorTranslation target, and why it fell back if it did
transcript[]startSeconds, durationSeconds, text per caption line
textWhole transcript as one string
srt, vttReady-to-save subtitle files
chunks[]RAG passages with timestamps and deep links
wordCount, characterCount, segmentCount, chunkCountSize counters

How much does it cost to scrape YouTube transcripts?

Pay per event, charged only when a transcript is actually returned:

EventPrice
Transcript extracted$0.004
Actor start$0.00005

Videos with no captions, private videos and invalid inputs are reported in the dataset but not charged. 1,000 transcripts cost about $4, whichever formats you request — cheaper than every comparable Actor on the Store.

One thing to leave switched on

YouTube refuses datacenter IPs with "Sign in to confirm you're not a bot", so this Actor ships with Apify residential proxy enabled by default. Leave it on. Residential traffic is billed by Apify at roughly $0.001 per transcript on top of the price above, and without it every run fails. Actors that do not use a residential proxy are the reason transcript scraping has a reputation for being flaky.

Tips

  • Building a vector database? Use outputFormats: ["chunks"] alone. You skip the duplicate text and segments payloads, and every chunk already carries the timestamp link you need for citations.
  • Want human-written subtitles only? Turn off includeAutoGenerated. Videos that only have automatic captions will come back as no_captions instead of lower-quality text.
  • Multilingual channels: put several codes in preferredLanguages (["ja","en"]) and the first available track wins. availableLanguages on every item tells you what else was there.
  • Large channels: raise maxVideos and keep maxConcurrency at 5. If you start seeing network_error, lower concurrency rather than raising it.
  • Translation is throttled by YouTube more aggressively than plain captions. If it is rate limited you still get the original transcript, with the reason in translationError.

FAQ

Which videos work? Any public video that has captions, automatic or human-written. Private, deleted, members-only and age-restricted videos return unavailable with a reason.

Does it need an API key or login? No. No YouTube Data API quota, no OAuth, no cookies.

Can it transcribe videos that have no captions? No. This Actor extracts captions that already exist; it does not run speech-to-text. Check status: "no_captions" to find those videos.

Is scraping YouTube transcripts legal? The Actor reads publicly available caption data without bypassing any login or paywall. Web scraping of public data is generally lawful in many jurisdictions, but you are responsible for complying with YouTube's terms and the copyright of the material you process.

Something broke, or you need another field? Use the Issues tab. YouTube changes its internals regularly, and fixes usually ship within a day.

Other Actors by Data Mill

All of them return clean English-keyed JSON and are maintained the same way.