YouTube Transcript & Subtitles Scraper API
Pricing
Pay per event
YouTube Transcript & Subtitles Scraper API
Extract YouTube transcripts, subtitles, captions, timestamps & metadata in bulk from videos, Shorts, playlists & channels. Pay-per-video YouTube transcript API, no API key needed. Callable from any MCP client (Claude, Cursor, ChatGPT). Built for RAG, LLM datasets & content repurposing.
Pricing
Pay per event
Rating
0.0
(0)
Developer
George Kioko
Maintained by CommunityActor stats
1
Bookmarked
406
Total users
14
Monthly active users
11 days ago
Last modified
Categories
Share
No API key. No YouTube Data API quota. No monthly subscription. Official-API tools burn quota and miss auto-generated captions; this scraper reads YouTube's caption tracks directly. You pay per extracted transcript. Videos with no captions at all never trigger a per-transcript charge.
YouTube Transcript & Subtitles Scraper is an Apify Actor that extracts transcripts, subtitles, timed caption segments, and video metadata from YouTube videos, playlists, channels, and Shorts, and returns them as structured JSON — with no API key and no YouTube Data API quota. It is a bulk YouTube transcript API and YouTube subtitles scraper built for RAG datasets, LLM training corpora, content repurposing, and video SEO analysis: paste URLs, get clean timestamped text.
✅ Auto-generated + manual captions · ✅ Playlists, channels, Shorts · ✅ Language fallback · ✅ Up to 5,000 videos per run · ✅ $1 per 1,000 transcripts · ✅ MCP ready for AI agents
Pricing
| Event | Price | You pay when |
|---|---|---|
| Actor start | $0.0001 | Once per run |
| Transcript extracted | $0.001 | Per video transcript successfully extracted |
$1 per 1,000 transcripts. The start fee is a hundredth of a cent. A 500-video channel costs about $0.50. No API key, no quota, no subscription — pay only for transcripts you actually receive.
Why this Actor?
- Zero setup friction — no Google Cloud project, no OAuth, no API quota limits.
- Bulk by default — up to 5,000 videos per run; mix video URLs, playlist URLs, channel URLs, Shorts, and raw IDs in one input.
- Auto-generated caption support — works even when the creator never uploaded manual subtitles.
- Language fallback — ask for
en, and if it doesn't exist you still get the best available track instead of an empty row. - LLM-ready output — full text, timestamped segments, or both, plus title/channel/views/duration metadata on every row.
- Loss-leader pricing — $1 per 1,000 transcripts.
How it works
flowchart LRA[Video, playlist,<br/>channel, Shorts URL] --> B[Normalize URL<br/>and discover videos]B --> C[Fetch transcript tracks<br/>manual or auto captions]C --> D{Preferred language<br/>available?}D -- yes --> E[Extract selected<br/>language transcript]D -- no --> F[Fallback to best<br/>available captions]E --> G[Format output<br/>full text, segments, or both]F --> GG --> H[Attach metadata<br/>title, channel, views,<br/>duration, thumbnail]H --> I[Dataset export<br/>JSON, CSV, Excel, API]
What data does it extract?
- Full transcript text — complete spoken content as plain text
- Timed segments — caption segments with start time, end time, and duration
- Video metadata — title, channel name, view count, upload date, duration, description, thumbnail URL
- Language — detected or selected transcript language
- Video URL — direct link to the source video
What is NOT returned
- ❌ Video or audio files — this extracts text, not media
- ❌ Comments or community posts
- ❌ Machine translation — you get the caption tracks YouTube actually serves, in their original languages
- ❌ Burned-in (hardcoded) subtitles — text rendered into the video image has no caption track to read
Quick start
- Open the YouTube Transcript Scraper on Apify Store and click Try for free.
- Paste video URLs, playlist URLs, channel URLs, or raw video IDs into URLs — formats can be mixed.
- Pick a Language (default
en; falls back automatically), an Output Format (full-text,segments, orboth), and toggle timestamps/metadata. - Click Start, then export the dataset as JSON, CSV, or Excel — or pull it via API.
Input parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
urls | Array | Yes | YouTube video URLs, playlist URLs, channel URLs, or video IDs |
language | String | No | Preferred transcript language code (default: en) |
outputFormat | Enum | No | full-text, segments, or both (default: both) |
includeTimestamps | Boolean | No | Include start/end times for each segment (default: true) |
maxVideos | Integer | No | Maximum videos to process, up to 5,000 (default: 50) |
includeMetadata | Boolean | No | Include video title, channel, views, etc. (default: true) |
maxConcurrency | Integer | No | Concurrent requests, 1-20 (default: 5) |
proxyConfiguration | Object | No | Apify Proxy country routing only. The actor always uses BUYPROXIES94952; custom proxy URLs and alternate groups are ignored |
Output example
{"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "How to Build a RAG Pipeline in 2026","channel": "AI Engineering Academy","viewCount": 245000,"uploadDate": "2026-02-15","duration": "14:32","language": "en","fullText": "Welcome to this tutorial on building a retrieval-augmented generation pipeline. Today we'll cover vector databases, embedding models, and...","segments": [{"text": "Welcome to this tutorial on building a retrieval-augmented generation pipeline.","start": 0.0,"end": 4.2,"duration": 4.2},{"text": "Today we'll cover vector databases, embedding models, and chunking strategies.","start": 4.2,"end": 8.8,"duration": 4.6}],"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg"}
Use from Claude, ChatGPT and any MCP agent
Add this actor to any MCP client (Claude, Cursor, ChatGPT) through the Apify MCP server:
https://mcp.apify.com/?tools=george.the.developer/youtube-transcript-scraper
Or call it programmatically:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('george.the.developer/youtube-transcript-scraper').call({urls: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],outputFormat: 'both',});const { items } = await client.dataset(run.defaultDatasetId).listItems();// items[0].fullText, items[0].segments
curl -X POST "https://api.apify.com/v2/acts/george.the.developer~youtube-transcript-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'
Integrations
- n8n — add the Apify node → operation Run Actor and Get Dataset Items → actor
george.the.developer/youtube-transcript-scraper→ mapfullTextinto your workflow. - Make / Zapier — use the Apify app's Run Actor module, then Get Dataset Items.
- Anything else — every run's dataset has a stable URL:
https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&format=json&clean=1.
AI and content pipeline
flowchart TDYT[YouTube videos] --> TR[Transcript extraction]TR --> CLEAN[Clean text + timestamps]CLEAN --> RAG[RAG / vector database]CLEAN --> SEO[Video SEO analysis]CLEAN --> REP[Blog posts, newsletters,<br/>show notes, clips]RAG --> APP[Chatbot or research assistant]SEO --> PLAN[Keyword and topic gaps]REP --> CMS[CMS / social scheduler]
Use cases
- RAG and LLM fine-tuning — turn hundreds of domain videos into a knowledge base or training corpus.
- Content repurposing at scale — one video becomes blog posts, threads, newsletters, show notes.
- Video SEO and competitor analysis — mine top-ranking videos' spoken content for keyword and topic gaps.
- Podcast and webinar archives — long-form recordings become timestamped searchable text.
- Creator research and clipping — find recurring hooks and send timestamped sections to editors or AI agents.
FAQ
Do I need a YouTube Data API key?
No. This scraper works without any API key or Google account. It reads caption tracks directly, so YouTube API quotas never apply.
How much does it cost to transcribe 1,000 videos?
$1. Pricing is $0.001 per extracted transcript plus a $0.0001 run-start fee. Videos without captions never trigger a per-transcript charge.
Does it work with auto-generated captions?
Yes. Both manually uploaded subtitles and YouTube's auto-generated captions are supported, in any language YouTube serves.
Can I scrape entire playlists or channels?
Yes. Pass a playlist or channel URL and the scraper discovers and processes every video, up to your maxVideos limit (max 5,000 per run).
What languages are supported?
Every language YouTube provides a caption track for. Set your preferred language code; if it isn't available the scraper falls back to the best available track instead of returning nothing.
How do I handle geo-restricted videos?
Set proxyConfiguration.countryCode to route through Apify Proxy in the right country. The actor always enforces the BUYPROXIES94952 proxy group for reliability.
Can I use the output for LLM training data?
Yes. The full-text format is designed for direct ingestion into fine-tuning and RAG pipelines; process up to 5,000 videos per run to build large corpora.