Bulk YouTube Transcript Scraper & Transcript API avatar

Bulk YouTube Transcript Scraper & Transcript API

Pricing

from $3.80 / 1,000 transcripts

Go to Apify Store
Bulk YouTube Transcript Scraper & Transcript API

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

API Mint

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

14 days ago

Last modified

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 payFree planStarterScaleBusiness
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

FieldExample
title, channelName, channelId, channelUrl"Rick Astley - Never Gonna Give You Up…", "Rick Astley"
publishDate, durationSeconds, viewCount, likeCount, category2009-10-24T23:57:33-07:00, 213, 1825089739, 19481552, Music
language, languageName, captionTypeen, English, manual
availableLanguagesevery caption track: code, name, manual or auto
textthe 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
chaptersfrom the description: [{title: "Intro", start: 0}, …]
status, errorMessageok, 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?

JobFree planStarter
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.

StatusMeaning
okTranscript returned
no-captionsThe video has no captions at all
language-not-availableNone of your languages exists and fallback is off
age-restrictedYouTube wants a signed-in adult
members-onlyOnly for channel members
privatePrivate video
unavailableRemoved, or never existed
liveA live stream still running or a premiere that hasn't started; captions are final once it ends
region-blockedNot available in the proxy's country
blockedYouTube refused every attempt from fresh IPs (rare; try again later)
errorSomething 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 ActorTypical
Videos, channels and playlists in one runYesOften one video per run
Spoken language by defaultYesFirst track, often the wrong language
Reason for every missing transcriptYes, free rowEmpty result or failed run
Publish date, likes, chaptersIncludedOften missing or extra cost
AI chunks with timestamps and linksYesRare
Only new videos for schedulesYesRare

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.