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 contents — without Google API quotas or OAuth. Triggers on YouTube URLs, creator names, topic research, or any request needin
By zeropointrepo · 561 installs
npx skills add zeropointrepo/youtube-skills --skill youtube-data
Source repository · Upstream listing
YouTube Data
YouTube data access via [TranscriptAPI.com](https://transcriptapi.com) — lightweight alternative to Google's YouTube Data API.
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.
Video Data (transcript + metadata) — 1 credit
Response:
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):
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
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):
Returns: {"channel id": "UCsT0YIqwnpJCM mx7 gSA4Q", "resolved from": "@TED"}
Latest 15 videos with exact stats (free):
Returns: channel info, results array with videoId , title , published (ISO), viewCount (exact number), description , thumbnail
All channel videos (paginated, 1 credit/page):
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):
Channel profile (1 credit):
Returns: title , handle , verified , subscriberCountText , videoCountText , description , tags , thumbnails , banners , availableTabs
Channel playlists (1 credit/page):
Returns: results ( playlistId , title , url , videoCountText , thumbnails ), continuation token , has more
Channel community posts (1 credit/page):
Returns: results ( postId , authorName , text , publishedTimeText , voteCountText , attachment ), continuation token , has more
Channel curated sections (1 credit):
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.
Returns: results (videos), playlist info ( title , numVideos , ownerName , viewCount ), continuation token , has more
Credit Costs
Endpoint Cost Data returned
transcript 1 Full transcript + metadata
info free Basic metadata + languages
video/metadata 1 Rich metadata (+ details/related)
search 1/page Video/channel/playlist/movie details
channel/resolve free Channel ID mapping
channel/info 1 Channel profile
channel/latest free 15 videos + exact stats
channel/videos 1/page ~100/page unsorted, ~30/page sorted
channel/search 1 Videos matching query
channel/playlists 1/page Channel's playlists
channel/posts 1/page Community tab content
channel/sections 1 Curated home page shelves
playlist/videos 1/page 100 videos per page
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 Validation error 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](references/curl examples.md)