Renderizado do repositório de origem, preservando títulos, exemplos, código, tabelas, links e imagens.
Finding YouTube Sponsorship Candidates
Discovers YouTube channels that are good fits for brand integrations. Channels with existing sponsor history are the most efficient outreach targets — they've already proven willingness to accept sponsorships.
Prerequisites
APIFY_TOKENenvironment 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: Search YouTube for niche channel content
- [ ] Step 2: Collect channel handles from results
- [ ] Step 3: Enrich channel data
- [ ] Step 4: Score sponsorship fit
- [ ] Step 5: Deliver ranked outreach listStep 1: Search for Niche Content
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-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 jsonAPIFY_TOKENmust be set in environment or.envfile.
If Apify MCP is available:
Tool: apify:run-actor
Actor: "apidojo~youtube-scraper"
Input:
{
"searchKeywords": ["best [NICHE] tools", "[NICHE] review", "[NICHE] for beginners", "top [NICHE]"],
"maxResults": 50,
"type": "video"
}REST API fallback:
curl -X POST "https://api.apify.com/v2/acts/apidojo~youtube-scraper/runs?token=$APIFY_TOKEN" -H "Content-Type: application/json" -d '{
"searchKeywords": ["best personal finance tools", "personal finance review"],
"maxResults": 50,
"type": "video"
}'Collect unique channelId and channelName values.
Step 2: Enrich Channel Data
If Apify MCP is available:
Tool: apify:run-actor
Actor: "apidojo~youtube-scraper"
Input:
{
"startUrls": [{"url": "https://www.youtube.com/channel/[CHANNEL_ID]"}],
"maxResults": 10,
"type": "video"
}Step 3: Score Sponsorship Fit
view_ratio = avg_views / subscriber_count
sponsorship_score = (view_ratio > 0.1 ? 1 : view_ratio / 0.1) * 0.30
+ (subscriber_count in 10000..200000 ? 1 : 0.6) * 0.20
+ (avg_comments / avg_views > 0.005 ? 1 : (avg_comments/avg_views)/0.005) * 0.20
+ (has_sponsor_history ? 1 : 0) * 0.30Sponsorship signal detection (in last 10 video titles/descriptions):
sponsor_count = count(videos where description contains ["sponsored by", "use code", "thanks to", "partner"])
has_sponsor_history = sponsor_count >= 1
repeat_sponsor = sponsor_count >= 3Tier: TIER A ≥ 0.70 | TIER B 0.45–0.69 | TIER C < 0.45
Step 4: Edge Cases
- View count spike from one viral video: Use median views from last 10 videos, not mean; flag channels where
max_views > 10× median - Channel in adjacent but not target niche: Score niche alignment — percentage of last 20 videos in target niche
- Subscriber count stale: YouTube counts lag; use
avg_viewsas the true reach proxy - No description available: Skip sponsorship history check; score at 0.5 for that component
Output Format
# YouTube Sponsorship Candidates: [NICHE]
Channels evaluated: [N] | TIER A: [N] | TIER B: [N] | Date: [DATE]
## TIER A — Strong Sponsorship Candidates
| Channel | Subscribers | Avg Views | View Ratio | Sponsor History | Niche Fit | Score |
|---------|------------|-----------|------------|-----------------|-----------|-------|
| [name] | [N] | [N] | [X.XX] | [Yes/No/Repeat] | [%] | [0.XX] |
## TIER B — Secondary Candidates
| Channel | Subscribers | Avg Views | View Ratio | Last Sponsor |
|---------|------------|-----------|------------|-------------|
## Sponsorship Landscape in [NICHE]
- Channels already running sponsors: [N]/[N] evaluated ([X%])
- Most common sponsor in category: [brand name] (seen on [N] channels)
- Typical viewer demographic signal (from video titles): [description]Troubleshooting
Results are all mega-channels (> 1M subs): Narrow the search query with "beginner" or "indie" qualifiers; or filter post-scrape by subscriber count. Niche too broad: Narrow to a sub-niche (e.g. "personal finance" → "fire movement", "crypto" → "Bitcoin long-term investing"). Can't detect sponsor history from descriptions: Sponsor language is sometimes hidden in video captions (not descriptions). This is a known limitation — supplement with manual check of top 5 candidates.

