Skip to main content
skill CX Codex

scraping-youtube-videos-by-keyword — Claude Code skill

Extracts YouTube video metadata and engagement stats matching search terms via Apify. Built for research, competitor tracking, and query analysis.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a claude-code
Open on GitHub

What scraping-youtube-videos-by-keyword does

This skill queries YouTube based on search keywords, URLs, or channel handles like @kurzgesagt using Apify's apidojo/youtube-scraper actor. Returned records include the video title, channel name, view count, like count, comment count, duration, and publication date. Built-in filters allow narrowing down by country code (gl), language (hl), duration, and upload date.

Execution runs through a helper script scripts/run_actor.js, the Apify MCP tool apify:run-actor, or direct REST API calls. The Node.js script prints formatted tables directly to your terminal or dumps results to CSV and JSON files.

Without an APIFY_TOKEN environment variable set, runs fail immediately. Extremely narrow queries may return fewer than 20 results, and age-restricted videos often omit the view count field.

What it helps with

  • collect view and like metrics for a YouTube search query
  • scrape video uploads from specific channel handles
  • filter search results by upload date, duration, and country
  • export YouTube video metadata to CSV or JSON files

Example prompts for the agent

  • Scrape the top 50 YouTube videos for query 'llm evaluation' and save to CSV
  • Fetch recent long-form uploads from channel handle @kurzgesagt
  • Search YouTube for 4k videos on 'home gym setup' published this month

How to install scraping-youtube-videos-by-keyword

1Skills CLI (Vercel)

npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a claude-code

2Manually: put the files in place

~/.claude/skills/scraping-youtube-videos-by-keyword/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/scraping-youtube-videos-by-keyword/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about scraping-youtube-videos-by-keyword

How do I install scraping-youtube-videos-by-keyword in Claude Code?

Run npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a claude-code. The definition will be saved to ~/.claude/skills/scraping-youtube-videos-by-keyword/SKILL.md.

What is required before running this skill?

You need an active Apify account with the APIFY_TOKEN environment variable exported. You can run it via Node.js using scripts/run_actor.js or through an installed Apify MCP server.

Which data fields does the scraper return?

It outputs videoId, title, channelName, channelId, viewCount, likeCount, commentCount, duration, publishedAt, videoUrl, thumbnailUrl, and description.

Source text

SKILL.md · Apache-2.0
---
name: scraping-youtube-videos-by-keyword
description: >
  Scrapes YouTube videos matching any keyword or search query using apidojo's YouTube
  scraper on Apify. Triggers when the user asks to: get YouTube videos for a keyword,
  scrape YouTube search results for a topic, export YouTube video data for a query,
  fetch video metadata for a YouTube search term, collect YouTube videos about a subject,
  or download YouTube video stats by keyword. Returns video title, channel name, view
  count, like count, comment count, duration, and publish date per video.
  Ideal for content researchers, SEO analysts, and market intelligence teams.
license: Apache-2.0
metadata:
  author: apidojo
  version: "1.0"
  apify-actor: apidojo/youtube-scraper
---

# Scraping YouTube Videos by Keyword

Raw YouTube video dataset for any search query. Returns video-level metadata including engagement metrics and channel info.

## 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: Build search query
- [ ] Step 2: Run youtube-scraper
- [ ] Step 3: Poll for SUCCEEDED
- [ ] Step 4: Deliver video 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-scraper" \
  --input '{"param": "value"}'

# Save as CSV
node scripts/run_actor.js \
  --actor "apidojo~youtube-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~youtube-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-scraper"
Input:
{
  "searchKeywords": "<query>",
  "maxResults": 50,
  "sortBy": "relevance"
}
```

**REST API fallback:**
```bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchKeywords": "<query>", "maxResults": 50}'
```

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

- **< 20 results**: Query may be too narrow; broaden search term.
- **Age-restricted content in results**: These may have limited metadata — flag rows with missing `viewCount`.
- **Duplicate video IDs**: Deduplicate by `videoId`.

## Output Format

```
# YouTube Video Dataset: "<query>"
Videos collected: N | Sort: <sortBy>

| Video ID | Title | Channel | Views | Likes | Comments | Duration | Published |
|----------|-------|---------|-------|-------|----------|----------|-----------|
| ...      | ...   | ...     | ...   | ...   | ...      | ...      | ...       |

Available fields: videoId, title, channelName, channelId, viewCount, likeCount,
commentCount, duration, publishedAt, videoUrl, thumbnailUrl, description
```

## Troubleshooting

**Fewer results than requested:** YouTube search may have limited results for niche queries.
**Missing like counts:** YouTube hides dislikes but likes are still available; some videos hide all counts.

© apidojo · Apache-2.0 · apidojo-io/apidojo-skills

Similar skills

All skills for Browser and scraping →

From the same set96

scraping-tiktok-profile-data Pulls TikTok profile stats and metadata for a batch of accounts: followers, following, total likes, video count, bio. Handy when you need to vet a creator list. CX Codex +1 834installs finding-instagram-creators-by-location Finds Instagram creators who post from a given city, venue or neighborhood. Useful for geo-targeted campaigns and regional partnerships. CX Codex +1 833installs analyzing-twitter-sentiment-for-topic Gathers posts on Twitter/X via Apify and evaluates public tone for brands, events, or keywords. Generates sentiment breakdown, key recurring issues, and top posts. CX Codex +1 825installs finding-healthcare-practices-via-google-search Searches Google for clinics, dental offices, and other healthcare providers. Use it to build a location- or specialty-based prospect list. CX Codex +1 816installs tracking-youtube-trending-topics-by-niche This skill finds current YouTube trends within a niche and reports video formats, themes, views, and engagement. Use it to shape video research and ideas. CX Codex +1 813installs finding-tiktok-creators-using-trending-sounds Pulls TikTok posts made to a given track and returns the accounts behind them. Useful when you need a creator list for a brand placement. CX Codex +1 813installs building-full-social-audit-for-brand Audits brand profiles across Twitter, Instagram, TikTok, and YouTube via Apify scrapers. Computes engagement metrics and an aggregate brand health score. CX Codex +1 813installs scraping-instagram-location-content Pulls public Instagram posts tagged at one place and returns post URLs, captions, handles, likes and dates. Useful when you want to see what visitors post about a venue. CX Codex +1 810installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor