YouTube Subtitle & Transcript Scraper
Pricing
from $5.00 / 1,000 transcript extracteds
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
Maintained by CommunityActor stats
0
Bookmarked
63
Total users
3
Monthly active users
2 days ago
Last modified
Categories
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
| Format | Best for |
|---|---|
| JSON | Apps, databases, APIs β structured data with timestamps per segment |
| SRT | Video editors, media players β standard subtitle file format |
| VTT | Web players, HTML5 video β WebVTT subtitle format |
| Text | Search indexing, content analysis β plain text joined together |
| LLM | AI/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 videohttps://youtu.be/dQw4w9WgXcQβ short linkhttps://www.youtube.com/shorts/dQw4w9WgXcQβ YouTube Shortshttps://www.youtube.com/playlist?list=PLxxxxxβ full playlisthttps://www.youtube.com/@channelnameβ all videos from a channeldQw4w9WgXcQβ just the video ID
Mix and match in a single run β the scraper handles them all.
π Input options
| Option | Default | Description |
|---|---|---|
| urls | β | List of YouTube URLs or video IDs to process |
| outputFormat | json | Output format: json, srt, vtt, text, or llm |
| languages | ["en"] | Preferred languages in priority order (e.g. ["en", "ja", "de"]) |
| includeAutoGenerated | true | Use YouTube's auto-generated captions when manual ones aren't available |
| maxVideos | 0 (unlimited) | Limit how many videos to process from playlists/channels |
| maxConcurrency | 3 | How many videos to process in parallel (1β10) |
| proxy | Apify Proxy | Proxy 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
errorfield 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
segmentsarray 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
errorfield β successful videos haveerror: 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:
| Actor | What it's for |
|---|---|
| TikTok Subtitle & Transcript Scraper | TikTok captions and transcripts |
| Google Ads Scraper | A competitor's YouTube video ads, with the video ids to pull their spoken words here |
| Google Trends Trending Now | What is trending on Google right now, in 125 countries, to find the videos worth transcribing |
| Schema Markup Scraper & SEO Auditor | JSON-LD, Open Graph and a 0-100 SEO audit of any URL |
| Universal Web Printer | Turn any URL or HTML into PDF, PNG, JPEG or WebP |
| Bluesky Scraper | Posts, profiles, feeds and interactions |
All of them: apify.com/autofacts