YouTube Transcript Scraper API - Subtitles, Captions, SRT
Pricing
from $2.50 / 1,000 transcripts
YouTube Transcript Scraper API - Subtitles, Captions, SRT
Get YouTube transcripts with timestamps as JSON, text, SRT or VTT. Videos, Shorts, whole playlists and channels, 100+ languages, manual or auto captions, video metadata. Fast, no browser, no API key; videos without captions are never charged.
Pricing
from $2.50 / 1,000 transcripts
Rating
0.0
(0)
Developer
TrendPulse Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Share
🎬 YouTube Transcript Scraper & API — fast, cheap, no browser
Get the transcript (subtitles / captions) of any YouTube video as clean JSON, plain text, SRT or VTT. Paste video links, a playlist or a whole channel: this YouTube transcript scraper calls YouTube's own data endpoints directly — no headless browser, no API key, no YouTube account — so runs start instantly and cost a fraction of a cent per video.
✅ Transcripts with timestamps (start + duration for every line) and the full text in one field
✅ SRT and VTT subtitle files ready to download or burn into a video
✅ Manual or auto-generated captions — you choose which one wins
✅ 100+ languages: pick your preferred languages in order, with automatic fallback
✅ Whole playlists and channels (/@handle, /channel/UC…) expanded to their videos automatically
✅ Video metadata: title, channel, duration, views, publish date, description, keywords, thumbnail
✅ Works with watch?v=, youtu.be/, Shorts, live replays, embeds and bare video IDs
✅ You never pay for videos without captions or for failed videos
🚀 Why this YouTube transcript API is different
| This Actor | Typical transcript scrapers | |
|---|---|---|
| Price per video | $0.004 (less on higher plans) | $0.005 – $0.01 |
| Playlists and channels in one run | Yes, with pagination | Often single videos only |
| Output formats | Segments, text, SRT, VTT | JSON only |
| Metadata included | Yes (title, channel, views, date…) | Separate Actor |
| Charged for videos without captions | Never | Often |
| Browser needed | No — 5 videos in parallel, seconds per video | Usually slow headless Chrome |
| Blocking handling | Session retries, new IPs, automatic residential fallback | Fails on cloud IPs |
💡 What can you do with YouTube transcripts?
- AI, RAG and LLM training: feed clean, timestamped transcripts into ChatGPT, Claude, LangChain, LlamaIndex or a vector database. Build "chat with this channel" apps.
- Summaries and notes: summarize lectures, podcasts, webinars and tutorials in seconds.
- Content repurposing: turn videos into blog posts, newsletters, X threads, LinkedIn posts and SEO articles.
- Subtitles: download SRT/VTT files and add them to your own videos or editing tools.
- SEO and keyword research: see exactly what top-ranking videos say about a topic.
- Market and competitor research: analyse what competitors, influencers and reviewers say about products and brands.
- Education and accessibility: searchable text for courses, quotes with exact timestamps, study material.
- Data science: sentiment, topic modelling and trend analysis across whole channels.
🛠️ How to get a YouTube transcript (3 steps)
- Paste video links (one per line) — or add a playlist or channel URL.
- Choose languages and formats — e.g.
en, thenes; segments + text, or SRT/VTT. - Click Start and download your dataset as JSON, CSV, Excel, XML or HTML, or fetch it through the API.
📥 Input example
{"videos": ["https://www.youtube.com/watch?v=jNQXAC9IVRw", "https://youtu.be/dQw4w9WgXcQ"],"playlistOrChannelUrls": ["https://www.youtube.com/@TED"],"maxVideosPerSource": 20,"languages": ["en", "es"],"preferManual": true,"outputFormats": ["segments", "text", "srt"],"includeMetadata": true}
📤 Output example
{"videoId": "jNQXAC9IVRw","url": "https://www.youtube.com/watch?v=jNQXAC9IVRw","title": "Me at the zoo","channelName": "jawed","durationSeconds": 19,"viewCount": 380000000,"publishDate": "2005-04-23","language": "en","languageName": "English","isAutoGenerated": false,"availableLanguages": [{ "code": "en", "name": "English", "isAutoGenerated": false }],"segments": [{ "start": 1.2, "duration": 2.16, "text": "All right, so here we are, in front of the elephants" }],"text": "All right, so here we are, in front of the elephants the cool thing about these guys is that…","srt": "1\n00:00:01,200 --> 00:00:03,360\nAll right, so here we are, in front of the elephants\n…","wordCount": 48,"status": "ok"}
Videos without captions are listed in the RUN_SUMMARY record of the run (key-value store), not in the dataset — and they are not charged.
⚙️ Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
videos | array | ["jNQXAC9IVRw"] | YouTube video URLs or 11-character IDs; watch, short, live and embed links work. Maximum 1000. |
playlistOrChannelUrls | array | — | Playlist and channel URLs to expand through InnerTube browse continuation. |
maxVideosPerSource | integer | 50 | Maximum videos read from each playlist or channel. |
languages | array | ["en"] | Language codes in preference order; any available track is a fallback. |
preferManual | boolean | true | Prefer human-written captions over auto-generated captions within the chosen language. |
outputFormats | array | ["segments", "text"] | Choose segments, plain text, SRT or VTT. |
includeMetadata | boolean | true | Include title, channel, duration, views, date, description, thumbnail and keywords. |
concurrency | integer | 5 | Maximum videos being processed in parallel. |
proxyConfiguration, maxRetries | object, integer | Apify Proxy, auto | Proxy and retries; the defaults work for most runs. |
📋 Output fields
| Field | Type | Description |
|---|---|---|
videoId | string | YouTube video ID |
url | string | Watch URL |
title | string | Video title |
channelName | string | Channel name |
channelId | string | Channel ID |
durationSeconds | integer | Duration in seconds |
viewCount | integer | View count |
publishDate | string | Published date |
description | string | Description, up to 5000 characters |
thumbnail | string | Thumbnail URL |
keywords | array | Video keywords |
language | string | Output language code |
languageName | string | Caption track name |
isAutoGenerated | boolean | Selected caption track is automatic |
availableLanguages | array | Available caption tracks |
segments | array | Timed caption segments |
text | string | Plain transcript |
srt | string | SRT subtitle file content |
vtt | string | WebVTT subtitle file content |
wordCount | integer | Transcript word count |
status | string | Always ok for dataset items |
Export as JSON, CSV, Excel, XML or HTML, or read it through the API.
💰 Pricing — pay only for transcripts
| What you run | Results | Cost (free plan) |
|---|---|---|
| 1 video | 1 | $0.004 |
| 100 videos | 100 | $0.40 |
| A 50-video playlist | 50 | $0.20 |
| 1,000 videos | 1,000 | $4.00 |
Higher Apify plans pay less: $0.0035 (Bronze), $0.003 (Silver), $0.0025 (Gold and above). Platform usage and proxies are included. Set a maximum cost per run and the Actor stops cleanly when it is reached. Videos without captions and failed videos are never charged.
🔌 Use the YouTube Transcript API from your code
Python
from apify_client import ApifyClient # pip install "apify-client>=3"client = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("victorrodi/youtube-transcript-scraper-api").call(run_input={"videos": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"], "outputFormats": ["text"]})for item in client.dataset(run.default_dataset_id).iterate_items():print(item["title"], "-", item["text"][:200])
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('victorrodi/youtube-transcript-scraper-api').call({playlistOrChannelUrls: ['https://www.youtube.com/@TED'],maxVideosPerSource: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((v) => console.log(v.title, v.wordCount));
cURL (run and get the results in one call)
curl -X POST "https://api.apify.com/v2/acts/victorrodi~youtube-transcript-scraper-api/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \-d '{"videos": ["dQw4w9WgXcQ"], "outputFormats": ["text"]}'
Also works with Make, Zapier, n8n, Google Sheets, Slack, LangChain, LlamaIndex and MCP / AI agents through Apify integrations.
🤖 Use it from AI agents (Claude, ChatGPT, Cursor…)
This Actor is available to AI assistants through the Apify MCP server. Add it with --actors victorrodi/youtube-transcript-scraper-api, then ask:
"Get the transcript of https://youtu.be/dQw4w9WgXcQ and summarize it in 5 bullet points."
"Fetch the last 10 videos of @TED and list the main ideas of each one."
🛡️ Reliability
- Requests are paced and retried on the same session first, then with a new IP and exponential backoff.
- If YouTube keeps blocking, the Actor switches to residential IPs automatically.
- One failing video never stops the run; every run writes a
RUN_SUMMARYrecord (results, videos without captions, failures, retries). - Playlists and channels are paged safely: a layout change can never make a run loop or overspend.
More examples and docs for all our Actors: trendpulse-scrapers.
📌 Tips
languagesis an ordered preference list:["pt", "en"]returns Portuguese when it exists, otherwise English, otherwise the first available track.- Turn preferManual off to always prefer auto-generated captions (useful for exact timing).
- Keep
concurrencyat 5 for large lists: faster is not cheaper when YouTube starts rate-limiting.
❓ FAQ
Do I need a YouTube API key? No. The official YouTube Data API does not return transcripts of other people's videos; this Actor does, without any key or login.
Which videos work? Any public video, Short or live replay that has captions (manual or auto-generated). Private, deleted, age-restricted and members-only videos are skipped and not charged.
How many videos can I process? Up to 1,000 videos per run, plus playlists and channels (up to 1,000 videos per source).
Can I get subtitles in another language? Yes, when the video has a track in that language: list your preferred languages in order. availableLanguages shows every track of the video.
Is scraping YouTube transcripts legal? The Actor only reads publicly available captions and video information; it collects no personal data. Make sure your use respects YouTube's terms, copyright and the laws that apply to you.
💬 Support
Missing a field, a format or found an issue? Open an issue in the Issues tab — it is answered fast. Feature requests are welcome.