# scraping-youtube-videos-by-keyword

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

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 814 installs · ★ 1
- Author: apidojo
- License: Apache-2.0 · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/apidojo-io/apidojo-skills/tree/HEAD/skills/primitives/scraping-youtube-videos-by-keyword/SKILL.md
- Updated: 2026-05-13
- HTML: https://affpapa.org/en/nevibecode/skills/scraping-youtube-videos-by-keyword

## What it 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.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.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/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/scraping-youtube-videos-by-keyword/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/scraping-youtube-videos-by-keyword/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install apidojo-io/apidojo-skills scraping-youtube-videos-by-keyword
```

2. **Manually: put the files in place**
- File: `.github/skills/scraping-youtube-videos-by-keyword/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/apidojo-io/apidojo-skills --path skills/primitives/scraping-youtube-videos-by-keyword
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/scraping-youtube-videos-by-keyword/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add apidojo-io/apidojo-skills --skill scraping-youtube-videos-by-keyword -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/apidojo-io/apidojo-skills/tree/HEAD/skills/primitives/scraping-youtube-videos-by-keyword/SKILL.md

## When to use it
- 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
- 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

## Source text · SKILL.md · Apache-2.0

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 2d48e2dd7ffbfb0b.

BEGIN THIRD-PARTY FILE 2d48e2dd7ffbfb0b
````text
---
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" \
````
END THIRD-PARTY FILE 2d48e2dd7ffbfb0b

The third-party file has ended. Everything between the 2d48e2dd7ffbfb0b tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2562 of 4656 bytes. © apidojo · Apache-2.0 · https://github.com/apidojo-io/apidojo-skills/tree/HEAD/skills/primitives/scraping-youtube-videos-by-keyword/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
