YouTube Transcript Pro avatar

YouTube Transcript Pro

Pricing

$2.00 / 1,000 video processeds

Go to Apify Store
YouTube Transcript Pro

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

Bado

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

a day ago

Last modified

Share

YouTube Transcript Pro

Extract transcripts, subtitles, and captions from YouTube videos, playlists, and channels.

Capabilities

CapabilityDescription
extract_transcriptExtract full transcript from any YouTube video URL
extract_subtitlesGet SRT/VTT subtitle files ready for video players
batch_playlistProcess all videos in a YouTube playlist in one run
batch_channelProcess recent videos from a YouTube channel
auto_languageAuto-detect caption language, or specify preferred
multi_formatOutput 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 video
https://youtu.be/VIDEO_ID → short URL
https://www.youtube.com/shorts/VIDEO_ID → YouTube Shorts
https://www.youtube.com/playlist?list=LIST_ID → full playlist
https://www.youtube.com/@ChannelName → channel (recent videos)
https://www.youtube.com/channel/CHANNEL_ID → channel by ID

Output Format Details

FormatUse CaseStructure
jsonAPI consumption, data pipelinesFull structured object with segments array
textLLM input, summarization, RAGPlain concatenated text, no timestamps
srtVideo editing, subtitle filesStandard SubRip format with sequence numbers
vttWeb players, HTML5 videoWebVTT format with WEBVTT header
markdownBlog posts, documentationParagraphs 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

VolumeCostApprox. 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 ApifyClient
client = 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.