Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Extract, transcribe, and translate YouTube video transcripts using the YouTubeTranscript.dev V2 API. Supports captions, ASR audio transcription, batch proces...
Extract, transcribe, and translate YouTube video transcripts using the YouTubeTranscript.dev V2 API. Supports captions, ASR audio transcription, batch proces...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Use this skill when the user wants to extract transcripts from YouTube videos, transcribe videos without captions, translate video content, or process multiple videos in batch.
User asks to get a transcript/subtitles/captions from a YouTube video User wants to transcribe a YouTube video that has no captions (ASR) User wants to translate a YouTube video transcript to another language User needs to process multiple YouTube videos at once User wants to build an AI/LLM pipeline that uses YouTube video content User wants to repurpose video content into text (blog posts, summaries, etc.)
Base URL: https://youtubetranscript.dev/api/v2 Authentication: Bearer token via Authorization: Bearer YOUR_API_KEY Users can get a free API key at youtubetranscript.dev.
MethodEndpointDescriptionPOST/api/v2/transcribeExtract transcript from a single videoPOST/api/v2/batchExtract transcripts from up to 100 videosGET/api/v2/jobs/{job_id}Check status of an ASR jobGET/api/v2/batch/{batch_id}Check status of a batch request
FieldRequiredDescriptionvideoYes (single)YouTube URL or 11-character video IDvideo_idsYes (batch)Array of IDs or URLs (up to 100)languageNoISO 639-1 code (e.g., "es", "fr"). Omit for best availablesourceNoauto (default), manual, or asrformatNotimestamp, paragraphs, or wordswebhook_urlNoURL for async delivery (required for source="asr")
MethodCostSpeedNative Captions1 credit5โ10 secondsTranslation1 credit per 2,500 chars5โ10 secondsASR (Audio)1 credit per 90 seconds2โ20 minutes (async)
import requests API_KEY = "your_api_key" response = requests.post( "https://youtubetranscript.dev/api/v2/transcribe", headers={ "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", }, json={"video": "dQw4w9WgXcQ"} ) data = response.json() for segment in data["data"]["transcript"]: print(f"[{segment['start']:.1f}s] {segment['text']}")
const response = await fetch("https://youtubetranscript.dev/api/v2/transcribe", { method: "POST", headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ video: "dQw4w9WgXcQ" }), }); const { data } = await response.json(); console.log(data.transcript);
npm install youtube-audio-transcript-api import { YouTubeTranscript } from "youtube-audio-transcript-api"; const yt = new YouTubeTranscript({ apiKey: "your_api_key" }); // Simple extraction const result = await yt.getTranscript("dQw4w9WgXcQ"); // With translation const translated = await yt.transcribe({ video: "dQw4w9WgXcQ", language: "es", }); // Batch (up to 100 videos) const batch = await yt.batch({ video_ids: ["dQw4w9WgXcQ", "jNQXAC9IVRw", "9bZkp7q19f0"], });
curl -X POST https://youtubetranscript.dev/api/v2/transcribe \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"video": "dQw4w9WgXcQ"}'
curl -X POST https://youtubetranscript.dev/api/v2/batch \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"video_ids": ["dQw4w9WgXcQ", "jNQXAC9IVRw", "9bZkp7q19f0"]}'
Add "language": "es" (or any ISO 639-1 code) to get the transcript translated: curl -X POST https://youtubetranscript.dev/api/v2/transcribe \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"video": "dQw4w9WgXcQ", "language": "es"}'
For videos that don't have captions, use ASR with a webhook: curl -X POST https://youtubetranscript.dev/api/v2/transcribe \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"video": "VIDEO_ID", "source": "asr", "webhook_url": "https://yoursite.com/webhook"}' This returns immediately with status: "processing". Results are delivered to the webhook URL when ready. Poll with GET /api/v2/jobs/{job_id} if not using webhooks.
HTTP StatusError CodeDescription400invalid_requestInvalid JSON or missing required fields401invalid_api_keyMissing or invalid API key402payment_requiredInsufficient credits404no_captionsNo captions available and ASR not used429rate_limit_exceededToo many requests โ check Retry-After header
Always ask the user for their API key if they haven't provided one. Free keys are available at youtubetranscript.dev. Omitting the language parameter returns the best available transcript without translation (saves credits). ASR is async โ always use a webhook URL or poll the jobs endpoint. Batch endpoint accepts both YouTube URLs and 11-character video IDs. Re-fetching an already-owned transcript costs 0 credits.
Website Full API Docs & OpenAPI Spec npm SDK Pricing
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.