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.

Async Operations
🔒 Secure & Reliable
📊 Built-in Caching

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

POST /get-transcript/
Rate Limited: 10 requests/minute

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

Standard: https://www.youtube.com/watch?v=VIDEO_ID
Shortened: https://youtu.be/VIDEO_ID
Shorts: https://www.youtube.com/shorts/VIDEO_ID
Embedded: https://www.youtube.com/embed/VIDEO_ID

🚀 Getting Started

1

Get API Key

Obtain your YouTube Data API v3 key from Google Cloud Console

2

Set Environment

Configure your SECURITY_TOKEN and YOUTUBE_API_KEY environment variables

3

Deploy Service

Run with Docker: docker-compose up --build

4

Start Coding

Use the examples above to integrate transcript extraction into your application