Youtube search

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.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/youtube-search.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit ZeroPointRepo/youtube-skills/skills/youtube-search#main ~/.claude/skills/youtube-search

For one project only, change the path to .claude/skills/youtube-search.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Youtube search

Show the full text175 lines
namedescriptionversionuser-invocablecompatibilityrequired_environment_variablesmetadata
youtube-searchUse 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.1.6.0trueRequires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed. - 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{"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"}}

Search YouTube and fetch transcripts 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.

API Reference

Full OpenAPI spec: 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.

GET https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20
Authorization: Bearer $TRANSCRIPT_API_KEY
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:

GET https://transcriptapi.com/api/v2/youtube/search?q=innovation&sort=views&duration=long&upload_date=month
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Search for playlists on a topic:

GET https://transcriptapi.com/api/v2/youtube/search?q=react+tutorial&type=playlist
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Video search response:

{
  "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):

{
  "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.

GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=climate+change&limit=30
Authorization: Bearer $TRANSCRIPT_API_KEY
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:

GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Workflow: Search → Transcript

# 1. Search for videos
GET https://transcriptapi.com/api/v2/youtube/search?q=python+web+scraping&type=video&limit=5
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

# 2. Get transcript from result
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
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.

Copy-paste examples

Every request in this file as a ready-to-run one-liner: references/curl-examples.md

1---
2name: youtube-search
3description: "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."
4version: "1.6.0"
5user-invocable: true
6compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
7required_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
12metadata: {"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"}}
13---
14 
15# YouTube Search
16 
17Search YouTube and fetch transcripts via [TranscriptAPI.com](https://transcriptapi.com).
18 
19## Setup
20 
21If `$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.
22 
23## Required Headers
24 
25Every 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## API Reference
31 
32Full OpenAPI spec: [transcriptapi.com/openapi.json](https://transcriptapi.com/openapi.json) — consult this for the latest parameters and schemas.
33 
34## GET /api/v2/youtube/search — 1 credit/page
35 
36Search YouTube globally for videos, channels, playlists, or movies.
37 
38```http
39GET https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20
40Authorization: Bearer $TRANSCRIPT_API_KEY
41User-Agent: YourAgent/1.0
42```
43 
44| Param | Required | Default | Validation |
45| -------------- | ----------- | ----------- | ------------------------------------------------------------------ |
46| `q` | conditional | — | 1-200 chars (trimmed), first page |
47| `type` | no | `video` | `video`, `channel`, `playlist`, `movie` (first page) |
48| `sort` | no | `relevance` | `relevance` or `views` (first page) |
49| `upload_date` | no | — | `hour`, `today`, `week`, `month`, `year` — videos, first page |
50| `duration` | no | — | `short` (<4m), `medium` (4-20m), `long` (>20m) — videos, first page |
51| `features` | no | — | comma-separated: `hd`, `subtitles`, `cc`, `live`, `4k`, `hdr`, etc. |
52| `limit` | no | `20` | 1-50 |
53| `continuation` | conditional | — | token from a previous response (subsequent pages) |
54 
55Provide 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.
56 
57**Find recent, most-viewed videos:**
58 
59```http
60GET https://transcriptapi.com/api/v2/youtube/search?q=innovation&sort=views&duration=long&upload_date=month
61Authorization: Bearer $TRANSCRIPT_API_KEY
62User-Agent: YourAgent/1.0
63```
64 
65**Search for playlists on a topic:**
66 
67```http
68GET https://transcriptapi.com/api/v2/youtube/search?q=react+tutorial&type=playlist
69Authorization: Bearer $TRANSCRIPT_API_KEY
70User-Agent: YourAgent/1.0
71```
72 
73**Video search response:**
74 
75```json
76{
77 "results": [
78 {
79 "type": "video",
80 "videoId": "dQw4w9WgXcQ",
81 "title": "Rick Astley - Never Gonna Give You Up",
82 "channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
83 "channelTitle": "Rick Astley",
84 "channelHandle": "@RickAstley",
85 "channelVerified": true,
86 "lengthText": "3:33",
87 "viewCountText": "1.5B views",
88 "publishedTimeText": "14 years ago",
89 "hasCaptions": true,
90 "thumbnails": [{ "url": "...", "width": 120, "height": 90 }]
91 }
92 ],
93 "result_count": 20
94}
95```
96 
97**Channel search response** (`type=channel`):
98 
99```json
100{
101 "results": [{
102 "type": "channel",
103 "channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
104 "title": "Rick Astley",
105 "handle": "@RickAstley",
106 "url": "https://www.youtube.com/@RickAstley",
107 "description": "Official channel...",
108 "subscriberCount": "4.2M subscribers",
109 "verified": true,
110 "rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC...",
111 "thumbnails": [...]
112 }],
113 "result_count": 5
114}
115```
116 
117## GET /api/v2/youtube/channel/search — 1 credit
118 
119Search videos within a specific channel. Accepts `channel` — an `@handle`, channel URL, or `UC...` ID.
120 
121```http
122GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=climate+change&limit=30
123Authorization: Bearer $TRANSCRIPT_API_KEY
124User-Agent: YourAgent/1.0
125```
126 
127| Param | Required | Validation |
128| --------- | -------- | ----------------------------------------- |
129| `channel` | yes | `@handle`, channel URL, or `UC...` ID |
130| `q` | yes | 1-200 chars |
131| `limit` | no | 1-50 (default 30) |
132 
133Returns up to ~30 results (YouTube limit). Same video response shape as global search.
134 
135## GET /api/v2/youtube/channel/resolve — FREE
136 
137Convert @handle to channel ID:
138 
139```http
140GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
141Authorization: Bearer $TRANSCRIPT_API_KEY
142User-Agent: YourAgent/1.0
143```
144 
145## Workflow: Search → Transcript
146 
147```http
148# 1. Search for videos
149GET https://transcriptapi.com/api/v2/youtube/search?q=python+web+scraping&type=video&limit=5
150Authorization: Bearer $TRANSCRIPT_API_KEY
151User-Agent: YourAgent/1.0
152 
153# 2. Get transcript from result
154GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true
155Authorization: Bearer $TRANSCRIPT_API_KEY
156User-Agent: YourAgent/1.0
157```
158 
159## Errors
160 
161| Code | Meaning | Action |
162| -------- | ---------------- | ---------------------------------------------- |
163| 401 | Bad API key | Check key |
164| 402 | No credits | transcriptapi.com/billing |
165| 403/1010 | Cloudflare block | Add or fix User-Agent header |
166| 404 | Not found | Resource doesn't exist |
167| 408 | Timeout | Retry once |
168| 422 | Invalid param | Check param format |
169 
170Free tier: 100 credits, 300 req/min.
171 
172## Copy-paste examples
173 
174Every request in this file as a ready-to-run one-liner: [references/curl-examples.md](references/curl-examples.md)
175 

Discussion