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.
How to use it
Claude Code
- Run the line below. It pulls the whole folder into
~/.claude/skills/youtube-data. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit ZeroPointRepo/youtube-skills/skills/youtube-data#main ~/.claude/skills/youtube-dataFor one project only, change the path to .claude/skills/youtube-data.
Claude (web or desktop app)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- 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.
Paste into Claude, ChatGPT or Cursor.
Source of Youtube data
Show the full text233 lines
| name | description | version | user-invocable | compatibility | required_environment_variables | metadata |
|---|---|---|---|---|---|---|
| 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 needing YouTube content, even if not mentioned explicitly. Not for uploads, account management, or written-source-only research. | 1.6.2 | true | Requires 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","transcripts","video","search","channels","playlists","data","metadata"],"category":"media"}} |
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
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
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):
GET https://transcriptapi.com/api/v2/youtube/info?video_url=VIDEO_URL
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
GET https://transcriptapi.com/api/v2/youtube/video/metadata?video_url=VIDEO_URL&include=details,related
Authorization: Bearer $TRANSCRIPT_API_KEY
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/metadatawas previously/video/info. The old path still works but is deprecated.
Search Data — 1 credit/page
GET https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20
Authorization: Bearer $TRANSCRIPT_API_KEY
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):
GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Returns: {"channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED"}
Latest 15 videos with exact stats (free):
GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
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):
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
# Most-viewed first (channel Videos tab, ~30 per page)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular
Authorization: Bearer $TRANSCRIPT_API_KEY
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):
GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=QUERY&limit=30
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Channel profile (1 credit):
GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Returns: title, handle, verified, subscriberCountText, videoCountText, description, tags, thumbnails, banners, availableTabs
Channel playlists (1 credit/page):
GET https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Returns: results (playlistId, title, url, videoCountText, thumbnails), continuation_token, has_more
Channel community posts (1 credit/page):
GET https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
Returns: results (postId, authorName, text, publishedTimeText, voteCountText, attachment), continuation_token, has_more
Channel curated sections (1 credit):
GET https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
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.
GET https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_ID
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
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
| 1 | |
| 2 | name youtube-data |
| 3 | description "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 needing YouTube content, even if not mentioned explicitly. Not for uploads, account management, or written-source-only research." |
| 4 | version "1.6.2" |
| 5 | user-invocable true |
| 6 | compatibility Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed. |
| 7 | required_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 |
| 12 | metadata {"openclaw":{"emoji":"▶️","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","transcripts","video","search","channels","playlists","data","metadata"],"category":"media"}} |
| 13 | |
| 14 | |
| 15 | # YouTube Data |
| 16 | |
| 17 | YouTube data access via [TranscriptAPI.com] — lightweight alternative to Google's YouTube Data API. |
| 18 | |
| 19 | ## Setup |
| 20 | |
| 21 | If `$TRANSCRIPT_API_KEY` is not set, read [references/auth-setup.md] and follow the instructions there to get and store the key. |
| 22 | |
| 23 | ## Required Headers |
| 24 | |
| 25 | Every 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 | |
| 32 | Full OpenAPI spec: [transcriptapi.com/openapi.json] — consult this for the latest parameters and schemas. |
| 33 | |
| 34 | ## Video Data (transcript + metadata) — 1 credit |
| 35 | |
| 36 | |
| 37 | GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true |
| 38 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 39 | User-Agent: YourAgent/1.0 |
| 40 | |
| 41 | |
| 42 | **Response:** |
| 43 | |
| 44 | |
| 45 | { |
| 46 | "video_id": "dQw4w9WgXcQ", |
| 47 | "language": "en", |
| 48 | "transcript": [ |
| 49 | { "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 } |
| 50 | ], |
| 51 | "metadata": { |
| 52 | "title": "Rick Astley - Never Gonna Give You Up", |
| 53 | "author_name": "Rick Astley", |
| 54 | "author_url": "https://www.youtube.com/@RickAstley", |
| 55 | "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" |
| 56 | } |
| 57 | } |
| 58 | |
| 59 | |
| 60 | ## Video Info & Rich Metadata |
| 61 | |
| 62 | Check languages before spending a transcript credit (free), or pull view/like counts, publish date, description, duration, and tags (1 credit): |
| 63 | |
| 64 | |
| 65 | GET https://transcriptapi.com/api/v2/youtube/info?video_url=VIDEO_URL |
| 66 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 67 | User-Agent: YourAgent/1.0 |
| 68 | |
| 69 | |
| 70 | |
| 71 | GET https://transcriptapi.com/api/v2/youtube/video/metadata?video_url=VIDEO_URL&include=details,related |
| 72 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 73 | User-Agent: YourAgent/1.0 |
| 74 | |
| 75 | |
| 76 | `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`. |
| 77 | |
| 78 | > **Naming:** `/video/metadata` was previously `/video/info`. The old path still works but is deprecated. |
| 79 | |
| 80 | ## Search Data — 1 credit/page |
| 81 | |
| 82 | |
| 83 | GET https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20 |
| 84 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 85 | User-Agent: YourAgent/1.0 |
| 86 | |
| 87 | |
| 88 | `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`). |
| 89 | |
| 90 | **Video result fields:** `videoId`, `title`, `channelId`, `channelTitle`, `channelHandle`, `channelVerified`, `lengthText`, `viewCountText`, `publishedTimeText`, `hasCaptions`, `thumbnails` |
| 91 | |
| 92 | **Channel result fields** (`type=channel`): `channelId`, `title`, `handle`, `url`, `description`, `subscriberCount`, `verified`, `rssUrl`, `thumbnails` |
| 93 | |
| 94 | ## Channel Data |
| 95 | |
| 96 | Channel endpoints accept `channel` — an `@handle`, channel URL, or `UC...` ID. No need to resolve first. |
| 97 | |
| 98 | **Resolve handle to ID (free):** |
| 99 | |
| 100 | |
| 101 | GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED |
| 102 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 103 | User-Agent: YourAgent/1.0 |
| 104 | |
| 105 | |
| 106 | Returns: `{"channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED"}` |
| 107 | |
| 108 | **Latest 15 videos with exact stats (free):** |
| 109 | |
| 110 | |
| 111 | GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED |
| 112 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 113 | User-Agent: YourAgent/1.0 |
| 114 | |
| 115 | |
| 116 | Returns: `channel` info, `results` array with `videoId`, `title`, `published` (ISO), `viewCount` (exact number), `description`, `thumbnail` |
| 117 | |
| 118 | **All channel videos (paginated, 1 credit/page):** |
| 119 | |
| 120 | |
| 121 | GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos |
| 122 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 123 | User-Agent: YourAgent/1.0 |
| 124 | |
| 125 | # Most-viewed first (channel Videos tab, ~30 per page) |
| 126 | GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular |
| 127 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 128 | User-Agent: YourAgent/1.0 |
| 129 | |
| 130 | |
| 131 | Returns ~100 videos per page + `continuation_token` for pagination. `tab` also accepts `shorts` or `streams`, and you repeat the same `tab` when paginating. |
| 132 | |
| 133 | **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. |
| 134 | |
| 135 | When paging, send the same sort on each request. |
| 136 | |
| 137 | **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`. |
| 138 | |
| 139 | **Search within channel (1 credit):** |
| 140 | |
| 141 | |
| 142 | GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=QUERY&limit=30 |
| 143 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 144 | User-Agent: YourAgent/1.0 |
| 145 | |
| 146 | |
| 147 | **Channel profile (1 credit):** |
| 148 | |
| 149 | |
| 150 | GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED |
| 151 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 152 | User-Agent: YourAgent/1.0 |
| 153 | |
| 154 | |
| 155 | Returns: `title`, `handle`, `verified`, `subscriberCountText`, `videoCountText`, `description`, `tags`, `thumbnails`, `banners`, `availableTabs` |
| 156 | |
| 157 | **Channel playlists (1 credit/page):** |
| 158 | |
| 159 | |
| 160 | GET https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED |
| 161 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 162 | User-Agent: YourAgent/1.0 |
| 163 | |
| 164 | |
| 165 | Returns: `results` (`playlistId`, `title`, `url`, `videoCountText`, `thumbnails`), `continuation_token`, `has_more` |
| 166 | |
| 167 | **Channel community posts (1 credit/page):** |
| 168 | |
| 169 | |
| 170 | GET https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED |
| 171 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 172 | User-Agent: YourAgent/1.0 |
| 173 | |
| 174 | |
| 175 | Returns: `results` (`postId`, `authorName`, `text`, `publishedTimeText`, `voteCountText`, `attachment`), `continuation_token`, `has_more` |
| 176 | |
| 177 | **Channel curated sections (1 credit):** |
| 178 | |
| 179 | |
| 180 | GET https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED |
| 181 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 182 | User-Agent: YourAgent/1.0 |
| 183 | |
| 184 | |
| 185 | Returns shelves of videos/playlists/shorts/featured channels, in the channel's own order. `tab` also accepts `podcasts` or `releases`. |
| 186 | |
| 187 | ## Playlist Data — 1 credit/page |
| 188 | |
| 189 | Accepts `playlist` — a YouTube playlist URL or playlist ID. |
| 190 | |
| 191 | |
| 192 | GET https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_ID |
| 193 | Authorization: Bearer $TRANSCRIPT_API_KEY |
| 194 | User-Agent: YourAgent/1.0 |
| 195 | |
| 196 | |
| 197 | Returns: `results` (videos), `playlist_info` (`title`, `numVideos`, `ownerName`, `viewCount`), `continuation_token`, `has_more` |
| 198 | |
| 199 | ## Credit Costs |
| 200 | |
| 201 | | Endpoint | Cost | Data returned | |
| 202 | | ----------------- | -------- | ------------------------------- | |
| 203 | | transcript | 1 | Full transcript + metadata | |
| 204 | | info | **free** | Basic metadata + languages | |
| 205 | | video/metadata | 1 | Rich metadata (+ details/related) | |
| 206 | | search | 1/page | Video/channel/playlist/movie details | |
| 207 | | channel/resolve | **free** | Channel ID mapping | |
| 208 | | channel/info | 1 | Channel profile | |
| 209 | | channel/latest | **free** | 15 videos + exact stats | |
| 210 | | channel/videos | 1/page | ~100/page unsorted, ~30/page sorted | |
| 211 | | channel/search | 1 | Videos matching query | |
| 212 | | channel/playlists | 1/page | Channel's playlists | |
| 213 | | channel/posts | 1/page | Community tab content | |
| 214 | | channel/sections | 1 | Curated home-page shelves | |
| 215 | | playlist/videos | 1/page | 100 videos per page | |
| 216 | |
| 217 | ## Errors |
| 218 | |
| 219 | | Code | Meaning | Action | |
| 220 | | -------- | ---------------- | ---------------------------------------------- | |
| 221 | | 401 | Bad API key | Check key | |
| 222 | | 402 | No credits | transcriptapi.com/billing | |
| 223 | | 403/1010 | Cloudflare block | Add or fix User-Agent header | |
| 224 | | 404 | Not found | Resource doesn't exist | |
| 225 | | 408 | Timeout | Retry once | |
| 226 | | 422 | Validation error | Check param format | |
| 227 | |
| 228 | Free tier: 100 credits, 300 req/min. |
| 229 | |
| 230 | ## Copy-paste examples |
| 231 | |
| 232 | Every request in this file as a ready-to-run one-liner: [references/curl-examples.md] |
| 233 |
Discussion
Browse more free Claude skills or everything in Development.