youtube-data

Use when structured YouTube data is needed: pasted video/channel/playlist links, transcripts for analysis, video metadata, channel upload history, search results, or playlist conte…

Rohit Das

@therohitdas

Install

$ openclaw skills install @therohitdas/youtube-data

YouTube Data

YouTube data access via TranscriptAPI.com — lightweight alternative to Google's YouTube Data API.

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.

Video Data (transcript + metadata) — 1 credit

curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

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": "https://www.youtube.com/@RickAstley",
    "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg"
  }
}

Video Info & Rich Metadata

Check languages before spending a transcript credit (free), or pull view/like counts, publish date, description, duration, and tags (1 credit):

curl -s "https://transcriptapi.com/api/v2/youtube/info?video_url=VIDEO_URL" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
curl -s "https://transcriptapi.com/api/v2/youtube/video/metadata\
?video_url=VIDEO_URL&include=details,related" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

video/metadata returns title, viewCountText, likeCountText, publishDate, description, descriptionLinks, channel, thumbnails, plus details (duration, category, tags, caption tracks) and related videos when requested via include.

Naming: /video/metadata was previously /video/info. The old path still works but is deprecated.

Search Data — 1 credit/page

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"

type also accepts playlist and movie. First page only, you can add sort (relevance/views), upload_date (hour/today/week/month/year), duration (short/medium/long), and features (e.g. hd,subtitles,cc).

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

Channel endpoints accept channel — an @handle, channel URL, or UC... ID. No need to resolve first.

Resolve handle to ID (free):

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

Returns: {"channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED"}

Latest 15 videos with exact stats (free):

curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Returns: channel info, results array with videoId, title, published (ISO), viewCount (exact number), description, thumbnail

All channel videos (paginated, 1 credit/page):

curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

# Most-viewed first (channel Videos tab, ~30 per page)
curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Returns ~100 videos per page + continuation_token for pagination. tab also accepts shorts or streams, and you repeat the same tab when paginating.

Sorting. Add sort=latest, popular, or oldest to channel/videos to get a channel's videos in the order you want, for example its most-popular uploads first. A sorted page returns about 30 videos (an unsorted page returns about 100), and every page costs the same 1 credit.

When paging, send the same sort on each request.

Item fields. Every item carries members_only, true only when YouTube badges it "Members only", and those items have no viewCountText. tab=streams items carry lengthText and publishedTimeText (for example Streamed 2 years ago); tab=shorts returns null for both, because YouTube's Shorts grid publishes neither. On the channel-tab feeds (tab=videos with sort, tab=shorts, tab=streams) channelId, channelTitle, channelHandle and index are null.

Search within channel (1 credit):

curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\
?channel=@TED&q=QUERY&limit=30" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Channel profile (1 credit):

curl -s "https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Returns: title, handle, verified, subscriberCountText, videoCountText, description, tags, thumbnails, banners, availableTabs

Channel playlists (1 credit/page):

curl -s "https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Returns: results (playlistId, title, url, videoCountText, thumbnails), continuation_token, has_more

Channel community posts (1 credit/page):

curl -s "https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Returns: results (postId, authorName, text, publishedTimeText, voteCountText, attachment), continuation_token, has_more

Channel curated sections (1 credit):

curl -s "https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Returns shelves of videos/playlists/shorts/featured channels, in the channel's own order. tab also accepts podcasts or releases.

Playlist Data — 1 credit/page

Accepts playlist — a YouTube playlist URL or playlist ID.

curl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_ID" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"

Returns: results (videos), playlist_info (title, numVideos, ownerName, viewCount), continuation_token, has_more

Credit Costs

EndpointCostData returned
transcript1Full transcript + metadata
infofreeBasic metadata + languages
video/metadata1Rich metadata (+ details/related)
search1/pageVideo/channel/playlist/movie details
channel/resolvefreeChannel ID mapping
channel/info1Channel profile
channel/latestfree15 videos + exact stats
channel/videos1/page~100/page unsorted, ~30/page sorted
channel/search1Videos matching query
channel/playlists1/pageChannel's playlists
channel/posts1/pageCommunity tab content
channel/sections1Curated home-page shelves
playlist/videos1/page100 videos per page

Errors

CodeMeaningAction
401Bad API keyCheck key
402No creditstranscriptapi.com/billing
403/1010Cloudflare blockAdd or fix User-Agent header
404Not foundResource doesn't exist
408TimeoutRetry once
422Validation errorCheck param format

Free tier: 100 credits, 300 req/min.

Top skills in this category