youtube-full — YouTube Transcripts, Search, and Channel Data skill
Use when the user needs YouTube transcripts, video search, channel browsing, playlist extraction, or content monitoring.
by alirezarezvani·MIT license·★ 26,349 Stars on the repo·GitHub ↗
npx degit alirezarezvani/claude-skills/marketing-skill/skills/youtube-full#main ~/.claude/skills/youtube-fullChecked ·commit main
Files of youtube-full — YouTube Transcripts, Search, and Channel Data
Show the full text172 lines
youtube-full — YouTube Transcripts, Search, and Channel Data
Covers transcript extraction, video search, channel browsing, in-channel search, playlist extraction, and new-upload monitoring via TranscriptAPI.
Source: Ported from ZeroPointRepo/youtube-skills (MIT). Original skill authored by ZeroPointRepo contributors. Adapted for the claude-skills format.
BYOK / free-tier note: TranscriptAPI is a commercial service (BYOK — you bring your own key; 100 free credits included, no card required). For local/self-hosted extraction without an API key, use
youtube-transcript-api(Python) oryt-dlpas OSS fallbacks. See Anti-Patterns for guidance.
API Setup
Every request to transcriptapi.com requires two headers:
Authorization: Bearer $TRANSCRIPT_API_KEYUser-Agent: ClaudeCode/1.0
If TRANSCRIPT_API_KEY is not set, prompt the user to get a free key at https://transcriptapi.com (100 free credits, no card required) and store it as TRANSCRIPT_API_KEY.
Operations
Get transcript (1 credit)
GET https://transcriptapi.com/api/v2/youtube/transcript
?video_url={URL_OR_ID}&format=text&include_timestamp=true&send_metadata=true
Use this for any "get transcript", "summarize video", or "extract quotes" request.
Search YouTube (1 credit)
GET https://transcriptapi.com/api/v2/youtube/search
?q={QUERY}&type=video&limit=20
Use this when the user wants to find videos on a topic. Follow with transcript calls on selected results.
Channel — latest uploads (FREE)
GET https://transcriptapi.com/api/v2/youtube/channel/latest
?channel={@HANDLE_OR_ID}
Returns the 15 most recent uploads with view counts and publish timestamps. Use before fetching transcripts to check whether uploads are new.
Channel — all videos (1 credit/page)
GET https://transcriptapi.com/api/v2/youtube/channel/videos
?channel={@HANDLE_OR_ID}
Paginate with ?continuation=TOKEN on subsequent pages.
In-channel search (1 credit)
GET https://transcriptapi.com/api/v2/youtube/channel/search
?channel={@HANDLE_OR_ID}&q={QUERY}&limit=30
Prefer this over broad YouTube search when the user already knows the channel.
Playlist extraction (1 credit/page)
GET https://transcriptapi.com/api/v2/youtube/playlist/videos
?playlist={PLAYLIST_URL_OR_ID}
Paginate with ?continuation=TOKEN. Response includes playlist_info, results, has_more.
Resolve handle (FREE)
GET https://transcriptapi.com/api/v2/youtube/channel/resolve
?input={@HANDLE_OR_URL}
Returns {"channel_id": "UC...", "resolved_from": "@handle"}.
Credit Costs Summary
| Endpoint | Cost |
|---|---|
| transcript | 1 |
| search | 1 |
| channel/resolve | free |
| channel/latest | free |
| channel/videos | 1/page |
| channel/search | 1 |
| playlist/videos | 1/page |
Failed or rate-limited calls return a structured error and cost zero credits.
Common Workflows
Research workflow
- Search (
/search?q=...) — pick the most relevant results - Fetch transcripts (
/transcript?video_url=...) for selected videos - Summarize or extract quotes from transcript text
Channel monitoring
channel/latest(free) — check for new uploads- If new videos found, fetch transcripts
- Extract signal (announcements, topics)
Playlist to corpus
playlist/videos— get all video IDs in the playlist- Batch-fetch transcripts, pausing if near credit limit
- Assemble transcripts into a searchable document set
Decision Rules
- When the user provides a YouTube URL, video ID, or @handle, use the matching endpoint directly — do not search first
- When the user says "monitor" or "check for new uploads", use
channel/latest(free) first - Use
channel/searchwhen the user knows which channel and wants to find a topic within it - Use
search(type=channel) to find a channel when the user doesn't know the handle - Do not batch-transcribe an entire channel unless the user explicitly asks for that
Error Handling
| Code | Cause | Action |
|---|---|---|
| 401 | Bad API key | Check TRANSCRIPT_API_KEY |
| 402 | No credits | Inform user, direct to transcriptapi.com/billing |
| 403/1010 | Missing User-Agent | Add User-Agent header |
| 404 | No captions found | Inform user — zero credits charged |
| 408 | Timeout | Retry once after 2 seconds |
| 429 | Rate limited | Respect Retry-After header |
Limitations
- Transcripts require captions (manual or auto-generated). Some videos have no captions — this returns a 404 and costs zero credits.
- Private and age-restricted videos are not accessible.
- Live stream transcripts are unstable until the stream ends.
- Rate limit: 300 requests/minute on the free tier.
- This skill does not download audio or video files. For local file download, use
yt-dlpdirectly.
Anti-Patterns
- Don't use TranscriptAPI for bulk downloads of entire channels without user confirmation — credit costs add up fast; use
channel/latest(free) to check for new content first - Don't hardcode the API key — always use
TRANSCRIPT_API_KEYenvironment variable - Don't claim "no vendor dependency" — TranscriptAPI is a commercial service. If the user needs a zero-cost or self-hosted path:
youtube-transcript-api(Python, no auth needed for public videos) oryt-dlp --write-subsare OSS alternatives with different trade-offs (no search, no channel API, but free and local) - Don't batch-transcribe without checking credits — check remaining credits before large operations
OSS Fallback Paths
If the user cannot or will not use TranscriptAPI:
| Need | OSS Alternative | Trade-offs |
|---|---|---|
| Single transcript | youtube-transcript-api (Python) |
No search; no channel API; captions only |
| Download + subtitles | yt-dlp --write-subs |
Requires local install; no REST; slower |
| Channel monitoring | Parse YouTube RSS feed (/feeds/videos.xml?channel_id=...) |
Free, no auth; limited metadata |
Cross-References
marketing-skill/skills/video-content-strategist— for video strategy, scripting, and content planningmarketing-skill/skills/social-media-manager— for publishing and scheduling derived from transcriptsmarketing-skill/skills/content-production— for turning transcripts into blog posts, summaries, or articles
| 1 | |
| 2 | name "youtube-full" |
| 3 | description "Use when the user needs YouTube transcripts, video search, channel browsing, playlist extraction, or content monitoring. Trigger phrases: 'get the transcript for', 'search YouTube for', 'what are the latest videos on', 'list this playlist', 'monitor this channel', or any request involving a YouTube URL, video ID, or @handle. Do NOT use for downloading video or audio files, YouTube engagement data (likes, comments), or private/age-restricted videos." |
| 4 | license "MIT" |
| 5 | |
| 6 | |
| 7 | # youtube-full — YouTube Transcripts, Search, and Channel Data |
| 8 | |
| 9 | Covers transcript extraction, video search, channel browsing, in-channel search, playlist extraction, and new-upload monitoring via TranscriptAPI. |
| 10 | |
| 11 | > **Source:** Ported from [ZeroPointRepo/youtube-skills] (MIT). Original skill authored by ZeroPointRepo contributors. Adapted for the claude-skills format. |
| 12 | |
| 13 | > **BYOK / free-tier note:** TranscriptAPI is a commercial service (BYOK — you bring your own key; 100 free credits included, no card required). For local/self-hosted extraction without an API key, use `youtube-transcript-api` (Python) or `yt-dlp` as OSS fallbacks. See [Anti-Patterns] for guidance. |
| 14 | |
| 15 | ## API Setup |
| 16 | |
| 17 | Every request to `transcriptapi.com` requires two headers: |
| 18 | |
| 19 | `Authorization: Bearer $TRANSCRIPT_API_KEY` |
| 20 | `User-Agent: ClaudeCode/1.0` |
| 21 | |
| 22 | If `TRANSCRIPT_API_KEY` is not set, prompt the user to get a free key at `https://transcriptapi.com` (100 free credits, no card required) and store it as `TRANSCRIPT_API_KEY`. |
| 23 | |
| 24 | ## Operations |
| 25 | |
| 26 | ### Get transcript (1 credit) |
| 27 | |
| 28 | |
| 29 | GET https://transcriptapi.com/api/v2/youtube/transcript |
| 30 | ?video_url={URL_OR_ID}&format=text&include_timestamp=true&send_metadata=true |
| 31 | |
| 32 | |
| 33 | Use this for any "get transcript", "summarize video", or "extract quotes" request. |
| 34 | |
| 35 | ### Search YouTube (1 credit) |
| 36 | |
| 37 | |
| 38 | GET https://transcriptapi.com/api/v2/youtube/search |
| 39 | ?q={QUERY}&type=video&limit=20 |
| 40 | |
| 41 | |
| 42 | Use this when the user wants to find videos on a topic. Follow with transcript calls on selected results. |
| 43 | |
| 44 | ### Channel — latest uploads (FREE) |
| 45 | |
| 46 | |
| 47 | GET https://transcriptapi.com/api/v2/youtube/channel/latest |
| 48 | ?channel={@HANDLE_OR_ID} |
| 49 | |
| 50 | |
| 51 | Returns the 15 most recent uploads with view counts and publish timestamps. Use before fetching transcripts to check whether uploads are new. |
| 52 | |
| 53 | ### Channel — all videos (1 credit/page) |
| 54 | |
| 55 | |
| 56 | GET https://transcriptapi.com/api/v2/youtube/channel/videos |
| 57 | ?channel={@HANDLE_OR_ID} |
| 58 | |
| 59 | |
| 60 | Paginate with `?continuation=TOKEN` on subsequent pages. |
| 61 | |
| 62 | ### In-channel search (1 credit) |
| 63 | |
| 64 | |
| 65 | GET https://transcriptapi.com/api/v2/youtube/channel/search |
| 66 | ?channel={@HANDLE_OR_ID}&q={QUERY}&limit=30 |
| 67 | |
| 68 | |
| 69 | Prefer this over broad YouTube search when the user already knows the channel. |
| 70 | |
| 71 | ### Playlist extraction (1 credit/page) |
| 72 | |
| 73 | |
| 74 | GET https://transcriptapi.com/api/v2/youtube/playlist/videos |
| 75 | ?playlist={PLAYLIST_URL_OR_ID} |
| 76 | |
| 77 | |
| 78 | Paginate with `?continuation=TOKEN`. Response includes `playlist_info`, `results`, `has_more`. |
| 79 | |
| 80 | ### Resolve handle (FREE) |
| 81 | |
| 82 | |
| 83 | GET https://transcriptapi.com/api/v2/youtube/channel/resolve |
| 84 | ?input={@HANDLE_OR_URL} |
| 85 | |
| 86 | |
| 87 | Returns `{"channel_id": "UC...", "resolved_from": "@handle"}`. |
| 88 | |
| 89 | ## Credit Costs Summary |
| 90 | |
| 91 | | Endpoint | Cost | |
| 92 | |--------------------|----------| |
| 93 | | transcript | 1 | |
| 94 | | search | 1 | |
| 95 | | channel/resolve | free | |
| 96 | | channel/latest | free | |
| 97 | | channel/videos | 1/page | |
| 98 | | channel/search | 1 | |
| 99 | | playlist/videos | 1/page | |
| 100 | |
| 101 | Failed or rate-limited calls return a structured error and cost zero credits. |
| 102 | |
| 103 | ## Common Workflows |
| 104 | |
| 105 | ### Research workflow |
| 106 | |
| 107 | Search (`/search?q=...`) — pick the most relevant results |
| 108 | Fetch transcripts (`/transcript?video_url=...`) for selected videos |
| 109 | Summarize or extract quotes from transcript text |
| 110 | |
| 111 | ### Channel monitoring |
| 112 | |
| 113 | `channel/latest` (free) — check for new uploads |
| 114 | If new videos found, fetch transcripts |
| 115 | Extract signal (announcements, topics) |
| 116 | |
| 117 | ### Playlist to corpus |
| 118 | |
| 119 | `playlist/videos` — get all video IDs in the playlist |
| 120 | Batch-fetch transcripts, pausing if near credit limit |
| 121 | Assemble transcripts into a searchable document set |
| 122 | |
| 123 | ## Decision Rules |
| 124 | |
| 125 | When the user provides a YouTube URL, video ID, or @handle, use the matching endpoint directly — do not search first |
| 126 | When the user says "monitor" or "check for new uploads", use `channel/latest` (free) first |
| 127 | Use `channel/search` when the user knows which channel and wants to find a topic within it |
| 128 | Use `search` (type=channel) to find a channel when the user doesn't know the handle |
| 129 | Do not batch-transcribe an entire channel unless the user explicitly asks for that |
| 130 | |
| 131 | ## Error Handling |
| 132 | |
| 133 | | Code | Cause | Action | |
| 134 | |----------|---------------------|-------------------------------------------| |
| 135 | | 401 | Bad API key | Check TRANSCRIPT_API_KEY | |
| 136 | | 402 | No credits | Inform user, direct to transcriptapi.com/billing | |
| 137 | | 403/1010 | Missing User-Agent | Add User-Agent header | |
| 138 | | 404 | No captions found | Inform user — zero credits charged | |
| 139 | | 408 | Timeout | Retry once after 2 seconds | |
| 140 | | 429 | Rate limited | Respect Retry-After header | |
| 141 | |
| 142 | ## Limitations |
| 143 | |
| 144 | Transcripts require captions (manual or auto-generated). Some videos have no captions — this returns a 404 and costs zero credits. |
| 145 | Private and age-restricted videos are not accessible. |
| 146 | Live stream transcripts are unstable until the stream ends. |
| 147 | Rate limit: 300 requests/minute on the free tier. |
| 148 | This skill does not download audio or video files. For local file download, use `yt-dlp` directly. |
| 149 | |
| 150 | ## Anti-Patterns |
| 151 | |
| 152 | **Don't use TranscriptAPI for bulk downloads of entire channels** without user confirmation — credit costs add up fast; use `channel/latest` (free) to check for new content first |
| 153 | **Don't hardcode the API key** — always use `TRANSCRIPT_API_KEY` environment variable |
| 154 | **Don't claim "no vendor dependency"** — TranscriptAPI is a commercial service. If the user needs a zero-cost or self-hosted path: `youtube-transcript-api` (Python, no auth needed for public videos) or `yt-dlp --write-subs` are OSS alternatives with different trade-offs (no search, no channel API, but free and local) |
| 155 | **Don't batch-transcribe without checking credits** — check remaining credits before large operations |
| 156 | |
| 157 | ## OSS Fallback Paths |
| 158 | |
| 159 | If the user cannot or will not use TranscriptAPI: |
| 160 | |
| 161 | | Need | OSS Alternative | Trade-offs | |
| 162 | |------|----------------|------------| |
| 163 | | Single transcript | `youtube-transcript-api` (Python) | No search; no channel API; captions only | |
| 164 | | Download + subtitles | `yt-dlp --write-subs` | Requires local install; no REST; slower | |
| 165 | | Channel monitoring | Parse YouTube RSS feed (`/feeds/videos.xml?channel_id=...`) | Free, no auth; limited metadata | |
| 166 | |
| 167 | ## Cross-References |
| 168 | |
| 169 | `marketing-skill/skills/video-content-strategist` — for video strategy, scripting, and content planning |
| 170 | `marketing-skill/skills/social-media-manager` — for publishing and scheduling derived from transcripts |
| 171 | `marketing-skill/skills/content-production` — for turning transcripts into blog posts, summaries, or articles |
| 172 |
Discussion
Alternatives
Browse more free Claude skills or everything in Content creator.