YouTube Subtitle & Transcript Scraper avatar

YouTube Subtitle & Transcript Scraper

Pricing

from $5.00 / 1,000 transcript extracteds

Go to Apify Store
YouTube Subtitle & Transcript Scraper

YouTube Subtitle & Transcript Scraper

Extract YouTube subtitles & transcripts from videos, Shorts, playlists, and channels. Output as JSON, SRT, VTT, or clean LLM-ready text. 100+ languages. Rich metadata: views, description, thumbnail. Multi-fallback engine for maximum reliability. Fair billing β€” failures are free.

Pricing

from $5.00 / 1,000 transcript extracteds

Rating

0.0

(0)

Developer

Richard Feng

Richard Feng

Maintained by Community

Actor stats

0

Bookmarked

63

Total users

3

Monthly active users

2 days ago

Last modified

Share

Extract subtitles and transcripts from any YouTube video β€” fast, reliable, and ready for AI pipelines.

Supports single videos, Shorts, playlists, and entire channels. Works with 100+ languages including auto-generated captions.

🎯 What you get

For each video, the scraper returns:

  • Full transcript text with timestamps
  • Rich video metadata β€” title, channel, description, view count, thumbnail, publish date
  • Language info β€” detected language, auto-generated flag, all available languages listed
  • Multiple output formats β€” pick what fits your workflow

πŸ“€ Output formats

FormatBest for
JSONApps, databases, APIs β€” structured data with timestamps per segment
SRTVideo editors, media players β€” standard subtitle file format
VTTWeb players, HTML5 video β€” WebVTT subtitle format
TextSearch indexing, content analysis β€” plain text joined together
LLMAI/ML pipelines, RAG, fine-tuning β€” clean text with annotations stripped

The LLM format automatically removes [Music], [Applause], speaker labels, and other non-speech annotations so you get pure spoken content ready for language models.

πŸ”— Supported URL types

You can pass any of these as input:

  • https://www.youtube.com/watch?v=dQw4w9WgXcQ β€” standard video
  • https://youtu.be/dQw4w9WgXcQ β€” short link
  • https://www.youtube.com/shorts/dQw4w9WgXcQ β€” YouTube Shorts
  • https://www.youtube.com/playlist?list=PLxxxxx β€” full playlist
  • https://www.youtube.com/@channelname β€” all videos from a channel
  • dQw4w9WgXcQ β€” just the video ID

Mix and match in a single run β€” the scraper handles them all.

πŸ“‹ Input options

OptionDefaultDescription
urlsβ€”List of YouTube URLs or video IDs to process
outputFormatjsonOutput format: json, srt, vtt, text, or llm
languages["en"]Preferred languages in priority order (e.g. ["en", "ja", "de"])
includeAutoGeneratedtrueUse YouTube's auto-generated captions when manual ones aren't available
maxVideos0 (unlimited)Limit how many videos to process from playlists/channels
maxConcurrency3How many videos to process in parallel (1–10)
proxyApify ProxyProxy settings β€” residential proxies recommended

You can also use startUrls (the [{url: "..."}] format) instead of urls β€” both work.

πŸ“‹ Example input

{
"urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/JGwWNGJdvx8"
],
"outputFormat": "llm",
"languages": ["en"],
"maxConcurrency": 2
}

πŸ“€ Example output

Each video produces one result in the dataset:

{
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video)",
"channelName": "Rick Astley",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"description": "The official video for \"Never Gonna Give You Up\" by Rick Astley...",
"publishDate": "2009-10-25",
"viewCount": 1761003712,
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg",
"availableLanguages": ["en", "de-DE", "ja", "pt-BR", "es-419"],
"language": "en",
"languageName": "English",
"isAutoGenerated": false,
"duration": 213,
"wordCount": 487,
"segmentCount": 61,
"text": "We're no strangers to love, you know the rules and so do I...",
"segments": [
{ "text": "We're no strangers to love", "start": 18.64, "end": 21.88 },
{ "text": "You know the rules and so do I", "start": 22.64, "end": 26.96 }
],
"extractedAt": "2026-04-10T07:00:00.000Z",
"error": null
}

When using SRT or VTT format, the result includes an srt or vtt field with the formatted subtitle file content.

πŸ’‘ Recommendations

For best results:

  • Use residential proxies (the default) β€” they work much better with YouTube than datacenter proxies
  • Start with maxConcurrency: 1 if you're processing many videos, then increase gradually
  • Set languages to your target language β€” the scraper picks the best available match
  • Use the LLM format if you're feeding transcripts into AI models β€” it strips all the noise

For large jobs:

  • Use playlists or channel URLs to batch-process videos in one run
  • Set maxVideos to limit playlist/channel scrapes during testing
  • The scraper handles failures gracefully β€” if one video fails, the rest still process. Failed videos show up in the results with an error field so you can retry them later

For AI/ML workflows:

  • The LLM output format gives you clean, annotation-free text optimized for context windows
  • JSON format preserves timestamps, which is useful for building time-aligned datasets
  • The segments array gives you natural sentence boundaries from the original captions

πŸ’³ Fair billing

You're never charged for videos that fail to extract. You only pay for successful results.

🌍 Language support

The scraper supports all languages that YouTube captions are available in β€” over 100 languages. Set your preferred languages in priority order and the scraper will pick the best available match.

If manual captions aren't available in your language, YouTube's auto-generated captions are used as a fallback (unless you disable this with includeAutoGenerated: false).

πŸ› οΈ Error handling

The scraper is designed to be resilient:

  • If a video has no captions, it reports the error and moves on
  • If YouTube rate-limits a request, the scraper retries with backoff
  • If one extraction method fails, it automatically tries alternatives
  • Failed videos appear in the dataset with a descriptive error field β€” successful videos have error: null

πŸ’¬ Need help?

If you run into issues or have questions, open an issue on the Apify Store page.


πŸ€– Use with AI agents

This Actor is callable as a tool by any MCP-capable agent β€” Claude, Cursor, VS Code β€” or by your own code, with no wrapper and nothing extra to deploy.

Connect over MCP

https://mcp.apify.com?tools=autofacts/youtube-subtitle-transcript-scraper

In a client that reads an mcpServers configuration block:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=autofacts/youtube-subtitle-transcript-scraper",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

The agent reads this Actor's parameters and their descriptions straight from the input schema, and the hosted server infers the result field types from the dataset schema β€” so a model knows what to send and what comes back before it ever calls anything.

Or call the API directly

curl -X POST "https://api.apify.com/v2/acts/autofacts~youtube-subtitle-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "languages": ["en"]}'

The response body is the dataset records described above.

🧰 Other Actors by autofacts

Apify only auto-recommends Actors in the same category, so here are the ones that actually pair with this scraper:

ActorWhat it's for
TikTok Subtitle & Transcript ScraperTikTok captions and transcripts
Google Ads ScraperA competitor's YouTube video ads, with the video ids to pull their spoken words here
Google Trends Trending NowWhat is trending on Google right now, in 125 countries, to find the videos worth transcribing
Schema Markup Scraper & SEO AuditorJSON-LD, Open Graph and a 0-100 SEO audit of any URL
Universal Web PrinterTurn any URL or HTML into PDF, PNG, JPEG or WebP
Bluesky ScraperPosts, profiles, feeds and interactions

All of them: apify.com/autofacts