Best YouTube Transcripts Scraper
Pricing
from $5.50 / 1,000 results
Best YouTube Transcripts Scraper
Get the transcript of any YouTube video, Short, playlist or channel with no login or API key. Timestamped captions, plain text, SRT, chapters, language choice, plus video and channel details. Bulk input, auto proxy fallback. Export JSON, CSV or Excel.
Pricing
from $5.50 / 1,000 results
Rating
0.0
(0)
Developer
Data Minds
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
YouTube Transcripts Scraper — captions, SRT, chapters and video details
YouTube Transcripts Scraper takes YouTube video, Shorts, playlist and channel links and returns one row per video with the transcript in the language you choose, timestamped segments, plain text, an optional SRT subtitle file, chapters with their transcript text, and video and channel details. No YouTube account, cookies or API key are needed. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a RAG pipeline. Videos that have no transcript are never dropped: they get a row with a clear status and reason, so you always know what happened.
Why choose YouTube Transcripts Scraper?
- Paste a single link or thousands — bulk input of video, Shorts, youtu.be, playlist and channel links in one run.
- Channel links can end in
/videos,/shortsor/streamsto pick that tab. - Pick the transcript language (or several in priority order). Creator captions win over auto-generated ones.
- Rows appear in the output table while the run is still going, one table per section.
- Starts without a proxy and moves to a stronger proxy only when YouTube rejects requests.
Key features
- YouTube transcript scraper for videos, Shorts, playlists and whole channels
- Five captions formats: caption lines, lines with start and end seconds, XML with or without timestamps, or one single text
- Timed segments with start and end in milliseconds and a readable start time
- SRT subtitles as ready-to-use text (optional)
- Chapters with the transcript text inside each chapter
- Video details: title, channel, views, likes, publish date, category, keywords, hashtags, description, thumbnail
- Honest status per row:
ok,no_transcript,live,upcoming,login_required,unavailable,rate_limited,error
Input
Example input:
{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://www.youtube.com/@Fireship/videos"],"maxVideos": 50,"language": "auto","outputFormat": "captions","includeDetails": true,"includeSrt": false,"maxRetries": 3,"proxyConfiguration": { "useApifyProxy": false }}
| Field | What it does |
|---|---|
📺 urls (required) | YouTube video, Shorts, youtu.be, playlist or channel links, or 11-character video ids. Bulk input is supported. |
📊 maxVideos | Maximum videos read per channel or playlist link (0 = all). Direct video links are always read. |
🌍 language | auto for the original language, or a code such as en, or several in priority order such as en, de. If the language is missing, YouTube's own translation is tried; if that is refused you get the original track and a warning. |
🧾 outputFormat | Shape of the captions field: captions, textWithTimestamps, xmlWithoutTimestamps, xmlWithTimestamps or singleStringText. |
✨ includeDetails | Adds likes, publish date, category, Short / unlisted flags and chapters. One extra request per video. |
🎬 includeSrt | Adds transcript_srt, a subtitle file as text. |
🔁 maxRetries | Retries for a blocked or failed request (1–12, default 3). |
🌐 proxyConfiguration | Optional. Default is no proxy; on rejection the run moves to a datacenter proxy, then a residential proxy, and keeps using it. |
Output
Each video is saved the moment it is read. The main table holds the full row; the same data is also split into separate tables: transcripts, timed segments, video details, chapters and errors.
Example row (shortened, from a real run):
{"id": "jNQXAC9IVRw","url": "https://www.youtube.com/watch?v=jNQXAC9IVRw","title": "Me at the zoo","channel_name": "jawed","channel_id": "UC4QobU6STFB0P71PMvOGN5A","duration_seconds": 19,"view_count": 445835540,"transcript_language": "en","transcript_language_name": "English","transcript_type": "manual","word_count": 39,"transcript_only_text": "All right, so here we are, in front of the elephants\nthe cool thing about these guys is that they have really...","transcript": [{ "text": "All right, so here we are, in front of the elephants", "startMs": "1200", "endMs": "3360", "startTimeText": "0:01" }],"captions": ["All right, so here we are, in front of the elephants"],"status": "ok","error": null,"source_url": "https://youtu.be/jNQXAC9IVRw"}
| Field | Notes |
|---|---|
id, url, title, channel_name, channel_id, channel_url | Video and channel identity |
duration_seconds, view_count | Always present when the video can be read |
like_count, published_at, category, is_short, is_unlisted, chapters | With includeDetails |
is_livestream, keywords, hashtags, description, thumbnail_url | Video content |
transcript_language, transcript_language_name, transcript_type | Which transcript you got: manual, auto or translated |
available_languages | Every caption language YouTube offers for the video |
word_count, transcript_only_text, transcript | Word count, plain text, and timed segments |
captions | The transcript in the outputFormat you picked |
transcript_srt | With includeSrt |
status, error, warning, source_url, scraped_at | source_url is the input link that produced the row |
Age-restricted videos return their details but YouTube hides their captions from logged-out visitors. Live streams have no transcript while live.
🚀 How to use (Apify Console)
- Log in at console.apify.com and open Actors.
- Find Best YouTube Transcripts Scraper and open it.
- Paste your YouTube links, pick the language and format.
- Click Start.
- Watch the log: every saved video is reported as it finishes.
- Open the Output tab when the run completes — separate tables for transcripts, segments, videos, chapters and errors.
- Export to JSON, CSV or Excel.
🤖 Use via API / MCP
Start a run with the Apify API by sending the same JSON as the example input above to the Actor's runs endpoint, with your token in the Authorization: Bearer header. AI agents can call this Actor through the Apify MCP server: claude mcp add --transport http apify "https://mcp.apify.com", then use its search, details and call tools to find and run it.
Best use cases
- Feed video transcripts into an LLM, a vector store or a RAG pipeline
- Build a searchable text archive of a channel or playlist
- Create subtitles (SRT) for accessibility or translation work
- Research topics, quotes and mentions across many videos
- Summarise long videos by chapter
Frequently asked questions
Does it need a YouTube account or API key? No. It reads public data that any visitor can see.
What if a video has no captions? The video still gets a row with status: no_transcript and the reason, and it appears in the errors table.
Can I get a transcript in another language? Yes. Set language. Existing creator or auto captions in that language are used first; otherwise YouTube's translation is tried. If it is refused, the original language is returned and warning explains it.
Why did some rows come back rate_limited? YouTube rejected the connection. The run already retries and moves to stronger proxies on its own; if it still fails, try again later or start with a residential proxy.
Can I scrape a whole channel? Yes. Paste the channel link and set maxVideos (0 = all uploads).
Does it work on Shorts and playlists? Yes, both are accepted.
What if YouTube changes? The scraper refreshes what it depends on at the start of every run, so small changes on YouTube's side do not break it.
Support and feedback
Found a bug or need another field? Open an issue from the Actor's Issues tab in Apify Console.
Legal
Only publicly available data is collected. You are responsible for using it in line with YouTube's terms, copyright and privacy laws such as GDPR.