youtube-search — Claude Code skill: find YouTube videos and channels
This skill searches YouTube for videos, channels and playlists and pulls transcripts through TranscriptAPI. Useful when your agent needs video material instead of written sources.
npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a claude-codeWhat youtube-search does
The skill gives your agent a way to search YouTube through TranscriptAPI. It finds videos on a topic, looks up channels that cover a subject, searches within a single channel, and fetches the transcript of whatever it found. Runs in Claude, Codex, Cursor, GitHub Copilot, Gemini CLI and OpenCode.
What's inside is a set of HTTP calls: global search with filters for upload date, duration and features like subtitles, channel search, and a handle-to-ID resolver. Every request needs a TRANSCRIPT_API_KEY and a User-Agent header carrying your agent's name. Skip that header and Cloudflare answers with a 403 (error code 1010) and blocks the call — worth checking first if search suddenly stops working.
You get the key from a TranscriptAPI account: the free tier covers 100 credits and asks for no card. Search costs 1 credit per page, channel resolve is free. Internet access to transcriptapi.com is required, and no extra runtimes or dependencies are needed.
What it helps with
- find videos on a topic sorted by view count
- pull a transcript from a video for later analysis
- find channels whose creators cover a subject
- search a specific query inside one channel
- turn an
@handleinto a channel ID for later calls
Example prompts for the agent
- find recent long videos about Rust on YouTube and show the most viewed ones
- find the @TED channel and search its videos about climate
- grab the transcript of that video and turn it into notes
How to install youtube-search
1Skills CLI (Vercel)
npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a claude-code2Manually: put the files in place
~/.claude/skills/youtube-search/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/youtube-search/
1Skills CLI (Vercel)
npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a codex2Manually: put the files in place
.agents/skills/youtube-search/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a cursor2Manually: put the files in place
.cursor/skills/youtube-search/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ZeroPointRepo/youtube-skills youtube-search2Manually: put the files in place
.github/skills/youtube-search/SKILL.md1Skills CLI (Vercel)
npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a gemini-cli2Platform CLI
gemini skills install https://github.com/ZeroPointRepo/youtube-skills --path clawhub/youtube-searchManually: put the files in place
.devin/skills/youtube-search/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about youtube-search
How do I install youtube-search in Claude?
Run npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a claude-code. The skill lands in ~/.claude/skills/youtube-search/SKILL.md.
What does youtube-search do?
It searches YouTube for videos, channels and playlists through TranscriptAPI and can fetch the transcript of a result. It also searches inside a single channel and resolves an @handle to a channel ID.
What do I need for the skill to work?
A TRANSCRIPT_API_KEY from a TranscriptAPI account and internet access to transcriptapi.com. Each request must carry a User-Agent header with your agent's name, or Cloudflare returns a 403.
Source text
SKILL.md · MIT
---
name: youtube-search
description: "Use when the user wants to find YouTube content on any topic: searching for videos or channels, finding creators who cover a subject, discovering tutorials, talks, or expert discussions, or looking up a channel by name or handle. Also use proactively when the user wants to research a topic and YouTube is a good source. Not for account management or written-source-only research."
version: "1.6.0"
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","search","video","channels","discovery","research"],"category":"media"}}
---
# YouTube Search
Search YouTube and fetch transcripts via [TranscriptAPI.com](https://transcriptapi.com).
## Setup
If `$TRANSCRIPT_API_KEY` is not set, read [references/auth-setup.md](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.
## API Reference
Full OpenAPI spec: [transcriptapi.com/openapi.json](https://transcriptapi.com/openapi.json) — consult this for the latest parameters and schemas.
## GET /api/v2/youtube/search — 1 credit/page
Search YouTube globally for videos, channels, playlists, or movies.
```bash
curl -s "https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
-H "User-Agent: YourAgent/1.0"
```
| Param | Required | Default | Validation |
| -------------- | ----------- | ----------- | ------------------------------------------------------------------ |
| `q` | conditional | — | 1-200 chars (trimmed), first page |
| `type` | no | `video` | `video`, `channel`, `playlist`, `movie` (first page) |
| `sort` | no | `relevance` | `relevance` or `views` (first page) |
| `upload_date` | no | — | `hour`, `today`, `week`, `month`, `year` — videos, first page |
| `duration` | no | — | `short` (<4m), `medium` (4-20m), `long` (>20m) — videos, first page |
| `features` | no | — | comma-separated: `hd`, `subtitles`, `cc`, `live`, `4k`, `hdr`, etc. |
| `limit` | no | `20` | 1-50 |
| `continuation` | conditional | — | token from a previous response (subsequent pages) |
Provide exactly one of `q` (first page) or `continuation` (next pages) — the token already encodes the filters. `sort`/`upload_date`/`duration`/`features` apply to the first page only.
**Find recent, most-viewed videos:**
```bash
curl -s "https://transcriptapi.com/api/v2/youtube/search\
?q=innovation&sort=views&duration=long&upload_date=month" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
-H "User-Agent: YourAgent/1.0"
```
**Search for playlists on a topic:**
```bash
curl -s "https://transcriptapi.com/api/v2/youtube/search?q=react+tutorial&type=playlist" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
-H "User-Agent: YourAgent/1.0"
```
**Video search response:**
```json
{
"results": [
{
"type": "video",
"videoId": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelTitle": "Rick Astley",
"channelHandle": "@RickAstley",
"channelVerified": true,
"lengthText": "3:33",
"viewCountText": "1.5B views",
"publishedTimeText": "14 years ago",
"hasCaptions": true,
"thumbnails": [{ "url": "...", "width": 120, "height": 90 }]
}
],
"result_count": 20
}
```
**Channel search response** (`type=channel`):
```json
{
"results": [{
"type": "channel",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"title": "Rick Astley",
"handle": "@RickAstley",
"url": "https://www.youtube.com/@RickAstley",
"description": "Official channel...",
"subscriberCount": "4.2M subscribers",
"verified": true,
"rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC...",
"thumbnails": [...]
}],
"result_count": 5
}
```
## GET /api/v2/youtube/channel/search — 1 credit
Search videos within a specific channel. Accepts `channel` — an `@handle`, channel URL, or `UC...` ID.
```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\
?channel=@TED&q=climate+change&limit=30" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
-H "User-Agent: YourAgent/1.0"
```
| Param | Required | Validation |
| --------- | -------- | ----------------------------------------- |
| `channel` | yes | `@handle`, channel URL, or `UC...` ID |
| `q` | yes | 1-200 chars |
| `limit` | no | 1-50 (default 30) |
Returns up to ~30 results (YouTube limit). Same video response shape as global search.
## GET /api/v2/youtube/channel/resolve — FREE
Convert @handle to channel ID:
```bash
curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
-H "User-Agent: YourAgent/1.0"
```
## Workflow: Search → Transcript
```bash
# 1. Search for videos
curl -s "https://transcriptapi.com/api/v2/youtube/search\
?q=python+web+scraping&type=video&limit=5" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
-H "User-Agent: YourAgent/1.0"
# 2. Get transcript from result
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
-H "User-Agent: YourAgent/1.0"
```
## 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 | Not found | Resource doesn't exist |
| 408 | Timeout | Retry once |
| 422 | Invalid param | Check param format |
Free tier: 100 credits, 300 req/min.
© ZeroPointRepo · MIT · ZeroPointRepo/youtube-skills