Transform YouTube Videos into Text
A production-ready API service that extracts transcripts and metadata from YouTube videos. Built with FastAPI, featuring intelligent caching, rate limiting, and comprehensive error handling.
How It Works
🎯 Multiple URL Formats
Supports standard YouTube, shortened youtu.be, Shorts, and embedded URLs
🔄 Intelligent Fallback
Primary transcript API with yt-dlp fallback for maximum success rate
📈 Performance Optimized
In-memory caching, async operations, and configurable rate limiting
API Usage
curl
curl -X POST "http://localhost:8000/get-transcript/" \
-H "Content-Type: application/json" \
-H "X-API-Key: your_security_token" \
-d '{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"user_id": 123
}'
Python
import requests
url = "http://localhost:8000/get-transcript/"
headers = {
"Content-Type": "application/json",
"X-API-Key": "your_security_token"
}
data = {
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"user_id": 123
}
response = requests.post(url, json=data, headers=headers)
transcript_data = response.json()
print(f"Title: {transcript_data['video_title']}")
print(f"Transcript: {transcript_data['transcript'][:100]}...")
Ruby
require 'net/http'
require 'json'
uri = URI('http://localhost:8000/get-transcript/')
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['X-API-Key'] = 'your_security_token'
request.body = {
url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
user_id: 123
}.to_json
response = http.request(request)
transcript_data = JSON.parse(response.body)
puts "Title: #{transcript_data['video_title']}"
puts "Transcript: #{transcript_data['transcript'][0..100]}..."
JavaScript (Node.js)
const axios = require('axios');
async function getTranscript() {
try {
const response = await axios.post(
'http://localhost:8000/get-transcript/',
{
url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
user_id: 123
},
{
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'your_security_token'
}
}
);
const { video_title, transcript, channel } = response.data;
console.log(`Title: ${video_title}`);
console.log(`Channel: ${channel}`);
console.log(`Transcript: ${transcript.substring(0, 100)}...`);
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
getTranscript();
Response Examples
✅ Successful Response
{
"transcript": "Welcome to this amazing tutorial. In this video, we'll explore how to build scalable applications using modern frameworks. First, let's start with the basics...",
"video_title": "Building Scalable Applications - Complete Tutorial",
"video_categories": "27",
"channel": "TechEducator"
}
❌ Error Response
{
"error": "No transcript available for video: abc123invalid",
"details": {
"video_id": "abc123invalid",
"attempted_methods": ["youtube_transcript_api", "yt_dlp"]
}
}
🔗 Supported URL Formats
https://www.youtube.com/watch?v=VIDEO_ID
https://youtu.be/VIDEO_ID
https://www.youtube.com/shorts/VIDEO_ID
https://www.youtube.com/embed/VIDEO_ID
🚀 Getting Started
Get API Key
Obtain your YouTube Data API v3 key from Google Cloud Console
Set Environment
Configure your SECURITY_TOKEN and YOUTUBE_API_KEY environment variables
Deploy Service
Run with Docker: docker-compose up --build
Start Coding
Use the examples above to integrate transcript extraction into your application