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
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/youtube-data.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit ZeroPointRepo/youtube-skills/skills/youtube-data#main ~/.claude/skills/youtube-data

For one project only, change the path to .claude/skills/youtube-data.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. 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.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Youtube data

Show the full text233 lines
namedescriptionversionuser-invocablecompatibilityrequired_environment_variablesmetadata
youtube-dataUse 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.2trueRequires 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/metadata was 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---
2name: youtube-data
3description: "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."
4version: "1.6.2"
5user-invocable: true
6compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
7required_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
12metadata: {"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 
17YouTube data access via [TranscriptAPI.com](https://transcriptapi.com) — lightweight alternative to Google's YouTube Data API.
18 
19## Setup
20 
21If `$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.
22 
23## Required Headers
24 
25Every 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 
32Full OpenAPI spec: [transcriptapi.com/openapi.json](https://transcriptapi.com/openapi.json) — consult this for the latest parameters and schemas.
33 
34## Video Data (transcript + metadata) — 1 credit
35 
36```http
37GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true
38Authorization: Bearer $TRANSCRIPT_API_KEY
39User-Agent: YourAgent/1.0
40```
41 
42**Response:**
43 
44```json
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 
62Check languages before spending a transcript credit (free), or pull view/like counts, publish date, description, duration, and tags (1 credit):
63 
64```http
65GET https://transcriptapi.com/api/v2/youtube/info?video_url=VIDEO_URL
66Authorization: Bearer $TRANSCRIPT_API_KEY
67User-Agent: YourAgent/1.0
68```
69 
70```http
71GET https://transcriptapi.com/api/v2/youtube/video/metadata?video_url=VIDEO_URL&include=details,related
72Authorization: Bearer $TRANSCRIPT_API_KEY
73User-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```http
83GET https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20
84Authorization: Bearer $TRANSCRIPT_API_KEY
85User-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 
96Channel endpoints accept `channel` — an `@handle`, channel URL, or `UC...` ID. No need to resolve first.
97 
98**Resolve handle to ID (free):**
99 
100```http
101GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
102Authorization: Bearer $TRANSCRIPT_API_KEY
103User-Agent: YourAgent/1.0
104```
105 
106Returns: `{"channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED"}`
107 
108**Latest 15 videos with exact stats (free):**
109 
110```http
111GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
112Authorization: Bearer $TRANSCRIPT_API_KEY
113User-Agent: YourAgent/1.0
114```
115 
116Returns: `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```http
121GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos
122Authorization: Bearer $TRANSCRIPT_API_KEY
123User-Agent: YourAgent/1.0
124 
125# Most-viewed first (channel Videos tab, ~30 per page)
126GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular
127Authorization: Bearer $TRANSCRIPT_API_KEY
128User-Agent: YourAgent/1.0
129```
130 
131Returns ~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 
135When 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```http
142GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=QUERY&limit=30
143Authorization: Bearer $TRANSCRIPT_API_KEY
144User-Agent: YourAgent/1.0
145```
146 
147**Channel profile (1 credit):**
148 
149```http
150GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED
151Authorization: Bearer $TRANSCRIPT_API_KEY
152User-Agent: YourAgent/1.0
153```
154 
155Returns: `title`, `handle`, `verified`, `subscriberCountText`, `videoCountText`, `description`, `tags`, `thumbnails`, `banners`, `availableTabs`
156 
157**Channel playlists (1 credit/page):**
158 
159```http
160GET https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED
161Authorization: Bearer $TRANSCRIPT_API_KEY
162User-Agent: YourAgent/1.0
163```
164 
165Returns: `results` (`playlistId`, `title`, `url`, `videoCountText`, `thumbnails`), `continuation_token`, `has_more`
166 
167**Channel community posts (1 credit/page):**
168 
169```http
170GET https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED
171Authorization: Bearer $TRANSCRIPT_API_KEY
172User-Agent: YourAgent/1.0
173```
174 
175Returns: `results` (`postId`, `authorName`, `text`, `publishedTimeText`, `voteCountText`, `attachment`), `continuation_token`, `has_more`
176 
177**Channel curated sections (1 credit):**
178 
179```http
180GET https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED
181Authorization: Bearer $TRANSCRIPT_API_KEY
182User-Agent: YourAgent/1.0
183```
184 
185Returns 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 
189Accepts `playlist` — a YouTube playlist URL or playlist ID.
190 
191```http
192GET https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_ID
193Authorization: Bearer $TRANSCRIPT_API_KEY
194User-Agent: YourAgent/1.0
195```
196 
197Returns: `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 
228Free tier: 100 credits, 300 req/min.
229 
230## Copy-paste examples
231 
232Every request in this file as a ready-to-run one-liner: [references/curl-examples.md](references/curl-examples.md)
233 

Discussion

Alternatives

Also in Services & APIsSee all 533 in Development →