YouTube Transcript Pro
Pricing
$2.00 / 1,000 video processeds
YouTube Transcript Pro
CAPABILITIES: extract_transcript, extract_subtitles, batch_playlist, batch_channel. FORMATS: json, srt, vtt, text, markdown. INPUT: YouTube URLs. OUTPUT: timestamped segments, plain text, metadata. LANGUAGES: auto-detect. NO_API_KEY. PPE: $0.002/video.
Pricing
$2.00 / 1,000 video processeds
Rating
0.0
(0)
Developer
Bado
Actor stats
0
Bookmarked
4
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Transcript Pro
Extract transcripts, subtitles, and captions from YouTube videos, playlists, and channels.
Capabilities
| Capability | Description |
|---|---|
extract_transcript | Extract full transcript from any YouTube video URL |
extract_subtitles | Get SRT/VTT subtitle files ready for video players |
batch_playlist | Process all videos in a YouTube playlist in one run |
batch_channel | Process recent videos from a YouTube channel |
auto_language | Auto-detect caption language, or specify preferred |
multi_format | Output as JSON, SRT, VTT, plain text, or markdown |
Input Schema
{"urls": ["string"], // YouTube video, playlist, or channel URLs (REQUIRED)"outputFormat": "string", // "json" | "text" | "srt" | "vtt" | "markdown" (default: "json")"language": "string", // ISO 639-1 code e.g. "en", "pt", "es" (default: auto-detect)"includeAutoGenerated": true, // Fall back to auto-generated captions (default: true)"maxVideos": 50 // Max videos per playlist/channel (default: 50)}
Output Schema
Each item in the output dataset contains:
{"videoId": "string", // YouTube video ID (11 chars)"videoUrl": "string", // Full YouTube URL"title": "string", // Video title"channelName": "string", // Channel name"duration": "string", // "MM:SS" or "HH:MM:SS""viewCount": "integer", // View count at time of extraction"uploadDate": "string", // ISO date"language": "string", // Detected caption language code"captionType": "string", // "manual" | "auto-generated""transcript": "string", // Formatted transcript (format depends on outputFormat)"segments": [ // Array of timestamped segments{"text": "string", // Segment text"offset": "integer", // Start time in milliseconds"duration": "integer" // Duration in milliseconds}],"plainText": "string", // Full concatenated text without timestamps"wordCount": "integer", // Total word count"error": "string" // Error message if extraction failed (null on success)}
Accepted URL Formats
https://www.youtube.com/watch?v=VIDEO_ID → single videohttps://youtu.be/VIDEO_ID → short URLhttps://www.youtube.com/shorts/VIDEO_ID → YouTube Shortshttps://www.youtube.com/playlist?list=LIST_ID → full playlisthttps://www.youtube.com/@ChannelName → channel (recent videos)https://www.youtube.com/channel/CHANNEL_ID → channel by ID
Output Format Details
| Format | Use Case | Structure |
|---|---|---|
json | API consumption, data pipelines | Full structured object with segments array |
text | LLM input, summarization, RAG | Plain concatenated text, no timestamps |
srt | Video editing, subtitle files | Standard SubRip format with sequence numbers |
vtt | Web players, HTML5 video | WebVTT format with WEBVTT header |
markdown | Blog posts, documentation | Paragraphs grouped by 60s intervals with timestamp headers |
Pricing
Model: PAY_PER_EVENT
Event: video-processed — charged per video with transcript successfully extracted.
Price: $0.002 per video.
Failed videos (no captions available) are not charged.
Cost Estimation
| Volume | Cost | Approx. Time |
|---|---|---|
| 1 video | $0.002 | ~3s |
| 10 videos | $0.02 | ~30s |
| 100 videos | $0.20 | ~3min |
| 1,000 videos | $2.00 | ~20min |
| Full playlist (50) | $0.10 | ~2min |
Integration Examples
API Call
curl -X POST "https://api.apify.com/v2/acts/tropical_prune~youtube-transcript-pro/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "outputFormat": "text"}'
Apify Client (JavaScript)
const { ApifyClient } = require('apify-client');const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('tropical_prune/youtube-transcript-pro').call({urls: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],outputFormat: 'json'});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].plainText);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("tropical_prune/youtube-transcript-pro").call(run_input={"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"outputFormat": "text"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["plainText"])
Technical Details
- No browser required — uses direct HTTP with YouTube InnerTube API
- Residential proxy for reliable access from any IP
- Graceful error handling — failed videos get error field, processing continues
- Prefers manual captions over auto-generated when both available
- Auto-generated caption accuracy: ~85-95% for English
Limitations
- Public videos only (no private/unlisted)
- Requires captions to exist on the video (manual or auto-generated)
- Rate limited by YouTube's caption API
- Channel extraction limited to videos visible on the channel page
FAQ
No captions on video? → Actor reports error for that video, continues with the rest. Not charged.
Private videos? → Not supported. Public videos only.
Which languages? → All languages YouTube supports for captions. Use language field for preference.
Accuracy of auto-generated? → YouTube's ASR is ~85-95% for English, varies for other languages.
Playlist limit? → Set maxVideos to control. Default 50, no hard upper limit.