HOME/APIS/YOUTUBE
$0.003PER REQUEST

YOUTUBE TRANSCRIPT

Extract full transcripts from any public YouTube video. Multi-language support with automatic language detection. Perfect for content analysis, AI training, and accessibility.

$0.003
Per Request
9+
Languages
Auto
Lang Detect
2
URL Formats
[ HOW IT WORKS ]

SIMPLE TRANSCRIPT EXTRACTION

1
Send Video URL

Pass any YouTube video URL — we support both youtube.com and youtu.be formats

2
Extract Transcript

We fetch available captions in your requested language (or default)

3
Get Full Text

Receive the complete transcript as clean, formatted text

💡
Auto vs Manual Captions

YouTube videos may have auto-generated captions (created by YouTube's AI) or manually uploaded subtitles. Our API returns whichever is available, with manual captions typically being more accurate.

[ LANGUAGES ]

MULTI-LANGUAGE SUPPORT

🇺🇸
en
English
🇪🇸
es
Spanish
🇫🇷
fr
French
🇩🇪
de
German
🇧🇷
pt
Portuguese
🇮🇹
it
Italian
🇯🇵
ja
Japanese
🇰🇷
ko
Korean
🇨🇳
zh
Chinese
Default Behavior

If you don't specify a language, the API returns the video's default transcript — usually the language the creator uploaded or YouTube auto-detected.

{ "url": "https://youtu.be/..." }
Specific Language

Request a specific language using ISO 639-1 codes. Returns 404 if that language transcript isn't available.

{ "url": "...", "language": "es" }
+ Many more languages available depending on video captions
[ URL FORMATS ]

SUPPORTED VIDEO URLS

FORMAT
EXAMPLE
youtube.com/watch?v=VIDEO_ID
https://youtube.com/watch?v=dQw4w9WgXcQ
youtu.be/VIDEO_ID
https://youtu.be/dQw4w9WgXcQ
youtube.com/watch?v=ID&t=123
https://youtube.com/watch?v=dQw4w9WgXcQ&t=30
Timestamps in URLs are ignored. The API always returns the full transcript regardless of any t= parameter.
[ ENDPOINT ]

API ENDPOINT

POSThttps://api.llmlayer.dev/api/v1/youtube_transcript
Extract transcript from a YouTube video
AUTHENTICATION
Authorization: Bearer YOUR_LLMLAYER_API_KEY
[ USE CASES ]

WHAT YOU CAN BUILD

🤖
AI Training Data

Build datasets from educational videos, lectures, tutorials, and podcasts for fine-tuning language models.

📝
Content Repurposing

Convert video content into blog posts, articles, social media threads, or newsletters automatically.

🔍
Video Search

Index video transcripts for full-text search. Find specific moments across thousands of videos.

📊
Content Analysis

Analyze competitor videos, track mentions, extract insights, and perform sentiment analysis.

🎓
Study Notes

Generate summaries, key points, and study guides from educational videos and lectures.

Accessibility

Create accessible text versions of video content for deaf/hard-of-hearing users or text-preference readers.

🌍
Translation Pipeline

Extract transcripts, translate to other languages, and create multilingual subtitles.

📻
Podcast Show Notes

Automatically generate show notes, timestamps, and chapter markers from video podcasts.

🔗
RAG Applications

Add video knowledge to your RAG pipeline. Let users ask questions about video content.

[ PARAMETERS ]

REQUEST PARAMETERS

PARAMETER
TYPE
REQUIRED
DESCRIPTION
url
string
Yes
YouTube video URL (youtube.com or youtu.be format)
language
string
No
ISO 639-1 language code (e.g., "en", "es", "fr"). Defaults to video's primary transcript.
Common Language Codes
en = Englishes = Spanishfr = Frenchde = Germanpt = Portugueseit = Italianja = Japaneseko = Koreanzh = Chinese
[ CODE EXAMPLES ]

QUICK START

PYTHONBasic Transcript Extraction
from llmlayer import LLMLayerClient

client = LLMLayerClient(api_key="your_api_key")

# Get transcript in default language
response = client.get_youtube_transcript(
    url="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
)

print(f"Language: {response.language}")
print(f"Transcript length: {len(response.transcript)} chars")
print(response.transcript[:500])  # First 500 chars
PYTHONSpecific Language
# Request Spanish transcript
response = client.get_youtube_transcript(
    url="https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    language="es"
)

print(f"Got transcript in: {response.language}")
print(response.transcript)
TYPESCRIPTWith Error Handling
import { LLMLayerClient } from 'llmlayer';

const client = new LLMLayerClient({
  apiKey: process.env.LLMLAYER_API_KEY
});

async function getTranscript(videoUrl: string, lang?: string) {
  try {
    const response = await client.getYouTubeTranscript({
      url: videoUrl,
      language: lang
    });

    console.log(`Language: ${response.language}`);
    console.log(`Cost: $${response.cost}`);
    return response.transcript;

  } catch (error) {
    if (error.status === 404) {
      console.log('Language not available for this video');
    } else if (error.status === 500) {
      console.log('Video has no captions or is unavailable');
    }
    throw error;
  }
}

// Usage
const transcript = await getTranscript(
  'https://youtu.be/dQw4w9WgXcQ',
  'en'
);
PYTHONSave Transcript to File
import re

def save_transcript(video_url: str, output_path: str):
    response = client.get_youtube_transcript(url=video_url)

    # Extract video ID for filename
    video_id = re.search(r'(?:v=|/)([a-zA-Z0-9_-]{11})', video_url)
    filename = video_id.group(1) if video_id else 'transcript'

    with open(f"{output_path}/{filename}.txt", 'w') as f:
        f.write(f"URL: {response.url}\n")
        f.write(f"Language: {response.language}\n")
        f.write(f"---\n\n")
        f.write(response.transcript)

    print(f"Saved: {output_path}/{filename}.txt")

# Usage
save_transcript(
    "https://youtu.be/dQw4w9WgXcQ",
    "./transcripts"
)
PYTHONBatch Processing Multiple Videos
video_urls = [
    "https://youtu.be/video1",
    "https://youtu.be/video2",
    "https://youtu.be/video3",
]

transcripts = []
total_cost = 0

for url in video_urls:
    try:
        response = client.get_youtube_transcript(url=url)
        transcripts.append({
            "url": url,
            "language": response.language,
            "transcript": response.transcript
        })
        total_cost += response.cost
        print(f"✅ {url}")
    except Exception as e:
        print(f"❌ {url}: {e}")

print(f"\nProcessed: {len(transcripts)}/{len(video_urls)}")
print(f"Total cost: ${total_cost:.3f}")
cURL
curl -X POST https://api.llmlayer.dev/api/v1/youtube_transcript \
  -H "Authorization: Bearer $LLMLAYER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "language": "en"
  }'
[ RESPONSE ]

RESPONSE FORMAT

{
  "transcript": "Never gonna give you up, never gonna let you down...",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "language": "en",
  "cost": 0.003
}
FIELD
TYPE
DESCRIPTION
transcript
string
Full transcript text content
url
string
The YouTube URL you submitted
language
string
ISO 639-1 code of returned transcript
cost
float
Cost in USD ($0.003)
[ ERROR HANDLING ]

ERROR CODES

STATUS
ERROR CODE
CAUSE
401
missing_llmlayer_api_key
Invalid or missing API key
400
invalid_url
URL is not a valid YouTube video link
500
transcript_error
Video is private, deleted, or has no captions
404
language_not_found
Requested language transcript not available
Video Requirements
  • Video must be public (not private or unlisted without link)
  • Video must have captions available (auto-generated or manual)
  • Live streams may not have transcripts until processing completes
  • Age-restricted videos may be inaccessible
[ PRICING ]

SIMPLE FLAT PRICING

$0.003
per transcript request
100 videos$0.30
1,000 videos$3.00
10,000 videos$30.00
100,000 videos$300.00
What's Included
  • Full transcript text (any length)
  • Any supported language
  • Auto-detected language info
  • No video length limits
  • Same price for any video duration
[ BEST PRACTICES ]

TIPS FOR SUCCESS

🎯 Get Better Results
  • • Prefer videos with manual captions
  • • Try default language first, then specific
  • • Check video availability before batch jobs
  • • Educational content has better transcripts
Performance
  • • Batch requests with rate limiting
  • • Cache transcripts locally when possible
  • • Handle 404/500 errors gracefully
  • • Process videos in parallel (with limits)
🔄 Integration Tips
  • • Combine with Answer API for Q&A
  • • Feed to vector DB for RAG
  • • Use for content summarization
  • • Build searchable video indexes
🛡 Reliability
  • • Implement retry logic for failures
  • • Validate URLs before API calls
  • • Store API keys securely
  • • Log failed videos for review

EXTRACT VIDEO
TRANSCRIPTS INSTANTLY

Get transcripts from any YouTube video in 9+ languages. $0.003 per video, no duration limits.