Back to Skills
    šŸ¦ž

    youtube-data

    Access YouTube video data — transcripts, metadata, channel

    By @therohitdas
    View on GitHub
    SKILL.md
    ---
    name: youtube-data
    description: Access YouTube video data — transcripts, metadata, channel info, search, and playlists. A lightweight alternative to Google's YouTube Data API with no quota limits. Use when the user needs structured data from YouTube videos, channels, or playlists without dealing with Google API setup, OAuth, or daily quotas.
    homepage: https://transcriptapi.com
    metadata:
      {
        "moltbot":
          {
            "emoji": "šŸ“Š",
            "requires": { "env": ["TRANSCRIPT_API_KEY"] },
            "primaryEnv": "TRANSCRIPT_API_KEY",
          },
      }
    ---
    
    # 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, help the user create an account (100 free credits, no card):
    
    **Step 1 — Register:** Ask user for their email, generate a secure password.
    
    ```bash
    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):
    
    ```bash
    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):
    
    ```bash
    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](https://transcriptapi.com/signup) → Dashboard → API Keys.
    
    ## Video Data (transcript + metadata) — 1 credit
    
    ```bash
    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"
    ```
    
    **Response:**
    
    ```json
    {
      "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"
      }
    }
    ```
    
    ## Search Data — 1 credit
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20" \
      -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):**
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@mkbhd" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    Returns: `{"channel_id": "UCBcRF18a7Qf58cCRy5xuWwQ", "resolved_from": "@mkbhd"}`
    
    **Latest 15 videos with exact stats (free):**
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/latest?channel_id=UC_ID" \
      -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):**
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/videos?channel_id=UC_ID" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    Returns 100 videos per page + `continuation_token` for pagination.
    
    **Search within channel (1 credit):**
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/channel/search\
    ?channel_id=UC_ID&q=QUERY&limit=30" \
      -H "Authorization: Bearer $TRANSCRIPT_API_KEY"
    ```
    
    ## Playlist Data — 1 credit/page
    
    ```bash
    curl -s "https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist_id=PL_ID" \
      -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                   |
    
    Free tier: 100 credits, 300 req/min.