{"id":"8a8c1c9e-8c6f-4617-987a-05b38a7d1626","entityType":"agent","slug":"clawhub-crawlora-org-youtube-research","name":"youtube-research","canonicalUrl":"https://www.xpersona.co/agent/clawhub-crawlora-org-youtube-research","canonicalPath":"/agent/clawhub-crawlora-org-youtube-research","generatedAt":"2026-10-11T07:41:12.702Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:28:57.632Z","emptyReason":null},"description":"Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:youtube-research","sourceUrl":"https://clawhub.ai/crawlora-org/youtube-research","homepage":"https://clawhub.ai/crawlora-org/skills/youtube-research","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/crawlora-org/youtube-research","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/crawlora-org/skills/youtube-research","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"youtube-research technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:28:57.632Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:28:57.632Z","emptyReason":null},"stars":null,"forks":null,"downloads":1146,"packageName":null,"latestVersion":"1.0.19","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:28:57.535Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T05:28:57.632Z","lastCrawledAt":"2026-10-11T05:28:57.535Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T05:28:57.535Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.19","createdAt":"2026-10-06T02:04:59.998Z","changelog":"Sync skill instructions, references, and helper from GitHub a91c30113b1827d719267576bbd2936c99a28029","fileCount":5,"zipByteSize":7616},{"version":"1.0.18","createdAt":"2026-09-21T02:01:16.460Z","changelog":"Sync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805","fileCount":5,"zipByteSize":7162},{"version":"1.0.17","createdAt":"2026-09-17T10:22:22.394Z","changelog":"Security hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.","fileCount":5,"zipByteSize":6712},{"version":"1.0.16","createdAt":"2026-09-14T02:25:15.349Z","changelog":"Sync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d","fileCount":5,"zipByteSize":7198},{"version":"1.0.15","createdAt":"2026-09-10T12:38:19.439Z","changelog":"Validate API keys before curl config","fileCount":5,"zipByteSize":7059},{"version":"1.0.14","createdAt":"2026-09-10T12:18:47.111Z","changelog":"Keep API keys out of process arguments","fileCount":5,"zipByteSize":6895},{"version":"1.0.13","createdAt":"2026-09-10T12:09:24.317Z","changelog":"Reject curl local-file query syntax","fileCount":5,"zipByteSize":6675},{"version":"1.0.12","createdAt":"2026-09-10T11:56:55.522Z","changelog":"Stream helper request bodies through curl stdin","fileCount":5,"zipByteSize":6565}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:youtube-research","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:youtube-research` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/crawlora-org/youtube-research before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T07:41:12.698Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-youtube-research/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:28:57.632Z","emptyReason":null},"readme":"Skill: youtube-research\n\nOwner: crawlora-org\n\nSummary: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n\nTags: latest:1.0.19\n\nVersion history:\n\nv1.0.19 | 2026-10-06T02:04:59.998Z | user\n\nSync skill instructions, references, and helper from GitHub a91c30113b1827d719267576bbd2936c99a28029\n\nv1.0.18 | 2026-09-21T02:01:16.460Z | user\n\nSync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805\n\nv1.0.17 | 2026-09-17T10:22:22.394Z | user\n\nSecurity hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.\n\nv1.0.16 | 2026-09-14T02:25:15.349Z | user\n\nSync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d\n\nv1.0.15 | 2026-09-10T12:38:19.439Z | user\n\nValidate API keys before curl config\n\nv1.0.14 | 2026-09-10T12:18:47.111Z | user\n\nKeep API keys out of process arguments\n\nv1.0.13 | 2026-09-10T12:09:24.317Z | user\n\nReject curl local-file query syntax\n\nv1.0.12 | 2026-09-10T11:56:55.522Z | user\n\nStream helper request bodies through curl stdin\n\nv1.0.11 | 2026-09-10T11:45:02.299Z | user\n\nScope helper routes and remove secret-shaped key examples\n\nv1.0.10 | 2026-09-10T07:21:55.083Z | user\n\nMigrate publisher from tonywangcn to crawlora-org for brand consistency with the plugins\n\nv1.0.9 | 2026-09-08T04:41:31.944Z | user\n\nRefresh stale REST examples, endpoint references, and Bash helper from crawlora-skills 1.17.1.\n\nv1.0.8 | 2026-09-07T13:43:55.713Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.7 | 2026-09-07T08:26:17.478Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.6 | 2026-09-07T06:49:46.108Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.5 | 2026-08-24T07:34:19.962Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.4 | 2026-08-24T06:44:38.638Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.3 | 2026-08-24T05:21:56.202Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.2 | 2026-08-14T18:42:46.841Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.1 | 2026-08-10T18:35:49.346Z | user\n\nSet categories\n\nv1.0.0 | 2026-08-10T18:06:33.456Z | auto\n\nInitial release of youtube-research.\n\n- Fetches structured YouTube data (videos, channels, transcripts, comments, playlists, and search) via the Crawlora API.\n- No use of yt-dlp, browser automation, or HTML scraping; all data provided as clean JSON.\n- Supports extracting metadata, transcripts, comments, videos, and playlists by ID or URL.\n- Search YouTube by keyword and retrieve results in normalized JSON.\n- Requires a free Crawlora API key; setup instructions included.\n\nArchive index:\n\nArchive v1.0.19: 5 files, 7616 bytes\n\nFiles: reference/endpoints.md (7669b), scripts/crawlora.sh (3765b), skill-card.md (1835b), SKILL.md (4587b), _meta.json (136b)\n\nFile v1.0.19:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n- Comparing a bounded set of videos with timestamped transcript evidence.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Transcript-backed topic research\n\nFor a topic brief, search first, deduplicate by video ID, and choose a bounded\nsample that reflects the requested date, language, and video types. Discover\navailable transcript languages before fetching captions. Request JSON with\ntimestamps for evidence extraction; tie each theme or claim to the actual\ncaption segment and video URL. A caption or translation may mishear speech and\ndoes not independently verify factual claims. Report unavailable transcripts\nand keep search rank, view counts, and comment samples separate from demand.\n\nFor a wider map of topic and format coverage across videos or channels, use\nyoutube-content-gap-analysis when installed.\n\n~~~sh\nscripts/crawlora.sh /youtube/search q=\"home energy storage\" type=video sort_by=relevance\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ/languages\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ format=json timestamps=true\n~~~\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.19:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1791252299998\n}\n\nFile v1.0.19:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**14 endpoints across 1 platform group(s).**\n\n## YouTube (14)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias. `hl` and `gl` localize ranking and result context; they default to `en` and `US`. Named filters cover the public web search filters. Account-only chips such as Watched and Unwatched are not exposed.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; short, medium, and long preserve their previous upstream encodings; `features` (string, optional) — Comma-separated feature filters. Allowed values: live, 4k, hd, subtitles, cc, creative_commons, 360, vr180, 3d, hdr, location, purchased; `gl` (string, optional) — Two-letter YouTube region code; `hl` (string, optional) — YouTube interface language; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_suggest`\n\n- **HTTP:** `GET /youtube/suggest`\n- **What:** Suggest YouTube search queries. Returns YouTube search-box autocomplete completions for a query prefix, in YouTube's own ranking order. `hl` and `gl` localize the list; they default to `en` and `US`.\n- **Params:** `count` (integer, optional) — Suggestions to return; defaults to 10, clamped to 1..20; `gl` (string, optional) — Two-letter YouTube region code; defaults to US; `hl` (string, optional) — YouTube interface language, such as en, de, or pt-BR; defaults to en; `q` (string, **required**) — Search query prefix\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope. Returns `404` when the video currently has no transcript/captions available in any language — this is a normal, non-retryable result, not an error condition. Returns `503` when the request is temporarily blocked or rate-limited; retrying after a short delay may succeed.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.19:skill-card.md\n\n## Description:\n\nRetrieves YouTube video and channel details, transcripts, comments, playlists, and search results through the Crawlora API for research and summaries.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nResearchers, developers, and other users can collect public YouTube transcripts, comments, video and channel details, and search results to prepare evidence-backed summaries and comparisons.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Requested YouTube lookups and the Crawlora API key are sent to Crawlora.\n\nMitigation: Use the skill only if this disclosure is acceptable; keep the key in CRAWLORA_API_KEY and never hardcode it.\n\nRisk: Public YouTube transcripts and comments may be missing, incomplete, or inaccurate.\n\nMitigation: Check transcript availability and verify consequential claims against the source video.\n\n## Reference(s):\n\n- [YouTube endpoint reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n- [YouTube Research on ClawHub](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands]\n\n**Output Format:** [Markdown summaries and structured JSON results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include video URLs and timestamped transcript evidence; availability varies by video.]\n\n## Skill Version(s):\n\n1.0.19 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.18: 5 files, 7162 bytes\n\nFiles: reference/endpoints.md (7070b), scripts/crawlora.sh (3723b), skill-card.md (2177b), SKILL.md (3573b), _meta.json (136b)\n\nFile v1.0.18:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.18:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.18\",\n  \"publishedAt\": 1789956076460\n}\n\nFile v1.0.18:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias. `hl` and `gl` localize ranking and result context; they default to `en` and `US`. Named filters cover the public web search filters. Account-only chips such as Watched and Unwatched are not exposed.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; short, medium, and long preserve their previous upstream encodings; `features` (string, optional) — Comma-separated feature filters. Allowed values: live, 4k, hd, subtitles, cc, creative_commons, 360, vr180, 3d, hdr, location, purchased; `gl` (string, optional) — Two-letter YouTube region code; `hl` (string, optional) — YouTube interface language; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope. Returns `404` when the video currently has no transcript/captions available in any language — this is a normal, non-retryable result, not an error condition. Returns `503` when the request is temporarily blocked or rate-limited; retrying after a short delay may succeed.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.18:skill-card.md\n\n## Description:\n\nPulls structured YouTube data -- video and channel details, transcripts/captions, comments, playlists, and search -- via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, researchers, and analysts use this skill to retrieve public YouTube transcripts, captions, comments, video/channel metadata, playlists, and search results through Crawlora for summaries, sentiment review, channel digests, and research workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill sends requested YouTube identifiers, search terms, and the Crawlora API key to Crawlora.\n\nMitigation: Install only when that data sharing is acceptable, keep the key in CRAWLORA_API_KEY, and do not hardcode, commit, or pass the key in query parameters.\n\nRisk: The helper is intended for public YouTube research requests only.\n\nMitigation: Use the documented helper for public YouTube lookups and avoid submitting sensitive or private research terms unless approved for use with Crawlora.\n\n## Reference(s):\n\n- [youtube-research endpoint reference](artifact/reference/endpoints.md)\n- [Crawlora website](https://crawlora.net)\n- [Crawlora API base](https://api.crawlora.net/api/v1)\n- [ClawHub skill page](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [API Calls, JSON, Shell commands, Guidance]\n\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses CRAWLORA_API_KEY from the environment and limits helper requests to documented public YouTube GET endpoints.]\n\n## Skill Version(s):\n\n1.0.18 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.17: 5 files, 6712 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (3723b), skill-card.md (1983b), SKILL.md (3573b), _meta.json (136b)\n\nFile v1.0.17:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.17:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1789640542394\n}\n\nFile v1.0.17:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.17:skill-card.md\n\n## Description:\n\nPulls structured YouTube data -- video and channel details, transcripts/captions, comments, playlists, and search -- via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and research agents use this skill to retrieve public YouTube transcripts, captions, comments, channel details, playlist data, and search results as normalized JSON through Crawlora.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YouTube URLs, IDs, search queries, and the Crawlora API key are sent to Crawlora when the helper is used.\n\nMitigation: Use the skill for public YouTube research only, keep the API key in the environment, and avoid submitting sensitive private context as query parameters.\n\nRisk: Requests outside the documented YouTube route set could expose unintended account or API surfaces.\n\nMitigation: Use the bundled helper, which fixes the Crawlora API base, allows only GET requests, and restricts calls to documented YouTube routes.\n\n## Reference(s):\n\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n\n## Skill Output:\n\n**Output Type(s):** [JSON, Shell commands, Configuration, Guidance]\n\n**Output Format:** [JSON responses with concise Markdown guidance and shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires CRAWLORA_API_KEY; the helper is GET-only and limited to documented public YouTube lookup routes.]\n\n## Skill Version(s):\n\n1.0.17 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.16: 5 files, 7198 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (4642b), skill-card.md (2125b), SKILL.md (3573b), _meta.json (136b)\n\nFile v1.0.16:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.16:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.16\",\n  \"publishedAt\": 1789352715349\n}\n\nFile v1.0.16:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.16:skill-card.md\n\n## Description:\n\nPulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, developers, and research teams use this skill to retrieve public YouTube transcripts, comments, video/channel metadata, playlists, and search results through Crawlora for summaries, sentiment review, channel digests, and research workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Requested YouTube identifiers, search queries, and related request data are sent to Crawlora using the user's API key.\n\nMitigation: Use the skill only for public YouTube lookup data that is acceptable to send to Crawlora under the configured CRAWLORA_API_KEY.\n\nRisk: The helper supports POST request bodies, which could include private text if a caller supplies it.\n\nMitigation: Prefer the documented GET examples and avoid passing private text in POST bodies unless the publisher documents a specific POST use case.\n\n## Reference(s):\n\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora API service](https://crawlora.net)\n- [ClawHub skill page](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, JSON]\n\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires CRAWLORA_API_KEY and sends documented public YouTube lookup requests to the Crawlora API.]\n\n## Skill Version(s):\n\n1.0.16 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.15: 5 files, 7059 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (4084b), skill-card.md (2283b), SKILL.md (3573b), _meta.json (136b)\n\nFile v1.0.15:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.15:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.15\",\n  \"publishedAt\": 1789043899439\n}\n\nFile v1.0.15:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.15:skill-card.md\n\n## Description:\n\nPulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and agent operators use this skill to retrieve structured public YouTube transcripts, captions, comments, channel or video metadata, playlists, and search results through Crawlora for research and summarization workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YouTube URLs, search terms, and request parameters are sent to Crawlora with the user's API key.\n\nMitigation: Install only when this data sharing is acceptable, review Crawlora service terms, and avoid sending sensitive or private inputs.\n\nRisk: The Crawlora API key could be exposed if it is hardcoded, committed, or passed in unsafe command arguments.\n\nMitigation: Keep the key in CRAWLORA_API_KEY, do not commit it, and use the bundled helper that sends the key through a temporary curl config.\n\nRisk: Undocumented or unrelated API routes could broaden the helper's behavior beyond the YouTube research use case.\n\nMitigation: Use only the documented YouTube endpoints; the helper restricts methods and paths to the skill catalog.\n\n## Reference(s):\n\n- [Endpoint Reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n- [Crawlora API Base](https://api.crawlora.net/api/v1)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires CRAWLORA_API_KEY and returns public YouTube data from Crawlora endpoints.]\n\n## Skill Version(s):\n\n1.0.15 (source: server evidence release.version)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.14: 5 files, 6895 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (3827b), skill-card.md (2332b), SKILL.md (3573b), _meta.json (136b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1789042727111\n}\n\nFile v1.0.14:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.14:skill-card.md\n\n## Description:\n\nPulls structured YouTube data - video and channel details, transcripts/captions, comments, playlists, and search - via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, developers, and research agents use this skill to retrieve public YouTube transcripts, captions, metadata, comments, playlists, channel data, and search results through Crawlora for summarization, sentiment analysis, channel digests, and research workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Requested YouTube URLs, IDs, search terms, and public-data lookups are sent to Crawlora.\n\nMitigation: Use the skill only for lookups you are comfortable disclosing to Crawlora and avoid sensitive or confidential research targets.\n\nRisk: The skill requires a Crawlora API key.\n\nMitigation: Keep the key in the CRAWLORA_API_KEY environment variable and do not hardcode, commit, or pass it in command-line arguments.\n\nRisk: Some videos may not expose transcripts or captions.\n\nMitigation: Check the transcript languages endpoint before requesting a specific language and handle empty transcript responses.\n\n## Reference(s):\n\n- [Crawlora publisher profile](https://clawhub.ai/user/crawlora-org)\n- [ClawHub skill page](https://clawhub.ai/crawlora-org/skills/youtube-research)\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora API](https://api.crawlora.net/api/v1)\n- [Crawlora](https://crawlora.net)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands that return JSON from the Crawlora API]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a CRAWLORA_API_KEY environment variable and sends requested YouTube lookups to Crawlora.]\n\n## Skill Version(s):\n\n1.0.14 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.13: 5 files, 6675 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (3502b), skill-card.md (2156b), SKILL.md (3606b), _meta.json (136b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- All requests: `x-api-key: $CRAWLORA_API_KEY` against\n  `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nRaw `curl` fallback:\n\n```sh\ncurl -fsS -H \"x-api-key: $CRAWLORA_API_KEY\" \\\n  \"https://api.crawlora.net/api/v1/youtube/transcript/dQw4w9WgXcQ\" | jq '.'\n```\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.13:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.13\",\n  \"publishedAt\": 1789042164317\n}\n\nFile v1.0.13:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.13:skill-card.md\n\n## Description:\n\nPulls structured YouTube data, including video and channel details, transcripts and captions, comments, playlists, and search results, via the Crawlora API as clean JSON.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and research agents use this skill to retrieve public YouTube transcripts, captions, comments, channel information, playlists, video metadata, and search results for summarization, sentiment analysis, channel digests, and research workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Authenticated Crawlora requests can spend API quota and may expose sensitive research targets or personal data in query terms.\n\nMitigation: Use a Crawlora API key with acceptable quota exposure, avoid sensitive YouTube queries, and review requests before execution.\n\nRisk: The helper can send broader authenticated Crawlora requests than the documented read-only YouTube endpoints require.\n\nMitigation: Prefer documented GET endpoints and tighten the helper to reject POST and enforce exact route shapes before broader deployment.\n\n## Reference(s):\n\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n- [Crawlora API base](https://api.crawlora.net/api/v1)\n- [ClawHub skill page](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [API Calls, Shell commands, Code, Configuration, Guidance, JSON]\n\n**Output Format:** [Markdown guidance with shell commands and JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses CRAWLORA_API_KEY and returns public YouTube data from documented Crawlora endpoints.]\n\n## Skill Version(s):\n\n1.0.13 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.12: 5 files, 6565 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (3202b), skill-card.md (2181b), SKILL.md (3606b), _meta.json (136b)\n\nFile v1.0.12:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- All requests: `x-api-key: $CRAWLORA_API_KEY` against\n  `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nRaw `curl` fallback:\n\n```sh\ncurl -fsS -H \"x-api-key: $CRAWLORA_API_KEY\" \\\n  \"https://api.crawlora.net/api/v1/youtube/transcript/dQw4w9WgXcQ\" | jq '.'\n```\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.12:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.12\",\n  \"publishedAt\": 1789041415522\n}\n\nFile v1.0.12:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.12:skill-card.md\n\n## Description:\n\nPulls structured YouTube data, including video and channel details, transcripts, captions, comments, playlists, and search results, through the Crawlora API as clean JSON.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and agents use this skill to retrieve public YouTube transcripts, captions, metadata, comments, playlists, channel details, and search results for summaries, sentiment review, research workflows, and channel digests.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YouTube identifiers, channel handles, search terms, and the Crawlora API key are sent to Crawlora's service.\n\nMitigation: Keep CRAWLORA_API_KEY in an environment variable or secret manager, avoid logging it, and review Crawlora's terms and privacy posture for the intended use case.\n\nRisk: The skill works with public YouTube data and may return empty or incomplete transcript data when captions are unavailable.\n\nMitigation: Respect YouTube's terms, check available transcript languages before relying on transcript output, and handle empty transcript responses in downstream workflows.\n\n## Reference(s):\n\n- [Endpoint Reference](artifact/reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n- [Crawlora API Base](https://api.crawlora.net/api/v1)\n- [ClawHub Skill Page](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [Shell commands, Configuration, Guidance, JSON]\n\n**Output Format:** [Markdown guidance with shell command examples and JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires CRAWLORA_API_KEY and sends requests to Crawlora's YouTube API endpoints.]\n\n## Skill Version(s):\n\n1.0.12 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.11: 5 files, 6478 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (3154b), skill-card.md (1939b), SKILL.md (3606b), _meta.json (136b)\n\nFile v1.0.11:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- All requests: `x-api-key: $CRAWLORA_API_KEY` against\n  `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nRaw `curl` fallback:\n\n```sh\ncurl -fsS -H \"x-api-key: $CRAWLORA_API_KEY\" \\\n  \"https://api.crawlora.net/api/v1/youtube/transcript/dQw4w9WgXcQ\" | jq '.'\n```\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.11:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.11\",\n  \"publishedAt\": 1789040702299\n}\n\nFile v1.0.11:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.11:skill-card.md\n\n## Description:\n\nPulls structured YouTube video, channel, transcript, caption, comment, playlist, and search data through the Crawlora API as JSON.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, researchers, and analysts use this skill to retrieve structured public YouTube data for summaries, sentiment reviews, channel digests, metadata checks, and search workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: YouTube URLs, IDs, channel identifiers, search terms, and pagination or request parameters are sent to Crawlora.\n\nMitigation: Use the skill only when third-party disclosure to Crawlora is acceptable, and avoid confidential research targets unless that disclosure has been approved.\n\nRisk: The Crawlora API key could be exposed if pasted into prompts, query parameters, logs, or committed files.\n\nMitigation: Keep CRAWLORA_API_KEY in the environment and do not hardcode or share it.\n\n## Reference(s):\n\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n- [ClawHub skill page](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown with shell commands and JSON-oriented API guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Calls return Crawlora API responses as JSON or transcript text depending on endpoint parameters.]\n\n## Skill Version(s):\n\n1.0.11 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.10: 5 files, 6085 bytes\n\nFiles: reference/endpoints.md (6309b), scripts/crawlora.sh (2005b), skill-card.md (2061b), SKILL.md (3580b), _meta.json (136b)\n\nFile v1.0.10:SKILL.md\n\n---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- `export CRAWLORA_API_KEY=sk_your_key_here`\n- All requests: `x-api-key: $CRAWLORA_API_KEY` against\n  `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'\n```\n\nRaw `curl` fallback:\n\n```sh\ncurl -fsS -H \"x-api-key: $CRAWLORA_API_KEY\" \\\n  \"https://api.crawlora.net/api/v1/youtube/transcript/dQw4w9WgXcQ\" | jq '.'\n```\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every YouTube endpoint\nthis skill uses (method, path, params, description).\n\n## Examples\n\n- **Summarize a video:** extract the id from the URL → `/youtube/transcript/{id}`\n  → concatenate transcript segments → summarize.\n- **Comment sentiment:** `/youtube/comments/{id}` → bucket comments by sentiment\n  and surface common themes.\n- **Channel digest:** `/youtube/channel/{id}/videos` → list recent uploads with\n  view counts and publish dates.\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public YouTube pages; respect YouTube's terms.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- Not every video has captions; check `/youtube/transcript/{id}/languages` when a\n  transcript request returns empty.\n\nFile v1.0.10:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.10\",\n  \"publishedAt\": 1789024915083\n}\n\nFile v1.0.10:reference/endpoints.md\n\n# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**13 endpoints across 1 platform group(s).**\n\n## YouTube (13)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /youtube/playlist/{id}`\n- **What:** Retrieve playlist metadata and items. Returns playlist metadata, normalized video items, and an optional continuation token for pagination.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — YouTube playlist ID or full playlist URL\n\n### `youtube_profile`\n\n- **HTTP:** `GET /youtube/profile/{id}`\n- **What:** Retrieve channel profile. Returns full profile details for a YouTube channel.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, bare username, or full YouTube channel URL\n\n### `youtube_search`\n\n- **HTTP:** `GET /youtube/search`\n- **What:** Search YouTube. Returns normalized YouTube search results using YouTube's InnerTube search API. Pass `continuation_token` from a previous response to retrieve the next page. Use `q` as the primary query parameter; `search_query` is accepted as an alias.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `duration` (string, optional) — Filter by duration; `features` (string, optional) — Comma-separated feature filters; `params` (string, optional) — Raw protobuf-encoded search filter (base64); `q` (string, optional) — Search query; `search_query` (string, optional) — Alias for q; `sort_by` (string, optional) — Sort results; `type` (string, optional) — Filter by type; `upload_date` (string, optional) — Filter by upload date\n\n### `youtube_tag`\n\n- **HTTP:** `GET /youtube/tag/{tag}`\n- **What:** Retrieve YouTube videos by tag. Returns normalized videos from the public YouTube hashtag page for the supplied tag. Set `type=shorts` to use the Shorts tab, or pass `continuation_token` from a previous response to fetch the next page.\n- **Params:** `continuation_token` (string, optional) — Continuation token for pagination, first page if empty; `tag` (string, **required**) — Tag to filter videos; `type` (string, optional) — Result tab to load\n\n### `youtube_transcript`\n\n- **HTTP:** `GET /youtube/transcript/{id}`\n- **What:** Retrieve transcript for a YouTube video. Returns transcript segments for a YouTube video using YouTube's native player captions. Set `format=text`, `format=srt`, or `format=vtt` to receive plain-text output instead of the standard response envelope.\n- **Params:** `format` (string, optional) — Response format; `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Preferred transcript language; `timestamps` (boolean, optional) — Include timestamps in the JSON response; `translate_to` (string, optional) — Translate transcript to this language code\n\n### `youtube_transcript_languages`\n\n- **HTTP:** `GET /youtube/transcript/{id}/languages`\n- **What:** List transcript languages for a YouTube video. Returns the transcript languages exposed by YouTube for a specific video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_video`\n\n- **HTTP:** `GET /youtube/video/{id}`\n- **What:** Retrieve video metadata & captions. Returns title, description, stats, and captions for a YouTube video ID.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-char code)\n\nFile v1.0.10:skill-card.md\n\n## Description:\n\nPulls structured YouTube data - video and channel details, transcripts/captions, comments, playlists, and search - via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, researchers, and external agents use this skill to retrieve public YouTube transcripts, captions, comments, channel and playlist data, video metadata, and search results through Crawlora for summaries, sentiment analysis, channel digests, and research workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill is presented as YouTube-only, but its helper can call generic Crawlora API paths with the user's API key.\n\nMitigation: Review helper commands before execution and prefer a release whose helper rejects non-YouTube paths such as Amazon or Google endpoints.\n\nRisk: Use requires giving the skill a Crawlora API key and network access.\n\nMitigation: Store the key only in CRAWLORA_API_KEY, do not hardcode or commit it, and install only when this access level is acceptable.\n\n## Reference(s):\n\n- [YouTube endpoint reference](reference/endpoints.md)\n- [Crawlora API service](https://crawlora.net)\n- [ClawHub skill listing](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, JSON]\n\n**Output Format:** [Markdown guidance with shell commands and JSON API responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires CRAWLORA_API_KEY and network access to the Crawlora API.]\n\n## Skill Version(s):\n\n1.0.10 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: youtube-research Owner: crawlora-org Summary: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results. Tags: latest:1.0.19 Version history: v1.0.19 | 2026-10-06","codeSnippets":[],"executableExamples":[{"language":"sh","snippet":"# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'"},{"language":"sh","snippet":"# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'"},{"language":"sh","snippet":"# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'"},{"language":"sh","snippet":"# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'"},{"language":"sh","snippet":"# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'"},{"language":"sh","snippet":"# Transcript for a video id (GET):\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ | jq '.'\n\n# Video metadata + comments:\nscripts/crawlora.sh /youtube/video/dQw4w9WgXcQ | jq '.data'\nscripts/crawlora.sh /youtube/comments/dQw4w9WgXcQ | jq '.data'\n\n# Search:\nscripts/crawlora.sh /youtube/search q=\"web scraping tutorial\" | jq '.'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: youtube-research\ndescription: Pulls structured YouTube data — video and channel details, transcripts/captions, comments, playlists, and search — via the Crawlora API as clean JSON, with no yt-dlp or HTML scraping. Use when the user provides a YouTube URL or asks for a transcript, comments, channel/video metadata, or video search results.\n---\n\n# YouTube research\n\nResolve YouTube videos and channels, and pull transcripts, comments, playlists,\nand search results as normalized JSON from the Crawlora API — no `yt-dlp`, no\nbrowser, no scraping.\n\n## When to use this skill\n\n- The user pastes a YouTube URL and wants its transcript, summary, or stats.\n- \"Get the comments on this video\" / \"what are people saying?\"\n- \"List this channel's recent videos / shorts / playlists.\"\n- \"Search YouTube for …\" or \"what videos exist about …\".\n- Building a transcript-based summary, sentiment, or research pipeline.\n- Comparing a bounded set of videos with timestamped transcript evidence.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\n1. **Resolve the id.** A YouTube watch URL `https://www.youtube.com/watch?v=<ID>`\n   (or `https://youtu.be/<ID>`) gives the **video id**; channel URLs give a\n   **channel id**. Extract the id before calling.\n2. **Transcript:** `/youtube/transcript/{id}` (use\n   `/youtube/transcript/{id}/languages` first if you need a specific language).\n3. **Metadata / comments:** `/youtube/video/{id}`, `/youtube/comments/{id}`.\n4. **Channel:** `/youtube/channel/{id}/videos`, `/channel/{id}/shorts`,\n   `/channel/{id}/playlists`, `/youtube/profile/{id}`.\n5. **Discovery:** `/youtube/search?q=...` to find videos by keyword.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Transcript-backed topic research\n\nFor a topic brief, search first, deduplicate by video ID, and choose a bounded\nsample that reflects the requested date, language, and video types. Discover\navailable transcript languages before fetching captions. Request JSON with\ntimestamps for evidence extraction; tie each theme or claim to the actual\ncaption segment and video URL. A caption or translation may mishear speech and\ndoes not independently verify factual claims. Report unavailable transcripts\nand keep search rank, view counts, and comment samples separate from demand.\n\nFor a wider map of topic and format coverage across videos or channels, use\nyoutube-content-gap-analysis when installed.\n\n~~~sh\nscripts/crawlora.sh /youtube/search q=\"home energy storage\" type=video sort_by=relevance\nscripts/crawlora.sh /youtube/transcript/dQw4w9WgXcQ/languages\nscripts/crawlora.sh /y"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"youtube-research\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1791252299998\n}"},{"path":"reference/endpoints.md","content":"# youtube-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**14 endpoints across 1 platform group(s).**\n\n## YouTube (14)\n\n### `youtube_captions`\n\n- **HTTP:** `GET /youtube/captions/{id}`\n- **What:** Retrieve auto-generated or human captions. Returns the caption cues for a specific YouTube video.\n- **Params:** `id` (string, **required**) — YouTube video ID (11-character code); `lang` (string, optional) — Caption language code (ISO 639-1), defaults to **en**\n\n### `youtube_channel_playlists`\n\n- **HTTP:** `GET /youtube/channel/{id}/playlists`\n- **What:** Retrieve the playlists tab for a YouTube channel. Returns normalized playlist items from a channel's Playlists tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_search`\n\n- **HTTP:** `GET /youtube/channel/{id}/search`\n- **What:** Search within a YouTube channel. Returns normalized video search items scoped to a specific channel, including the resolved top-level `query`.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL; `q` (string, **required**) — Search query\n\n### `youtube_channel_shorts`\n\n- **HTTP:** `GET /youtube/channel/{id}/shorts`\n- **What:** Retrieve the shorts tab for a YouTube channel. Returns normalized short-form video entries from a channel's Shorts tab.\n- **Params:** `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_channel_videos`\n\n- **HTTP:** `GET /youtube/channel/{id}/videos`\n- **What:** Retrieve the videos tab for a YouTube channel. Returns normalized video items from a channel's Videos tab and an optional continuation token.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request; `id` (string, **required**) — Channel ID, @handle, /c path, /user path, or full YouTube channel URL\n\n### `youtube_comments`\n\n- **HTTP:** `GET /youtube/comments/{id}`\n- **What:** Retrieve video comments (top-level & replies). Returns a page of comments for a specific YouTube video.\n- **Params:** `continuation_token` (string, optional) — Pagination token returned by a previous request, first page if empty; `id` (string, **required**) — YouTube video ID (11-character code)\n\n### `youtube_playlist`\n\n- **HTTP:** `GET /you"},{"path":"skill-card.md","content":"## Description:\n\nRetrieves YouTube video and channel details, transcripts, comments, playlists, and search results through the Crawlora API for research and summaries.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nResearchers, developers, and other users can collect public YouTube transcripts, comments, video and channel details, and search results to prepare evidence-backed summaries and comparisons.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Requested YouTube lookups and the Crawlora API key are sent to Crawlora.\n\nMitigation: Use the skill only if this disclosure is acceptable; keep the key in CRAWLORA_API_KEY and never hardcode it.\n\nRisk: Public YouTube transcripts and comments may be missing, incomplete, or inaccurate.\n\nMitigation: Check transcript availability and verify consequential claims against the source video.\n\n## Reference(s):\n\n- [YouTube endpoint reference](reference/endpoints.md)\n- [Crawlora](https://crawlora.net)\n- [YouTube Research on ClawHub](https://clawhub.ai/crawlora-org/skills/youtube-research)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands]\n\n**Output Format:** [Markdown summaries and structured JSON results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include video URLs and timestamped transcript evidence; availability varies by video.]\n\n## Skill Version(s):\n\n1.0.19 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1517,"uniquenessScore":40,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:28:57.632Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:28:57.632Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:41:12.702Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}