YouTube Transcript Scraper: AI Chunks, SRT & VTT
Pricing
from $3.00 / 1,000 transcripts
YouTube Transcript Scraper: AI Chunks, SRT & VTT
Get the transcript of any YouTube video, Short, live replay, playlist or channel. Input: video, playlist or channel links. Output: clean text, timestamped lines, AI-ready chunks for RAG, SRT or VTT. Use it to summarize, search or quote videos. Picks the spoken language. Pay per transcript.
Pricing
from $3.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
SB
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
YouTube Transcript Scraper: AI chunks, SRT and VTT
Get the full transcript of any YouTube video, Short or live replay, or of a whole playlist or channel, as clean text, timestamped lines, AI-ready chunks for RAG and embeddings, or SRT / WebVTT subtitle files. Paste video, playlist or channel links, press Start, and download the results as JSON, CSV or Excel, or call the Actor from your own code, n8n, Make, Zapier or an AI agent through MCP.
You only pay for transcripts that are delivered. Listing the videos of a playlist or channel is free. Videos without captions, private videos and invalid links are reported in the results but never charged.
What you get for each video
| Field | Description |
|---|---|
text | The whole transcript as one clean string |
chunks | Transcript split into ~1,000-character pieces, each with start and end seconds. Drop them straight into a vector database |
segments | Every caption line with start and duration |
srt, vtt | Ready-to-save subtitle files (optional) |
language, isAutoGenerated | Which captions were used |
availableLanguages | All caption languages the video has |
title, channel, channelId, durationSeconds, viewCount | Video metadata, included at no extra cost |
sourceType, sourceTitle, sourcePosition | For videos that came from a playlist or channel: where they came from and their position |
Example output
{"videoId": "5MuIMqhT8DM","url": "https://www.youtube.com/watch?v=5MuIMqhT8DM","status": "ok","title": "…","channel": "TED","durationSeconds": 1158,"language": "en","isAutoGenerated": false,"availableLanguages": ["ar", "bg", "en", "…"],"text": "Thank you so much. I'd like to …","chunks": [{ "start": 0.0, "end": 61.4, "text": "Thank you so much. I'd like to …" }],"segments": [{ "start": 12.3, "duration": 2.1, "text": "Thank you so much." }]}
Features
- The right language by default. Many videos list volunteer translations first, so naive tools return Arabic or Bulgarian subtitles for an English talk. This Actor detects the spoken language and returns those captions unless you ask for another one.
- Choose a language. Set
language(for examplede) to prefer German captions when the video has them. - Whole playlists and channels. Paste a playlist link or a channel link (
@handle,/channel/UC…,/c/…,/user/…) and the Actor lists the videos for you, newest first for channels. Choose regular videos, Shorts, past live streams or all uploads, and cap how many per source. - Built for AI. The
chunksfield gives timestamped, size-limited pieces of text, so you can cite the exact moment in a video in your RAG answers. - Subtitles. SRT and WebVTT output with overlapping auto-caption timings cleaned up.
- Reliable. It uses residential proxy and automatic retries with a fresh IP when YouTube blocks a request or a connection drops. In our release tests on 49 varied videos (talks, news, podcasts, Shorts, small channels, seven languages), 81 of 82 caption fetches succeeded across two runs. The one miss was a dropped connection, which is now retried automatically.
- Fast and light. No browser. Two small requests per video and several videos in parallel.
- Clear errors. Every input gets a row. Failed rows have an
errorcode (no_captions,unavailable,age_restricted,blocked…) and a plain-EnglisherrorMessage.
How to use
- Paste YouTube links into YouTube videos, playlists or channels. Watch,
youtu.be, Shorts, live and embed links, video IDs, playlist links and channel links all work. A watch link that has&list=in it counts as that one video; use the playlist link for the whole playlist. - For playlists and channels, set Max videos per playlist or channel (default 50) and which channel uploads to take.
- Optional: set a preferred language or chunk size, or turn on SRT/VTT.
- Click Start. When the run finishes, open the Output tab or export the dataset.
Use it from code
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("sblabs/youtube-transcript-scraper").call(run_input={"videos": ["https://www.youtube.com/watch?v=5MuIMqhT8DM","https://www.youtube.com/@TED", # newest 20 videos of a channel],"maxVideosPerSource": 20,"chunkSize": 1000,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], len(item.get("chunks", [])))
Use it from an AI agent (MCP)
Add the Apify MCP server (https://mcp.apify.com) to Claude, Cursor or any MCP client and ask: "Get the transcript of this YouTube video and summarize it." The agent finds and calls this Actor directly.
Pricing
Pay per event: one charge per delivered transcript. Listing playlist and channel videos costs nothing, at the price shown on the Pricing tab. Videos without captions and failed videos are free. Proxy and compute are included in the price. Set a maximum cost per run and the Actor stops cleanly when it reaches it.
Input options
| Option | Default | Notes |
|---|---|---|
videos | — | Video, playlist or channel links, or video IDs. Required |
maxVideosPerSource | 50 | Videos taken from each playlist or channel, 0 = all (up to 5,000) |
channelContent | videos | videos, shorts (latest 100), streams or all. A channel link ending in /shorts or /streams picks that tab |
language | spoken language | Preferred caption language, e.g. en |
chunkSize | 1000 | Characters per AI chunk, 0 turns chunks off |
includeTimestamps | true | Include timestamped segments |
includeSrt / includeVtt | false | Add subtitle strings |
maxConcurrency | 5 | Videos fetched in parallel |
maxRetries | 3 | Retries with a fresh IP on blocks or dropped connections |
proxyConfiguration | Residential | Datacenter IPs are blocked by YouTube for transcripts |
FAQ
Does it work for videos without captions? No. It reads the captions YouTube already has, either uploaded by the creator or auto-generated. About one in six videos in our test had no captions at all (mostly music and very short clips). Those rows are marked no_captions and are not charged.
Can I get transcripts for a whole channel or playlist? Yes. Paste the playlist or channel link and set how many videos you want. You pay only for the transcripts delivered, not for listing the videos. Errors such as a private playlist or an unknown channel get their own row (playlist_not_found, channel_not_found, no_videos).
Which languages are supported? Any language YouTube has captions for. Machine translation is on the roadmap.
Is it legal? The Actor reads publicly available captions. You are responsible for how you use the data, including YouTube's terms and the copyright of creators. Don't republish transcripts as your own content.
Something broke? Open an issue on the Issues tab with the video link and it will be looked at quickly.
More tools from sblabs
- App Reviews Scraper: Google Play and App Store reviews in one run, same fields for both stores.
- Shopify Products Scraper: every product, price, sale price, variant and stock flag from any Shopify store.
- Product Hunt Launches Scraper: daily, weekly and monthly leaderboards with votes, ranks and topics.