YouTube Transcript Scraper: Channels, Playlists, SRT, Text avatar

YouTube Transcript Scraper: Channels, Playlists, SRT, Text

Pricing

from $1.40 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper: Channels, Playlists, SRT, Text

YouTube Transcript Scraper: Channels, Playlists, SRT, Text

YouTube transcript scraper and API: get captions for any video, Short, channel, playlist or search as text, timestamped segments or SRT. $3 per 1,000 transcripts, charged only when a transcript is returned. No API key, no login.

Pricing

from $1.40 / 1,000 transcripts

Rating

0.0

(0)

Developer

Data Gleaner

Data Gleaner

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

YouTube Transcript Scraper: captions, SRT and timestamps for videos, channels and playlists

Paste YouTube video links, a channel, a playlist or a search phrase and get the transcript of every video as clean text, timestamped segments or an SRT subtitle file, plus title, channel, views and publish date. It reads the captions YouTube already holds, so there is no API key, no login and no audio transcription. $2 per 1,000 transcripts, and you are charged only for videos that return a transcript.

Why this one

  • A clear price you can read in one line. $0.002 per video that returns a transcript, with the proxy cost included. Videos with no captions, unavailable videos and errors cost nothing.
  • A video without captions gives an answer, not silence. You get a row with error: "no-captions" (or unavailable, blocked) so a missing transcript is visible in your data, and it is never charged.
  • Built for YouTube blocking Apify's servers. Every video is tried directly first; if YouTube refuses, the Actor retries up to 3 times through Apify's residential proxy by itself, at no extra charge.
  • Whole channels, playlists and searches. channelUrl, playlistUrl and searchQuery list the videos, then fetch each transcript; publishedAfter and publishedBefore narrow them. Duplicates are fetched once.
  • Scheduled monitoring. With onlyNew, a daily run delivers only videos you have not received yet.
  • Your language when it exists. Set language; if the video has no such track the original or auto-generated one comes back and languageFallback says so.

Minimal input

{"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "outputFormat": "text"}

Leave everything empty to run three sample videos.

Sample output row

A real row from a platform run on 2026-10-11 (long fields shortened; outputFormat: "segments"). likeCount is null when YouTube does not show it.

{
"videoId": "wsstlwuE5XY",
"url": "https://www.youtube.com/watch?v=wsstlwuE5XY",
"title": "How to Clean Up the World’s Dirtiest Industry | Joojin Kim | TED",
"channel": "TED",
"channelId": "UCAuUUnT6oDeKwE6v1NGQxug",
"channelHandle": "@TED",
"channelUrl": "https://www.youtube.com/@TED",
"subscriberCount": 27900000,
"publishedAt": "2026-10-09",
"durationSeconds": 459,
"viewCount": 64551,
"likeCount": null,
"isLive": false,
"description": "Climate strategist Joojin Kim spent years convincing banks across South Korea to...",
"language": "en",
"isAutoGenerated": false,
"languageFallback": false,
"availableLanguages": [
{
"languageCode": "ar",
"name": "Arabic",
"isAutoGenerated": false
},
{
"languageCode": "my",
"name": "Burmese",
"isAutoGenerated": false
}
],
"transcriptText": "For those of us who are worried about climate change, it's no doubt challenging times. It feels like the end of the light of the tunnel gets...",
"wordCount": 999,
"source": "channel:https://www.youtube.com/@TED",
"scrapedAt": "2026-10-11T06:10:46Z"
}

Price

$2 per 1,000 transcripts ($0.002 each). A channel of 200 videos where 180 have captions costs 180 x $0.002 = $0.36; a 1,000-video playlist with captions on every video costs $2.00. Set a maximum charge and the run stops cleanly when it is reached.

What you get

  • One item per video with title, channel (channelHandle, channelUrl, subscriberCount, channelThumbnail), publish date, duration, viewCount, likeCount, description, keywords, thumbnailUrl, the language used, whether it is auto-generated, every language available, the full transcript text and the word count.
  • Timed segments (start, duration and end in seconds) and an srt string when you ask for them.
  • Your preferred language when the video has it. When it does not, the video's original (or auto-generated) track is used and the item says so in language and languageFallback.
  • Several routes to YouTube with automatic fallback and a fresh session on retry, because reliability is what a transcript scraper is for.

Use cases

  • Feed videos into an LLM or a RAG index (summaries, Q&A, search over a channel).
  • Research and content analysis across a whole channel, playlist or topic search.
  • Subtitles (SRT) for editing, translation or accessibility.
  • Quote and keyword monitoring across creators.

Input

{
"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://www.youtube.com/shorts/jNQXAC9IVRw", "arj7oStGLkU"],
"channelUrl": "https://www.youtube.com/@TED",
"maxVideos": 10,
"language": "en",
"includeTimestamps": true,
"outputFormat": "segments"
}
FieldWhat it does
videosVideo URLs (watch, youtu.be, Shorts, embed, live) or 11-character IDs. Channel and playlist URLs pasted here are listed too. Also accepted as startUrls, youtube_url, youtube_urls, videoUrls or urls.
channelUrl, playlistUrl, searchQueryList videos from a channel, playlist or YouTube search, then fetch each transcript. Use any mix with videos; duplicates are fetched once. channel_url, playlist_url and search_query are also accepted.
maxVideosVideos taken from each of the channel, playlist and search (default 10, max 1000; max_videos also accepted). Does not limit videos.
languagePreferred language code, default en.
includeTimestampsstart, duration and end on each segment (default on). Off gives segments with the text only.
outputFormatsegments (default), text, srt or all. transcriptText is always included.
proxyConfigurationOptional. Leave empty: blocked videos switch to Apify residential proxy automatically at no extra charge; see Limits.
maxConcurrencyVideos fetched at once (default 5, max 20).
delaySecsRandom start delay per video, up to this many seconds (default 0.3).
requestTimeoutSecsWait for one YouTube response (default 25).

Run it with nothing filled in and it fetches three sample videos in a few seconds.

Output

{
"videoId": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"title": "Me at the zoo",
"channel": "jawed",
"channelId": "UC4QobU6STFB0P71PMvOGN5A",
"channelHandle": "jawed",
"channelUrl": "https://www.youtube.com/@jawed",
"subscriberCount": 3470000,
"channelThumbnail": "https://yt3.ggpht.com/...",
"publishedAt": "2005-04-23",
"durationSeconds": 19,
"viewCount": 441370197,
"likeCount": 15000000,
"isLive": false,
"description": "The first video on YouTube. ...",
"keywords": [],
"thumbnailUrl": "https://i.ytimg.com/vi/jNQXAC9IVRw/...",
"language": "en",
"isAutoGenerated": false,
"requestedLanguage": "en",
"languageFallback": false,
"availableLanguages": [{"languageCode": "en", "name": "English", "isAutoGenerated": false}],
"transcriptText": "All right, so here we are, in front of the elephants the cool thing about these guys is ...",
"segments": [{"text": "All right, so here we are, in front of the elephants", "start": 1.2, "duration": 2.16, "end": 3.36}],
"wordCount": 39,
"route": "android",
"source": "video",
"scrapedAt": "2026-10-08T16:23:22Z"
}

A video without captions returns {"videoId": "...", "error": "no-captions", ...}. Other error codes: unavailable (private, removed or age-gated), blocked (YouTube refused every route; retry or add a proxy), invalid-input, no-videos, and error for an unexpected failure on one video. Error items are never charged.

Pricing

Pay per event, proxy included: $0.002 per video that returns a transcript (event transcript). No charge for videos without captions, unavailable videos, or errors.

Worked example: a channel of 200 videos where 180 have captions costs 180 x $0.002 = $0.36. A 1,000-video playlist where every video has captions costs $2.00.

Set a maximum charge on the run and it stops cleanly when the budget is used.

Limits

  • Needs captions. Videos with no uploaded or auto-generated captions return no-captions.
  • publishedAt is a date (YouTube shows the day only). It can be null when YouTube does not answer that one extra request; the transcript is still returned.
  • YouTube blocks many datacenter IP addresses, which includes Apify's own servers. Every video is tried directly first. A video that gets blocked is retried through Apify's residential proxy, up to 3 times with a new IP each time. The proxy fee is included in the $0.002 price; you pay nothing extra for it. If you set your own proxyConfiguration, that proxy is used for every request and the automatic residential retry is off.
  • Live streams in progress and members-only videos have no transcript available.

FAQ

Is a residential proxy used, and do I pay for it? For some videos, yes. Videos that YouTube blocks on the first direct try are fetched through Apify's residential proxy, which is what makes the success rate high. The price per transcript already includes it, and videos without a transcript are never charged.

Do I need a YouTube API key? No.

Does it download audio or transcribe speech? No. It returns the captions YouTube already holds, so it is fast and cheap.

Why is languageFallback true? The video has no track in your preferred language, so the original or auto-generated one was returned. language tells you which.

Does it accept Shorts? Yes, Shorts URLs and IDs work like any video.

Responsible use

This Actor reads public caption data that YouTube shows to anyone. Respect creators' rights and YouTube's terms for how you use transcripts, and handle any personal data in them under the laws that apply to you; those obligations rest with you.