Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add ZeroPointRepo/youtube-skills --skill youtube-search -a claude-code
Open on GitHub

What 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 @handle into 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-code

2Manually: put the files in place

~/.claude/skills/youtube-search/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/youtube-search/

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

Similar skills

All skills for Browser and scraping →

From the same set10

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor