youtube-data
Access YouTube video data — transcripts, metadata, channel info, search.
Installation
npx clawhub@latest install youtube-dataView the full skill documentation and source below.
Documentation
YouTube Data
YouTube data access via [TranscriptAPI.com]() — lightweight alternative to Google's YouTube Data API.
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.
Video Data (transcript + metadata) — 1 credit
curl -s "
?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Response:
{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"transcript": [
{ "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 }
],
"metadata": {
"title": "Rick Astley - Never Gonna Give You Up",
"author_name": "Rick Astley",
"author_url": "",
"thumbnail_url": ""
}
}
Search Data — 1 credit
curl -s "" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Video result fields: videoId, title, channelId, channelTitle, channelHandle, channelVerified, lengthText, viewCountText, publishedTimeText, hasCaptions, thumbnails
Channel result fields (type=channel): channelId, title, handle, url, description, subscriberCount, verified, rssUrl, thumbnails
Channel Data
Resolve handle to ID (free):
curl -s "" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Returns: {"channel_id": "UCBcRF18a7Qf58cCRy5xuWwQ", "resolved_from": "@mkbhd"}
Latest 15 videos with exact stats (free):
curl -s "" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Returns: channel info, results array with videoId, title, published (ISO), viewCount (exact number), description, thumbnail
All channel videos (paginated, 1 credit/page):
curl -s "" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Returns 100 videos per page + continuation_token for pagination.
Search within channel (1 credit):
curl -s "
?channel_id=UC_ID&q=QUERY&limit=30" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Playlist Data — 1 credit/page
curl -s "" \
-H "Authorization: Bearer $TRANSCRIPT_API_KEY"
Returns: results (videos), playlist_info (title, numVideos, ownerName, viewCount), continuation_token, has_more
Credit Costs
| Endpoint | Cost | Data returned |
| transcript | 1 | Full transcript + metadata |
| search | 1 | Video/channel details |
| channel/resolve | free | Channel ID mapping |
| channel/latest | free | 15 videos + exact stats |
| channel/videos | 1/page | 100 videos per page |
| channel/search | 1 | Videos matching query |
| playlist/videos | 1/page | 100 videos per page |
Errors
| Code | Action |
| 402 | No credits — transcriptapi.com/billing |
| 404 | Not found |
| 408 | Timeout — retry once |
| 422 | Invalid param format |