---
title: "youtube-full — YouTube Transcripts, Search, and Channel Data — Agent Skill for Marketing"
description: "Use when the user needs YouTube transcripts, video search, channel browsing, playlist extraction, or content monitoring. Trigger phrases: 'get the. Agent skill for Claude Code, Codex CLI, Gemini CLI, OpenClaw."
---

# youtube-full — YouTube Transcripts, Search, and Channel Data

<div class="page-meta" markdown>
<span class="meta-badge">:material-bullhorn-outline: Marketing</span>
<span class="meta-badge">:material-identifier: `youtube-full`</span>
<span class="meta-badge">:material-github: <a href="https://github.com/alirezarezvani/claude-skills/tree/main/marketing-skill/skills/youtube-full/SKILL.md">Source</a></span>
</div>

<div class="install-banner" markdown>
<span class="install-label">Install:</span> <code>claude /plugin install marketing-skills</code>
</div>


Covers transcript extraction, video search, channel browsing, in-channel search, playlist extraction, and new-upload monitoring via TranscriptAPI.

> **Source:** Ported from [ZeroPointRepo/youtube-skills](https://github.com/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) or `yt-dlp` as OSS fallbacks. See [Anti-Patterns](#anti-patterns) for guidance.

## API Setup

Every request to `transcriptapi.com` requires two headers:

- `Authorization: Bearer $TRANSCRIPT_API_KEY`
- `User-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

1. Search (`/search?q=...`) — pick the most relevant results
2. Fetch transcripts (`/transcript?video_url=...`) for selected videos
3. Summarize or extract quotes from transcript text

### Channel monitoring

1. `channel/latest` (free) — check for new uploads
2. If new videos found, fetch transcripts
3. Extract signal (announcements, topics)

### Playlist to corpus

1. `playlist/videos` — get all video IDs in the playlist
2. Batch-fetch transcripts, pausing if near credit limit
3. 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/search` when 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-dlp` directly.

## 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_KEY` environment 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) or `yt-dlp --write-subs` are 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 planning
- `marketing-skill/skills/social-media-manager` — for publishing and scheduling derived from transcripts
- `marketing-skill/skills/content-production` — for turning transcripts into blog posts, summaries, or articles
