Video Subtitle Extractor
Subtitles

Use when subtitles or the spoken text of a YouTube video is needed: pasted video links or IDs, requests to translate a video, read along, follow foreign-language content, or extract what was said. Also use for language learning or…
---
name: subtitles
description: "Use when subtitles or the spoken text of a YouTube video is needed: pasted video links or IDs, requests to translate a video, read along, follow foreign-language content, or extract what was said. Also use for language learning or accessibility. Fetches timestamped subtitles from any YouTube video. Not for uploading subtitles or account management."
version: "1.5.1"
user-invocable: true
compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
required_environment_variables:
- name: TRANSCRIPT_API_KEY
prompt: Your TranscriptAPI key (starts with sk_)
help: Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you.
required_for: all API requests
metadata: {"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","subtitles","captions","transcripts","video","translation","language-learning"],"category":"media"}}
---
# Subtitles
Fetch YouTube video subtitles via [TranscriptAPI.com](https://transcriptapi.com).
Overview
If $TRANSCRIPT_API_KEY is not set, read references/auth-setup.md and follow the instructions there to get and store the key.
Manual install (npx, ZIP)
npx skills add ZeroPointRepo/youtube-skills --skill subtitles -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/ZeroPointRepo/youtube-skills/tar.gz/4f7994b94e7d \
| tar -xz -C ~/.claude/skills --strip-components=2 youtube-skills-4f7994b94e7d/skills/subtitlesNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/182349fb3aa151ccc12d/subtitles.zip" -OutFile "$env:TEMP\subtitles.zip"; Expand-Archive "$env:TEMP\subtitles.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md4.4 KBreferences/2 files · 8.1 KB
Read the files here
Show the full text104 lines
Subtitles
Fetch YouTube video subtitles via TranscriptAPI.com.
Setup
If $TRANSCRIPT_API_KEY is not set, read references/auth-setup.md and follow the instructions there to get and store the key.
Required Headers
Every request needs two headers:
- Authorization:
Bearer $TRANSCRIPT_API_KEY - User-Agent: your agent's name and version if known (e.g.
HermesAgent/0.11.0,ClaudeCode/1.0). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request.
GET /api/v2/youtube/transcript
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=text&include_timestamp=false&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
| Param | Values | Use case |
|---|---|---|
video_url |
YouTube URL or video ID | Required |
format |
json, text |
json for sync'd subs with timing |
include_timestamp |
true, false |
false for clean text for reading/translation |
send_metadata |
true, false |
Include title, channel, description |
For language learning — clean text without timestamps:
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=text&include_timestamp=false
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
For translation — structured segments:
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=json&include_timestamp=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Response (format=json):
{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"transcript": [
{ "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 }
]
}
Response (format=text, include_timestamp=false):
{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"transcript": "We're no strangers to love\nYou know the rules and so do I..."
}
Tips
- Many videos have auto-generated subtitles in multiple languages.
- Use
format=jsonto get timing for each line (great for sync'd reading). - Use
include_timestamp=falsefor clean text suitable for translation apps.
Errors
| Code | Meaning | Action |
|---|---|---|
| 401 | Bad API key | Check key |
| 402 | No credits | transcriptapi.com/billing |
| 403/1010 | Cloudflare block | Add or fix User-Agent header |
| 404 | No subtitles | No subtitles available |
| 408 | Timeout | Retry once after 2s |
1 credit per request. Free tier: 100 credits, 300 req/min.
Copy-paste examples
Every request in this file as a ready-to-run one-liner: references/curl-examples.md
| 1 | |
| 2 | name subtitles |
| 3 | description "Use when subtitles or the spoken text of a YouTube video is needed: pasted video links or IDs, requests to translate a video, read along, follow foreign-language content, or extract what was said. Also use for language learning or accessibility. Fetches timestamped subtitles from any YouTube video. Not for uploading subtitles or account management." |
| 4 | version "1.5.1" |
| 5 | user-invocable true |
| 6 | compatibility Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed. |
| 7 | required_environment_variables |
| 8 | - name: TRANSCRIPT_API_KEY |
| 9 | prompt Your TranscriptAPI key (starts with sk_) |
| 10 | help Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you. |
| 11 | required_for all API requests |
| 12 | metadata {"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","subtitles","captions","transcripts","video","translation","language-learning"],"category":"media"}} |
| 13 | |
| 14 | |
| 15 | # Subtitles |
| 16 | |
| 17 | Fetch YouTube video subtitles via [TranscriptAPI.com]. |
| 18 | |
| 19 | ## Setup |
| 20 | |
| 21 | If `$TRANSCRIPT_API_KEY` is not set, read [references/auth-setup.md] and follow the instructions there to get and store the key. |
| 22 | |
| 23 | ## Required Headers |
| 24 | |
| 25 | Every request needs two headers: |
| 26 | |
| 27 | **Authorization:** `Bearer $TRANSCRIPT_API_KEY` |
| 28 | **User-Agent:** your agent's name and version if known (e.g. `HermesAgent/0.11.0`, `ClaudeCode/1.0`). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request. |
| 29 | |
| 30 | ## GET /api/v2/youtube/transcript |
| 31 | |
| 32 | |
| 33 | GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=text&include_timestamp=false&send_metadata=true |
| 34 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 35 | User-Agent: YourAgent/1.0 |
| 36 | |
| 37 | |
| 38 | | Param | Values | Use case | |
| 39 | | ------------------- | ----------------------- | ---------------------------------------------- | |
| 40 | | `video_url` | YouTube URL or video ID | Required | |
| 41 | | `format` | `json`, `text` | `json` for sync'd subs with timing | |
| 42 | | `include_timestamp` | `true`, `false` | `false` for clean text for reading/translation | |
| 43 | | `send_metadata` | `true`, `false` | Include title, channel, description | |
| 44 | |
| 45 | **For language learning** — clean text without timestamps: |
| 46 | |
| 47 | |
| 48 | GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=text&include_timestamp=false |
| 49 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 50 | User-Agent: YourAgent/1.0 |
| 51 | |
| 52 | |
| 53 | **For translation** — structured segments: |
| 54 | |
| 55 | |
| 56 | GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=json&include_timestamp=true |
| 57 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 58 | User-Agent: YourAgent/1.0 |
| 59 | |
| 60 | |
| 61 | **Response** (`format=json`): |
| 62 | |
| 63 | |
| 64 | { |
| 65 | "video_id": "dQw4w9WgXcQ", |
| 66 | "language": "en", |
| 67 | "transcript": [ |
| 68 | { "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 } |
| 69 | ] |
| 70 | } |
| 71 | |
| 72 | |
| 73 | **Response** (`format=text`, `include_timestamp=false`): |
| 74 | |
| 75 | |
| 76 | { |
| 77 | "video_id": "dQw4w9WgXcQ", |
| 78 | "language": "en", |
| 79 | "transcript": "We're no strangers to love\nYou know the rules and so do I..." |
| 80 | } |
| 81 | |
| 82 | |
| 83 | ## Tips |
| 84 | |
| 85 | Many videos have auto-generated subtitles in multiple languages. |
| 86 | Use `format=json` to get timing for each line (great for sync'd reading). |
| 87 | Use `include_timestamp=false` for clean text suitable for translation apps. |
| 88 | |
| 89 | ## Errors |
| 90 | |
| 91 | | Code | Meaning | Action | |
| 92 | | -------- | ---------------- | ---------------------------------------------- | |
| 93 | | 401 | Bad API key | Check key | |
| 94 | | 402 | No credits | transcriptapi.com/billing | |
| 95 | | 403/1010 | Cloudflare block | Add or fix User-Agent header | |
| 96 | | 404 | No subtitles | No subtitles available | |
| 97 | | 408 | Timeout | Retry once after 2s | |
| 98 | |
| 99 | 1 credit per request. Free tier: 100 credits, 300 req/min. |
| 100 | |
| 101 | ## Copy-paste examples |
| 102 | |
| 103 | Every request in this file as a ready-to-run one-liner: [references/curl-examples.md] |
| 104 |
Details
- Version
- 1.5.1
- Updated
- Sep 22, 2026
- License
- MIT
- Stars on the repo
- ★ 945
- Checked
- Source
- ZeroPointRepo/youtube-skills ↗
- Creator
- ZeroPointRepo · 11 listings
Similar skills
See all →
SkillVideo Caption Extractor
SkillVideo Transcript Extractor
SkillShort Video Editor
AgentSocial Video Clip Creator
SkillYouTube Transcript Downloader
SkillYouTube Search and TranscriptsMore from ZeroPointRepo
SkillVideo Caption Extractor
SkillYouTube Transcript Extractor
SkillVideo Transcriber
SkillYouTube Data Fetcher
SkillYouTube Channel Browser
SkillYouTube Data Extractor