Bulk YouTube Transcript Scraper & Transcript API
Pricing
from $3.80 / 1,000 transcripts
Bulk YouTube Transcript Scraper & Transcript API
Get transcripts of all videos in a YouTube channel, playlist or Shorts feed, or any list of video URLs. Bulk YouTube transcript API: timestamped segments, plain text, captions and subtitles, language, views, AI-ready chunks. Clear reason for every video without captions, never charged. No login.
Pricing
from $3.80 / 1,000 transcripts
Rating
0.0
(0)
Developer
API Mint
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
14 days ago
Last modified
Categories
Share
YouTube Transcript Scraper
Get the transcript of any public YouTube video, Short, channel or playlist: timestamped segments and plain text, the caption language and whether it was typed by the creator or auto-generated, plus the video's title, channel, publish date, duration, views, likes and chapters. Paste many URLs at once. Every video without a transcript gets a row that says why, and is never charged.
No YouTube account, no API key, no cookies.
| What you pay | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| Per 1,000 transcripts (videos up to 1 hour) | $4.50 | $4.20 | $4.00 | $3.80 |
| Per 1,000 extra hours of video (long videos and podcasts) | $0.50 | $0.50 | $0.50 | $0.50 |
Proxy traffic is included. Videos without captions, private or unavailable videos, and anything blocked are free.
What you get
| Field | Example |
|---|---|
title, channelName, channelId, channelUrl | "Rick Astley - Never Gonna Give You Up…", "Rick Astley" |
publishDate, durationSeconds, viewCount, likeCount, category | 2009-10-24T23:57:33-07:00, 213, 1825089739, 19481552, Music |
language, languageName, captionType | en, English, manual |
availableLanguages | every caption track: code, name, manual or auto |
text | the whole transcript as one string |
segments | [{start: 18.64, end: 21.88, text: "♪ We're no strangers to love ♪"}, …] |
chunks (optional) | about N words each, with start, end and a link to that moment, ready for embeddings |
srt, vtt (optional) | subtitle files as text |
chapters | from the description: [{title: "Intro", start: 0}, …] |
status, errorMessage | ok, or why there is no transcript |
How to use it
One or many videos
Paste video URLs or IDs into YouTube URLs, one per line. Any shape works: watch?v=, youtu.be/, /shorts/, /live/, /embed/, or the bare 11-character ID.
A whole channel
Paste the channel URL (https://www.youtube.com/@TED, /channel/UC…, /c/…). You get its newest videos first, up to Max videos per channel or playlist (0 = all). Choose regular videos, Shorts, past live streams or everything with Channel videos to include, or paste @TED/shorts or @TED/streams directly. Add Published after ("30 days", "2026-09-01") to keep only recent uploads.
A playlist
Paste the playlist URL (https://www.youtube.com/playlist?list=PL…).
Pick the language
Leave Languages empty to get the language actually spoken in the video. Many videos list another language first (a TED talk in English listed Arabic first), so we don't just take the first track. Or give an order, such as en, es. Creator captions come before auto-generated ones in the same language. If none of your languages exists you get the spoken one with languageMatched: false, or switch off Fall back to another language to get a free language-not-available row instead.
Transcripts for RAG and AI agents
Set AI chunks: words per chunk to 200–500. Each chunk keeps its start and end time and a link that opens the video at that moment, so answers can cite the source.
Monitor a channel
Turn on Only new videos and run the Actor on a schedule. Each run returns only uploads it hasn't returned before for that channel and settings.
Input example
{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://www.youtube.com/@TED"],"maxVideosPerChannel": 20,"publishedAfter": "30 days","languages": ["en"],"chunkWords": 300}
Switching from another transcript Actor? Calls that use startUrls, videoUrls, videoIds, youtube_url, channel_url, language or max_videos work as they are.
Output example
{"videoId": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","status": "ok","errorMessage": null,"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","channelName": "Rick Astley","publishDate": "2009-10-24T23:57:33-07:00","durationSeconds": 213,"viewCount": 1825089739,"likeCount": 19481552,"category": "Music","language": "en","languageName": "English","captionType": "manual","languageMatched": true,"availableLanguages": [{ "code": "en", "name": "English", "type": "manual" },{ "code": "en", "name": "English (auto-generated)", "type": "auto" },{ "code": "de-DE", "name": "German (Germany)", "type": "manual" }],"text": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ …","wordCount": 487,"segments": [{ "start": 1.36, "end": 3.04, "text": "[♪♪♪]" },{ "start": 18.64, "end": 21.88, "text": "♪ We're no strangers to love ♪" }],"extraHours": 0,"source": { "type": "video", "value": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }}
A video without a transcript:
{ "videoId": "aaaaaaaaaaa", "status": "unavailable", "errorMessage": "This video is unavailable", "title": null }
How much does it cost to scrape YouTube transcripts?
| Job | Free plan | Starter |
|---|---|---|
| 100 videos | $0.45 | $0.42 |
| A 1,000-video channel | $4.50 | $4.20 |
| 200 podcast episodes of 3 hours (1 transcript + 2 extra hours each) | $1.10 | $1.04 |
Set a maximum cost per run in the run options and the Actor stops cleanly when it's reached.
Status codes
Every video ends with one status. Only ok is charged.
| Status | Meaning |
|---|---|
ok | Transcript returned |
no-captions | The video has no captions at all |
language-not-available | None of your languages exists and fallback is off |
age-restricted | YouTube wants a signed-in adult |
members-only | Only for channel members |
private | Private video |
unavailable | Removed, or never existed |
live | A live stream still running or a premiere that hasn't started; captions are final once it ends |
region-blocked | Not available in the proxy's country |
blocked | YouTube refused every attempt from fresh IPs (rare; try again later) |
error | Something else; the message says what |
What YouTube does not give
- Transcripts for videos without captions. This Actor reads YouTube's caption tracks; it does not transcribe audio.
- Translations. YouTube's machine translation is rate-limited for everyone, so we return original tracks only.
- Private, members-only or age-restricted videos. They need a signed-in account, and this Actor never logs in.
- Speaker names and word-level timing. Captions are timed per line, without speakers.
- Punctuation on auto-generated captions. They come as YouTube wrote them.
FAQ
Is it legal to scrape YouTube transcripts? The Actor reads the public captions YouTube shows to every visitor, without logging in. Transcripts are the creator's words: use them for analysis, research and search, not to republish someone's content.
Why residential proxies? YouTube answers data-center IPs, including Apify's, with "Sign in to confirm you're not a bot". Residential IPs get through. Their cost is included in the price.
What if YouTube blocks the run? A few blocked requests are normal and retried on fresh IPs. If YouTube starts blocking most of them, the run stops early and tells you so, instead of grinding on. Blocked videos are never charged; try again later.
Why is a language missing? The video has no captions in it. availableLanguages lists what exists.
Can I use it from n8n, Make, Zapier, an API or an AI agent? Yes. Use the Apify integration or API with the input above, or connect it to an AI agent through Apify's MCP server.
How is it different from other transcript scrapers?
| This Actor | Typical | |
|---|---|---|
| Videos, channels and playlists in one run | Yes | Often one video per run |
| Spoken language by default | Yes | First track, often the wrong language |
| Reason for every missing transcript | Yes, free row | Empty result or failed run |
| Publish date, likes, chapters | Included | Often missing or extra cost |
| AI chunks with timestamps and links | Yes | Rare |
| Only new videos for schedules | Yes | Rare |
Feedback
Found a video that should work but doesn't? Open an issue with the video URL and we'll look at it. Reviews help other people find the Actor. See the ./CHANGELOG.md for updates.