mcpField
S
scraping-youtube-channel-data

scraping-youtube-channel-data

github.com/apidojo-ioData & databases1751 installsUpdated 24w ago
Repository

About scraping-youtube-channel-data

A skill for collecting channel statistics and optional video catalogs from YouTube URLs or handles. It runs the Apify YouTube scraper and returns a channel dataset, with options for search and trending results.

Key features

  1. 01Collect channel statistics
  2. 02Optionally retrieve video catalogs
  3. 03Search with keywords and filters
  4. 04Retrieve trending videos
  5. 05Save results as CSV

Use cases

  1. 01Compare subscriber and view counts across channels
  2. 02Collect a channel’s video catalog
  3. 03Find videos by keyword, date, or duration
  4. 04Retrieve trending videos for a country

MCP support

Can run the Apify scraper through the Apify MCP server’s `apify:run-actor` tool when available; it also documents a script and REST API route.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/apidojo-io/apidojo-skills --skill scraping-youtube-channel-data

After installing, type/scraping-youtube-channel-datain Claude Code to confirm it loaded.

Details

From the project README

Scraping YouTube Channel Data

Exports channel-level statistics and optional video catalog for any YouTube channel URL or handle.

Prerequisites

  • APIFY_TOKEN environment variable set
  • Optional: Apify MCP server installed

Inputs

ParameterTypeRequiredDefaultNotes
startUrlsarrayOptional[]YouTube URLs — channels, playlists, Shorts, search results
youtubeHandlesarrayOptional[]YouTube channel handles (e.g. @kurzgesagt)
getTrendingbooleanOptionalfalseRetrieve trending videos
keywordsarrayOptional[]Search keywords
glstringOptionalusCountry code for results (e.g. US, GB)
hlstringOptionalenLanguage code (e.g. en, de)
uploadDatestringOptionalallUpload date filter: any, hour, today, week, month, year
durationstringOptionalallDuration filter: any, short, long
featuresstringOptionalallFeature filter: 4k, hd, live, cc, 3d, hdr, etc.
sortstringOptionalrSort order for search results
maxItemsnumberOptionalUnlimitedMaximum videos to return
customMapFunctionstringOptional—JavaScript function to transform each output object

Workflow

Progress:
- [ ] Step 1: Normalize channel URLs
- [ ] Step 2: Run youtube-scraper
- [ ] Step 3: Poll for SUCCEEDED
- [ ] Step 4: Deliver channel dataset
Step 2: Run the Actor

Recommended — run_actor.js (handles waiting, output, and file saving automatically):

# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~youtube-channel-scraper" \
  --input '{"param": "value"}'

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

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~youtube-channel-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-channel-scraper"
Input:
{
  "channelUrls": ["https://www.youtube.com/@channelhandle"],
  "maxVideos": 30
}

REST API fallback:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~youtube-channel-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channelUrls": ["https://www.youtube.com/@channelhandle"], "maxVideos": 30}'

Save id as RUN_ID. Poll until status = SUCCEEDED:

curl "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_TOKEN" | grep '"status"'

Fetch results:

curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN&format=json"
Step 3: Handle Edge Cases
  • Channel URL not found: Handle may have changed — verify on YouTube.
  • Hidden subscriber count: Some channels hide subscriber counts; field returns null — flag these.
  • Age-restricted channel: May return limited metadata.

Output Format

# YouTube Channel Dataset
Channels requested: N | Returned: N

| Channel | Subscribers | Total Views | Videos | Joined | Country | Recent Avg Views |
|---------|-------------|-------------|--------|--------|---------|-----------------|
| ...     | ...         | ...         | ...    | ...    | ...     | ...             |

Available fields: channelName, channelId, subscriberCount, viewCount, videoCount,
country, joinedDate, description, channelUrl, recentVideos[]

Troubleshooting

Hidden subscriber count: YouTube allows channels to hide this — return null and note in output. Large video catalogs: Set maxVideos: 100 max per run to avoid timeouts.

Comments

Markdown supported