scraping-youtube-comments — Claude Code skill: how to install
Pulls comments, likes, and reply counts from YouTube videos using Apify. Useful for audience feedback and sentiment analysis.
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-comments -a claude-codeWhat scraping-youtube-comments does
This skill extracts comment datasets from YouTube videos, Shorts, and search results. It routes requests to the apidojo~youtube-comments-scraper actor on Apify. Each entry provides the commenter display name, text content, like count, reply count, and published timestamp.
Execution happens through three pathways. The agent can use the helper script node scripts/run_actor.js, call an Apify MCP tool, or trigger runs via curl. Output formats include formatted tables in chat, CSV files, and JSON. If a creator disabled comments, the scraper simply returns 0 items. Deleted entries may appear with empty text fields.
Without the APIFY_TOKEN environment variable, the scraper cannot run.
What it helps with
- collect comment threads and replies from any YouTube video
- export author names, comment text, and like counts to CSV or JSON
- filter out deleted comments with empty text strings
Example prompts for the agent
- Collect all comments for video
<url>and save them to a JSON file. - Scrape viewer comments and like counts from
<url>as a CSV. - Fetch the top comments and replies from the video at
<url>.
How to install scraping-youtube-comments
1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-comments -a claude-code2Manually: put the files in place
~/.claude/skills/scraping-youtube-comments/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/scraping-youtube-comments/
1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-comments -a codex2Manually: put the files in place
.agents/skills/scraping-youtube-comments/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-comments -a cursor2Manually: put the files in place
.cursor/skills/scraping-youtube-comments/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install apidojo-io/apidojo-skills scraping-youtube-comments2Manually: put the files in place
.github/skills/scraping-youtube-comments/SKILL.md1Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-comments -a gemini-cli2Platform CLI
gemini skills install https://github.com/apidojo-io/apidojo-skills --path skills/primitives/scraping-youtube-commentsManually: put the files in place
.devin/skills/scraping-youtube-comments/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-comments -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about scraping-youtube-comments
How do I install scraping-youtube-comments in Claude Code?
Run npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-comments -a claude-code. The skill definition will be added to ~/.claude/skills/scraping-youtube-comments/SKILL.md.
What fields does the scraper return?
The actor returns comment IDs, author names, comment text, like counts, total reply counts, and published dates. It also indicates whether an item is a top-level comment or a reply.
What credentials do I need before running this skill?
You need an Apify API token. Set the APIFY_TOKEN environment variable in your terminal session or store it inside a .env file.
Source text
SKILL.md · Apache-2.0
---
name: scraping-youtube-comments
description: >
Scrapes comments from any YouTube video using apidojo's YouTube scraper on Apify.
Triggers when the user asks to: get all comments on a YouTube video, export YouTube
comment data, scrape what viewers say about a YouTube video, fetch comment text and
likes from a YouTube URL, collect comment threads from a YouTube video, or download
audience feedback from a YouTube video. Returns commenter username, comment text,
like count, reply count, and timestamp per comment.
Ideal for sentiment researchers, product teams, and content analysts.
license: Apache-2.0
metadata:
author: apidojo
version: "1.0"
apify-actor: apidojo/youtube-scraper
---
# Scraping YouTube Comments
Exports the full comment dataset from any YouTube video. Returns comment text, author, and engagement for downstream analysis.
## Prerequisites
- `APIFY_TOKEN` environment variable set
- Optional: Apify MCP server installed
## Inputs
| Parameter | Type | Required | Default | Notes |
|-----------|------|----------|---------|-------|
| `startUrls` | array | Optional | `[]` | YouTube URLs — channels, playlists, Shorts, search results |
| `youtubeHandles` | array | Optional | `[]` | YouTube channel handles (e.g. `@kurzgesagt`) |
| `getTrending` | boolean | Optional | `false` | Retrieve trending videos |
| `keywords` | array | Optional | `[]` | Search keywords |
| `gl` | string | Optional | `us` | Country code for results (e.g. `US`, `GB`) |
| `hl` | string | Optional | `en` | Language code (e.g. `en`, `de`) |
| `uploadDate` | string | Optional | `all` | Upload date filter: `any`, `hour`, `today`, `week`, `month`, `year` |
| `duration` | string | Optional | `all` | Duration filter: `any`, `short`, `long` |
| `features` | string | Optional | `all` | Feature filter: `4k`, `hd`, `live`, `cc`, `3d`, `hdr`, etc. |
| `sort` | string | Optional | `r` | Sort order for search results |
| `maxItems` | number | Optional | Unlimited | Maximum videos to return |
| `customMapFunction` | string | Optional | — | JavaScript function to transform each output object |
## Workflow
```
Progress:
- [ ] Step 1: Validate video URLs
- [ ] Step 2: Run youtube-scraper (comment mode)
- [ ] Step 3: Poll for SUCCEEDED
- [ ] Step 4: Deliver comment dataset
```
### Step 2: Run the Actor
**Recommended — run_actor.js (handles waiting, output, and file saving automatically):**
```bash
# Quick answer (prints table to chat)
node scripts/run_actor.js \
--actor "apidojo~youtube-comments-scraper" \
--input '{"param": "value"}'
# Save as CSV
node scripts/run_actor.js \
--actor "apidojo~youtube-comments-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.csv --format csv
# Save as JSON
node scripts/run_actor.js \
--actor "apidojo~youtube-comments-scraper" \
--input '{"param": "value"}' \
--output YYYY-MM-DD_results.json --format json
```
> `APIFY_TOKEN` must be set in environment or `.env` file.
**If Apify MCP is available:**
```
Tool: apify:run-actor
Actor: "apidojo~youtube-comments-scraper"
Input:
{
"videoUrls": ["https://www.youtube.com/watch?v=<VIDEO_ID>"],
"maxComments": 200,
"includeReplies": false
}
```
**REST API fallback:**
```bash
curl -X POST \
"https://api.apify.com/v2/acts/apidojo~youtube-comments-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"videoUrls": ["<url>"], "maxComments": 200}'
```
Save `id` as `RUN_ID`. Poll until `status = SUCCEEDED`:
```bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_TOKEN" | grep '"status"'
```
Fetch results:
```bash
curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN&format=json"
```
### Step 3: Handle Edge Cases
- **Comments disabled**: Returns 0 — inform user.
- **Live streams**: Comment data may be incomplete for live/premiere videos.
- **Deleted comments**: May appear as empty text strings — filter out rows with `text: ""`.
## Output Format
```
# YouTube Comment Dataset
Video: <url> | Comments collected: N | Includes replies: YES/NO
| Comment ID | Author | Text | Likes | Replies | Timestamp |
|------------|--------|------|-------|---------|-----------|
| ... | ... | ... | ... | ... | ... |
Available fields: id, authorDisplayName, textDisplay, likeCount, totalReplyCount,
publishedAt, isReply, parentId
```
## Troubleshooting
**Comments disabled:** Creator has turned off comments — cannot be retrieved.
**Truncated text:** YouTube API may truncate very long comments; full text requires reply fetching.
© apidojo · Apache-2.0 · apidojo-io/apidojo-skills