Youtube Channel Scraper
Pricing
from $14.00 / 1,000 api requests
Youtube Channel Scraper
Discover channels by niche keywords, category, and region. Get contact information (emails, social media), engagement metrics, and partnership potential scores. Perfect for brands seeking influencer collaborations.
Pricing
from $14.00 / 1,000 api requests
Rating
0.0
(0)
Developer
Andrey Afanasenko
Maintained by CommunityActor stats
1
Bookmarked
42
Total users
6
Monthly active users
7 days ago
Last modified
Categories
Share
YouTube Channel Author Finder
Find YouTube creators for partnerships — discover channels by niche, fetch contact emails and social handles, score partnership potential, and export everything as CSV / Excel / JSON in one run. From $0.014 per API request with a single primary event.
YouTube's official Data API requires OAuth, has strict daily quotas, and doesn't expose contact emails or partnership scoring at all. This actor reads the same channels any browser visitor sees, finds public contact data, and produces a partnership score (0–100) so outreach teams can move from list-building to first email in one run.
🎯 What it does
The actor finds YouTube channel authors and their videos, scores them for partnerships, and pulls public contact data so outreach teams can move from list-building to first email in one run. Three operation modes share the same output dataset and pricing:
| Mode | Input | Output | Use when |
|---|---|---|---|
channel | channelSearchQuery (niche keywords) or channelHandles: ["@fireship", ...] | channelSummary rows — one per channel, with aggregates + contact data + partnership score | You're looking for partnership / outreach leads. The default mode. |
search | searchQuery (keywords) or videoLinks: [...] | video rows — one per matched video, with stats and channel metadata | You want to find videos by topic, not full channels. |
playlist | playlistId or playlistChannelHandle (uses uploads playlist) + optional playlistDateRange | video rows — one per playlist item | You want to scan a curated list of videos or all uploads from one creator. |
channel mode is the most expensive (~$0.50 per fully analyzed channel ≈ 25 events) but produces the richest record. search and playlist cost ~$0.02 per video unless includeStatistics: true.
Output is a single Apify dataset where the recordType column distinguishes layouts. Numeric stats may come back as raw numbers, formatted display strings ("1.2M"), or the sentinel "N/A" when YouTube hides the count.
📦 Output sample
A real channelSummary row from a channel-mode run (truncated to ~30 keys for readability — every column is documented in the .actor/dataset_schema.json):
{"recordType": "channelSummary","mode": "channel","status": "analyzed","channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw","channelHandle": "@GoogleDevelopers","channelTitle": "Google for Developers","channelUrl": "https://www.youtube.com/@GoogleDevelopers","subscriberCount": "2,560,000","averageViews": "18,433","averageLikes": "942","averageComments": 84,"averageEngagementRate": "5.12%","partnershipPotential": 85,"analyzedVideos": 20,"requestedMaxVideos": 20,"engagement": {"videosWithMetrics": 20,"totalViews": 368652,"totalLikes": 18848,"totalComments": 1682},"contactEmail": "devrel@google.com","contactEmails": "devrel@google.com, partnerships@google.com","contactSocials": [{"platform": "Twitter/X", "handle": "@googledevs"}],"contactSocialsTwitter": [{"platform": "twitter/x", "handle": "@googledevs", "url": "https://twitter.com/googledevs"}],"bestContactMethod": "email","channelCountry": "US","discovery": {"source": "search", "searchQuery": "coding tutorials", "matchedTags": ["programming"]},"thumbnailPreview": "https://yt3.googleusercontent.com/ytc/AIdro_xyz=s176","scrapedAt": "2025-11-16T17:15:00.000Z"}
A video row from a search-mode run:
{"recordType": "video","mode": "search","videoId": "3rrpfW0bEdc","title": "Apify Tutorial For Beginners","channelTitle": "Speak About Digital","channelUrl": "https://www.youtube.com/@speakaboutdigital","videoUrl": "https://www.youtube.com/watch?v=3rrpfW0bEdc","views": "12,403","likeCount": 320,"commentCount": 18,"engagementRate": "2.73%","publishedAt": "2025-02-01T00:00:00.000Z","thumbnailUrl": "https://i.ytimg.com/vi/3rrpfW0bEdc/hq720.jpg","scrapedAt": "2025-11-15T14:00:00Z"}
⚡ Quick start
- Pick a mode in the Apify Console UI:
channel(default),search, orplaylist. - Paste a minimal input. Cheapest first try — search mode, one result, $1 budget:
{"mode": "search","searchQuery": "javascript tutorial","maxResults": 1,"includeStatistics": true,"budget": 1}
- Click Start → watch the Log tab for budget tracking.
- Open the Output tab when the run completes → preview as a table, switch to JSON view, or download CSV / Excel / JSON.
- Iterate: raise
maxResults/maxChannelsToAnalyzeandbudgettogether when the shape looks right.
🛠 Input
The Input tab is split into 5 sections. Highlights:
- Step 1 · Mode — the only always-required field. The other steps adapt to the mode.
- Step 2 · Mode-specific — the field that defines what to scrape (
searchQuery,playlistId,channelSearchQuery, etc.). Every required-per-mode field is labeled in its description. - Step 3 · Channel discovery (channel mode only) —
channelTags,channelSearchStrategy: "channel" | "video" | "hybrid",videoCategoryId,regionCode. - Step 4 · Quality filters —
minSubscribers,maxSubscribers,minAverageViews,minAverageLikes,minAverageComments,minAverageEngagementRate. Set every filter to0on the first run, then tighten. - Step 5 · Budget —
budget(USD cap; the actor stops at the limit). Start with $2–$5.
Channel mode
{"mode": "channel","channelSearchQuery": "coding tutorials","videoCategoryId": 27,"regionCode": "US","channelSearchStrategy": "hybrid","channelTags": ["programming", "web development"],"includeContactData": true,"maxChannelsToAnalyze": 10,"maxVideos": 25,"minSubscribers": 10000,"maxSubscribers": 1000000,"minAverageViews": 5000,"minAverageEngagementRate": 3,"budget": 5}
Search mode
{"mode": "search","searchQuery": "ai news 2025","maxResults": 50,"orderBy": "viewCount","includeStatistics": true,"includeCommentReplies": false,"budget": 2}
Playlist mode
{"mode": "playlist","playlistChannelHandle": "fireship","playlistDateRange": {"startDate": "2025-01-01", "endDate": "2025-02-01"},"maxResults": 50,"includeStatistics": true,"budget": 2}
💰 Pricing
Pay-per-event with a single primary event. One billable unit covers every API operation the actor performs (search, video details, channel stats, comments, contact-data lookup):
| Event | Trigger | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|---|
api-request | One API request to the upstream YouTube data service. All operations cost the same. | $0.020 | $0.018 | $0.016 | $0.014 | $0.014 | $0.014 |
Cost math:
channelmode ≈ ~25api-requestevents per fully analyzed channel ≈ $0.50/channel on Free, $0.35/channel on Diamond. So 10 channels → ~$5 (Free) / ~$3.50 (Diamond).searchmode ≈ 1api-requestper result withoutincludeStatistics, ~2 with it. 50 results, stats on → ~$2 (Free).playlistmode ≈ same as search.
Set budget to the USD ceiling you'd accept; the actor stops cleanly when reached.
🆓 Free vs paid
| Capability | Free plan | Paid plan |
|---|---|---|
All 3 modes (channel / search / playlist) | ✅ | ✅ |
| Contact data (emails / socials / partnership score) | ✅ | ✅ |
Comment-reply enrichment (includeCommentReplies) | ✅ | ✅ |
Cost per api-request event | $0.020 | $0.014–$0.018 (tier-dependent) |
Pricing tier is the only gate — every feature works on every plan. Higher tiers unlock cheaper unit pricing on the same api-request event.
🧪 Filter recipes
SaaS / B2B partnership leads
{"mode":"channel","channelSearchQuery":"saas startup founders","maxChannelsToAnalyze":15,"maxVideos":20,"minSubscribers":5000,"budget":4}
Micro-influencers in beauty (2k–150k subs)
{"mode":"channel","channelSearchQuery":"beauty makeup tutorial","videoCategoryId":"26","maxChannelsToAnalyze":25,"maxVideos":20,"minSubscribers":2000,"maxSubscribers":150000,"budget":6}
Top videos for a topic, sorted by views
{"mode":"search","searchQuery":"crypto trading education","maxResults":50,"orderBy":"viewCount","includeStatistics":true,"budget":2}
Recent uploads from one creator
{"mode":"playlist","playlistChannelHandle":"fireship","playlistDateRange":{"startDate":"2025-01-01","endDate":"2025-02-01"},"maxResults":50,"includeStatistics":true,"budget":1}
🔁 Resume / checkpoint
The actor checkpoints after every batch, so resurrected runs continue from where they left off without re-spending budget on already-processed items. Per-mode state lives in the run's storage/ directory and is loaded automatically when you re-run with the same input. There's nothing to configure — just hit Start again after a budget pause or transient error.
📡 Live status & storage records
Beyond the default dataset, the actor writes auxiliary records into the run's key-value store. Read any of them via the Apify API or Actor.getValue(...) from your own code:
| Record | Purpose | Format |
|---|---|---|
RUN_SUMMARY | End-of-run snapshot (mode, totals, spend, stop reason) | JSON |
processed_video_ids | Per-mode checkpoint: video IDs already fetched | JSON array |
channel_progress | Channel-mode resume token: which channels remain | JSON object |
playlist_state | Playlist-mode pagination state | JSON object |
INPUT | Raw input the actor received | JSON |
API access pattern: https://api.apify.com/v2/key-value-stores/<storeId>/records/<recordKey>.
🤖 Programmatic / API use
Start a run via REST and read the dataset:
TOKEN=YOUR_APIFY_TOKENRUN=$(curl -s -X POST "https://api.apify.com/v2/acts/afanasenko~youtube-channel-scraper/runs?token=$TOKEN" \-H 'Content-Type: application/json' \-d '{"mode":"search","searchQuery":"javascript tutorial","maxResults":5,"includeStatistics":true,"budget":1}' \| jq -r '.data.id')# Poll until finisheduntil S=$(curl -s "https://api.apify.com/v2/actor-runs/$RUN?token=$TOKEN" | jq -r '.data.status'); \[ "$S" = "SUCCEEDED" ] || [ "$S" = "FAILED" ]; do sleep 5; done# Read dataset rowsDS=$(curl -s "https://api.apify.com/v2/actor-runs/$RUN?token=$TOKEN" | jq -r '.data.defaultDatasetId')curl -s "https://api.apify.com/v2/datasets/$DS/items?clean=1&token=$TOKEN" | jq '.[0]'
MCP / agent use: the actor is exposed as a tool via the Apify MCP server (mcp.apify.com). Agents call it by name and receive every input/output column description, so prompts like "find me 10 fitness creators with at least 50k subscribers and an email I can write to" route to channel mode automatically. The dataset schema is read by the agent before it interprets the result, so post-run analysis works without manual mapping.
🏆 Partnership Score & Engagement
- Engagement rate is derived from likes + comments vs. views (where available) across analyzed videos.
- Partnership score (0–100) blends size (subscribers), engagement, and contact availability. Email / social presence boosts the score; very large channels with low engagement score lower than mid-size channels with strong engagement.
- Contact data includes primary email, socials (per platform), and best contact method (email > website > social > YouTube).
- Tuning: raise
maxVideosto 20–30 for tighter averages; useminAverageEngagementRate(e.g.3= 3 %) and a subscriber band (minSubscribers/maxSubscribers) to filter the score's inputs. - Reading the score: 80–100 = priority outreach (high engagement + contactable), 50–79 = qualified, < 50 = thin signal (often missing engagement or contact data).
❓ FAQ
- How do I get emails? Keep
includeContactData=true(default). Contact data comes from the channel's About page and an external lookup; some private channels have nothing public to find. - Why zero results? Filters too tight. Set every
min*andmax*to0, broadenchannelSearchQuery, removechannelTags, and re-run. - How do I target micro-influencers? Set
maxSubscribersto your ceiling (e.g. 150 000) andminSubscribersto your floor (e.g. 2 000). KeepmaxVideos15–25 for representative averages. - Why does
viewscome back as"N/A"? YouTube sometimes hides view counts on freshly uploaded or low-traffic videos. The actor preserves whatever YouTube reports rather than fabricating a 0. channelvs.playlist? Usechannelto discover and analyze channels for partnerships. Useplaylist(withplaylistChannelHandle) to scan one specific creator's full uploads list.- How do I resume after a budget stop or migration? Just re-run with the same input. Checkpoints skip already-processed items and continue from the last token.
- Why am I seeing
Ignored attempt to charge…in the log? Informational. The actor uses pay-per-event-compatible charging; the message appears when PPE isn't active (e.g. local runs).
🔗 Related actors
See the full set of afanasenko's Apify actors: apify.com/afanasenko.
🛟 Support & feedback
- Bugs / questions — open an issue on the actor's Apify Store page.
- Run not exiting — check the Log for budget exhaustion (the actor stops cleanly at the cap) and the
RUN_SUMMARYrecord for the stop reason. - Discord / community — share your
mode, input JSON, and the last 20 log lines for fast triage.
⚖️ Disclaimer
This actor scrapes only publicly visible YouTube data (channel pages, video pages, public playlists). It does not access private content, watch history, or anything behind a YouTube login. Use the output ethically and in compliance with YouTube's Terms of Service, your local regulations, and applicable privacy law (GDPR, CCPA, etc.) when storing or contacting the people whose details you've collected. Do not use scraped emails for unsolicited bulk outreach.