youtube-search
Search YouTube for videos and channels, search within specific channels, then fetch transcripts.
Installation
npx clawhub@latest install youtube-searchView the full skill documentation and source below.
Documentation
YouTube Search
Search YouTube and fetch transcripts via [TranscriptAPI.com]().
Setup
If $TRANSCRIPT_API_KEY is not set, help the user create an account (100 free credits, no card):
Step 1 — Register: Ask user for their email, generate a secure password.
node ./scripts/tapi-auth.js register --email USER_EMAIL --password SECURE_PASS --json
→ OTP sent to email. Ask user: _"Check your email for a 6-digit verification code."_
⚠️ SAVE THE PASSWORD — you need it again in Step 2!
Step 2 — Verify: Once user provides the OTP (use SAME password from Step 1):
node ./scripts/tapi-auth.js verify --email USER_EMAIL --password SECURE_PASS --otp CODE --json
→ Returns api_key (starts with sk_).
Step 3 — Save: Store the key (auto-configures agent + shell):
node ./scripts/tapi-auth.js save-key --key API_KEY --json
→ Ready to use. Agent runtime picks up the key automatically.
Manual option: [transcriptapi.com/signup]() → Dashboard → API Keys.
GET /api/v2/youtube/search — 1 credit
Search YouTube globally for videos or channels.
curl -s "" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
| Param | Required | Default | Validation |
q | yes | — | 1-200 chars (trimmed) |
type | no | video | video or channel |
limit | no | 20 | 1-50 |
{
"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": "",
"description": "Official channel...",
"subscriberCount": "4.2M subscribers",
"verified": true,
"rssUrl": "",
"thumbnails": [...]
}],
"result_count": 5
}
GET /api/v2/youtube/channel/search — 1 credit
Search videos within a specific channel.
curl -s "
?channel_id=UC_CHANNEL_ID&q=iphone+review&limit=30" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
| Param | Required | Validation |
channel_id | yes | ^UC[a-zA-Z0-9_-]{22}$ |
q | yes | 1-200 chars |
limit | no | 1-50 (default 30) |
GET /api/v2/youtube/channel/resolve — FREE
Convert @handle to channel ID for channel/search:
curl -s "" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Workflow: Search → Transcript
# 1. Search for videos
curl -s "
?q=python+web+scraping&type=video&limit=5" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
# 2. Get transcript from result
curl -s "
?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Errors
| Code | Action |
| 402 | No credits — transcriptapi.com/billing |
| 404 | Not found |
| 408 | Timeout — retry once |
| 422 | Invalid channel_id format |