YouTube Transcript Scraper API: Subtitles & Captions avatar

YouTube Transcript Scraper API: Subtitles & Captions

Pricing

Pay per event

Go to Apify Store
YouTube Transcript Scraper API: Subtitles & Captions

YouTube Transcript Scraper API: Subtitles & Captions

YouTube transcript API: bulk transcripts, subtitles and captions from videos, Shorts, playlists, channels and searches. Any language, auto-translate, timestamps, text/SRT/VTT. $2.50 per 1,000.

Pricing

Pay per event

Rating

0.0

(0)

Developer

A Q

A Q

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

YouTube Transcript Scraper API: Bulk Subtitles & Captions

YouTube Transcript Scraper is a fast YouTube transcript API for getting transcripts, subtitles and closed captions in bulk from videos, Shorts, playlists, whole channels and search results. Pick any language, use YouTube's auto-translate, and download timestamped JSON, plain text, SRT or VTT. It costs $2.50 per 1,000 transcripts, and videos without captions are free.

What can this YouTube transcript extractor do?

  • 🎬 Every input type: watch?v=, youtu.be/, /shorts/, /embed/, /live/, video IDs, @handles, channel URLs, playlists and plain search keywords.
  • 🌍 Languages that actually work: a priority list such as ["es", "en", "auto"], where auto is the spoken language. Human captions are preferred over auto-generated ones, and every result lists availableLanguages.
  • 🔤 Translation to any language YouTube supports (translateTo: "en").
  • 🧾 Formats: timestamped segments, plain text, SRT and VTT subtitle files.
  • ✅ Never silently empty: every video gets a clear status (ok, no_captions, language_unavailable, private, age_restricted, unavailable, live, error).
  • ⚡ Fast and block-resistant: no browser, 20+ videos in parallel, session rotation and residential proxy by default.
  • 🔔 Channel monitoring: Only new videos returns just new uploads on a schedule.

Why use it?

  • AI, LLM and RAG: feed clean YouTube transcripts into ChatGPT, Claude, embeddings or vector databases.
  • Content and SEO: turn videos into blog posts, show notes, quotes and subtitles.
  • Research and monitoring: track what channels or competitors say and find keyword mentions.
  • Accessibility and localization: download or translate subtitles as SRT or VTT.

How to get a YouTube transcript

  1. Paste video, Shorts, playlist or channel URLs, or search terms, into Videos.
  2. Set Preferred caption languages and, optionally, Translate to.
  3. Choose Output formats (segments, text, SRT, VTT).
  4. Click Start and download the transcripts, or call the API.

Input

{
"videos": ["https://www.youtube.com/watch?v=jNQXAC9IVRw", "@mkbhd", "how to bake sourdough"],
"languages": ["en", "auto"],
"outputFormats": ["segments", "text", "srt"],
"maxVideosPerSource": 25
}

Output example

Real output for "Me at the zoo" (long fields shortened):

{
"videoId": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"input": "jNQXAC9IVRw",
"title": "Me at the zoo",
"channelName": "jawed",
"channelId": "UC4QobU6STFB0P71PMvOGN5A",
"channelUrl": "https://www.youtube.com/channel/UC4QobU6STFB0P71PMvOGN5A",
"durationSeconds": 19,
"viewCount": 441996352,
"isLive": false,
"description": "Microplastics are accumulating in human brains at an alarming rate\nhttps://www.youtube.com/watch?v=0PT5c1z3LL8\n\n“Nanoplastics and Human Health” with Matthew J Campen, PhD, MSPH\nhttps://www.youtube.com…",
"keywords": [
"me at the zoo",
"jawed karim",
"first youtube video"
],
"thumbnail": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg?sqp=-oaymwEmCOADEOgC8quKqQMa8AEB-AG-AoAC8AGKAgwIABABGFUgWShlMA8=&rs=AOn4CLA9eLBatYv9WbkD4BbZ2Im-biSPTw",
"status": "ok",
"language": "en",
"languageName": "English",
"originalLanguage": "en",
"isAutoGenerated": false,
"isTranslated": false,
"availableLanguages": [
{
"code": "en",
"name": "English",
"isAutoGenerated": false
},
{
"code": "de",
"name": "German",
"isAutoGenerated": false
}
],
"segmentCount": 6,
"wordCount": 39,
"text": "All right, so here we are, in front of the elephants the cool thing about these guys is that they have really... really really long trunks and that's cool (baaaaaaaaaaahhh!!) and that's pretty much al…",
"segments": [
{
"start": 1.2,
"dur": 2.16,
"text": "All right, so here we are, in front of the elephants"
},
{
"start": 5.318,
"dur": 2.656,
"text": "the cool thing about these guys is that they have really..."
},
{
"start": 7.974,
"dur": 4.642,
"text": "really really long trunks"
}
],
"scrapedAt": "2026-10-09T22:46:52.775Z"
}

Proxy: residential by default

YouTube blocks most datacenter IPs, so this Actor uses Apify RESIDENTIAL proxy by default, billed by Apify to your plan (roughly 40 KB per video, a few cents per 1,000 transcripts). The Apify Free plan has no residential proxy, so expect blocked videos there. Blocked videos get error status and are not charged.

How much does the YouTube transcript API cost?

This ActorTypical alternatives
Per 1,000 transcripts$2.50$5 to $10
Videos without captionsFreeOften charged
Run start$0.005varies

Examples: 100 videos ≈ $0.26, a 1,000-video channel ≈ $2.51, plus residential proxy traffic. Set a maximum cost per run and the Actor stops at that limit.

How to use the API (Python, JavaScript, cURL)

Every run is available through the Apify API. Get your API token in Apify Console → Settings → API & Integrations.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("best_apis/youtube-transcript-scraper").call(run_input={"videos": ["https://youtu.be/dQw4w9WgXcQ"], "languages": ["en"], "outputFormats": ["text"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('best_apis/youtube-transcript-scraper').call({"videos": ["https://youtu.be/dQw4w9WgXcQ"], "languages": ["en"], "outputFormats": ["text"]});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL (run and get transcripts in one request)

curl -X POST "https://api.apify.com/v2/acts/best_apis~youtube-transcript-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"videos": ["https://youtu.be/dQw4w9WgXcQ"], "languages": ["en"], "outputFormats": ["text"]}'

Integrations

Connect results to Google Sheets, Slack, email, Zapier, Make, n8n, Airbyte, webhooks or AI agents through the Apify MCP server. Use Schedules in Apify Console to run it hourly, daily or weekly. Export any dataset as JSON, CSV, Excel, XML or HTML.

Works with LangChain, LlamaIndex and AI agents through the Apify MCP server.

FAQ

Is there an official YouTube transcript API? The YouTube Data API only downloads captions for videos you own. This Actor gets public transcripts for any video and returns JSON.

How do I download a YouTube transcript as text or SRT? Add text, srt or vtt to Output formats. Each result includes the transcript in those formats.

Can I get transcripts for a whole channel or playlist? Yes. Paste the channel URL, @handle or playlist URL and set Max videos per source. Shorts are included.

Does it work for auto-generated captions and other languages? Yes, every language YouTube has captions for, plus auto-translation into 100+ languages.

What if a video has no captions? You get a no_captions row with the reason, free of charge.

Is it legal to scrape YouTube transcripts? The Actor reads only publicly available captions, without logging in. You are responsible for how you use the content, including copyright and YouTube's terms. See Apify's guide to web scraping legality.

Questions, bugs or feature requests? Open an issue on the Issues tab. We usually reply within 24 hours.