YouTube Transcript Scraper API - Subtitles, Captions, SRT avatar

YouTube Transcript Scraper API - Subtitles, Captions, SRT

Pricing

from $2.50 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper API - Subtitles, Captions, SRT

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

TrendPulse Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Categories

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 ActorTypical transcript scrapers
Price per video$0.004 (less on higher plans)$0.005 – $0.01
Playlists and channels in one runYes, with paginationOften single videos only
Output formatsSegments, text, SRT, VTTJSON only
Metadata includedYes (title, channel, views, date…)Separate Actor
Charged for videos without captionsNeverOften
Browser neededNo — 5 videos in parallel, seconds per videoUsually slow headless Chrome
Blocking handlingSession retries, new IPs, automatic residential fallbackFails 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)

  1. Paste video links (one per line) — or add a playlist or channel URL.
  2. Choose languages and formats — e.g. en, then es; segments + text, or SRT/VTT.
  3. 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

FieldTypeDefaultDescription
videosarray["jNQXAC9IVRw"]YouTube video URLs or 11-character IDs; watch, short, live and embed links work. Maximum 1000.
playlistOrChannelUrlsarray—Playlist and channel URLs to expand through InnerTube browse continuation.
maxVideosPerSourceinteger50Maximum videos read from each playlist or channel.
languagesarray["en"]Language codes in preference order; any available track is a fallback.
preferManualbooleantruePrefer human-written captions over auto-generated captions within the chosen language.
outputFormatsarray["segments", "text"]Choose segments, plain text, SRT or VTT.
includeMetadatabooleantrueInclude title, channel, duration, views, date, description, thumbnail and keywords.
concurrencyinteger5Maximum videos being processed in parallel.
proxyConfiguration, maxRetriesobject, integerApify Proxy, autoProxy and retries; the defaults work for most runs.

📋 Output fields

FieldTypeDescription
videoIdstringYouTube video ID
urlstringWatch URL
titlestringVideo title
channelNamestringChannel name
channelIdstringChannel ID
durationSecondsintegerDuration in seconds
viewCountintegerView count
publishDatestringPublished date
descriptionstringDescription, up to 5000 characters
thumbnailstringThumbnail URL
keywordsarrayVideo keywords
languagestringOutput language code
languageNamestringCaption track name
isAutoGeneratedbooleanSelected caption track is automatic
availableLanguagesarrayAvailable caption tracks
segmentsarrayTimed caption segments
textstringPlain transcript
srtstringSRT subtitle file content
vttstringWebVTT subtitle file content
wordCountintegerTranscript word count
statusstringAlways 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 runResultsCost (free plan)
1 video1$0.004
100 videos100$0.40
A 50-video playlist50$0.20
1,000 videos1,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_SUMMARY record (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

  • languages is 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 concurrency at 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.