YouTube Channel Search Scraper
Pricing
from $4.00 / 1,000 channel founds
YouTube Channel Search Scraper
Search public YouTube channels by keyword. Returns handle, subscribers, verification, and optional profile enrich. Cookieless, MCP-ready.
Pricing
from $4.00 / 1,000 channel founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
Search public YouTube channels by keyword and receive one dataset row per unique channel. Each row returns channel name, handle, channel URL, subscriber text, video count, verification badge, and a search snippet. Optional About-page enrich adds description, total views, joined date, country, and public links. Cookieless HTTP, MCP-ready.
This Actor is built for lead-gen and creator-research workflows that start from a niche phrase and need a ranked list of public channel cards.
Best fit for this Actor
- Discover public YouTube creators in a niche from a free-text keyword.
- Build a prospecting list of channel URLs and handles for outreach or CRM import.
- Feed MCP or spreadsheet workflows with one predictable channel card per match.
For mixed video, playlist, and channel SERP, start with YouTube Search Scraper and then return here when you only need channel cards. For a known channel URL or @handle, continue with YouTube Channel Scraper after you pick a match. For public emails on a known channel, pass the URL to YouTube Channel Email Extractor.
Practical scenario
A partnership manager types personal finance, keeps maxResultsPerQuery at 10, and leaves enrichProfiles off. The run returns ranked public channel cards with name, handle, subscriber text, and channel URL. Handles that pass a subscriber floor are then passed to the known-URL channel scraper for About-page detail, or to the email extractor for contact harvest. An empty niche finishes SUCCEEDED with VALID_EMPTY and no channel-found charge.
Quick start input
{"searchQueries": ["personal finance"],"maxResultsPerQuery": 10,"maxResultsTotal": 50,"enrichProfiles": false}
searchQueries accepts free-text keywords. Optional searchUrls accepts youtube.com/results?search_query=... pages; the Actor extracts the keyword and runs a channel-only search.
Input reference
| Field | Type | What it controls |
|---|---|---|
searchQueries | array (required) | Keywords such as personal finance. Prefills one example. |
searchUrls | array | Optional YouTube results URLs that already contain search_query. |
maxResultsPerQuery | integer | Unique channels saved per keyword. Default 10, max 200. |
maxResultsTotal | integer | Hard cap across the whole run. Default 50, max 500. |
minSubscribers / maxSubscribers | integer | Keep channels in a public subscriber band. Hidden counts stay in the set. |
verifiedOnly | boolean | Keep cards that show YouTube's verified badge. Default false. |
country / language | string | YouTube gl / hl plus residential geo. Defaults US / en. |
enrichProfiles | boolean | Fetch About-page fields and bill channel-enriched. Default false. |
fallbackMode | string | auto (default), never, or always for the managed recovery path. |
proxyConfiguration | object | Residential proxy for the direct YouTube HTTP scrape. |
What data you receive
One dataset item is one unique public YouTube channel card.
{"type": "channel","query": "personal finance","position": 1,"source": "youtube","channelId": "UCxxxxxxxxxxxxxxxxxxxxxx","handle": "@examplefinance","channelName": "Example Finance","channelUrl": "https://www.youtube.com/@examplefinance","handleUrl": "https://www.youtube.com/@examplefinance","descriptionSnippet": "Weekly money explainers","subscriberCount": 1200000,"subscriberCountText": "1.2M subscribers","videoCount": 480,"videoCountText": "480 videos","isVerified": true,"avatarUrl": "https://yt3.ggpht.com/example","thumbnailUrl": "https://yt3.ggpht.com/example","discoverySurface": "channel_search","enriched": false,"description": null,"viewCount": null,"joinedDateText": null,"country": null,"keywords": null,"externalLinks": null,"rssUrl": null,"bannerUrl": null,"publicEmail": null,"scrapedAt": "2026-09-10T12:00:00.000Z"}
| Field | Meaning |
|---|---|
channelName + handle | Public display name and @handle |
subscriberCountText / videoCountText | Search-card display strings |
isVerified | Public verified badge on the card |
channelUrl | Canonical public channel or handle URL |
enriched | True after optional About-page enrich |
source | youtube for direct HTTP, managed-fallback when recovery ran |
OUTPUT and RUN_SUMMARY in the default key-value store hold outcome, itemsPushed, and chargedEventCounts. Read those records to interpret empty datasets.
Use through the API
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~youtube-channel-search-scraper/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["personal finance"],"maxResultsPerQuery":10,"enrichProfiles":false}'
Download rows as JSON, CSV, Excel, or HTML from the Dataset tab.
Use with AI agents through Apify MCP
Find public YouTube channels for personal finance. Return channelName, handle, subscriberCountText, isVerified, and channelUrl. Keep the scope to public search cards. Read OUTPUT.outcome and itemsPushed for empty datasets. Cost signal: about $0.004 per found channel plus platform usage.
Connect via https://mcp.apify.com. Provenance is the public YouTube channel-search card; scrapedAt is collection time.
Connect the workflow
- After you pick a channel, scrape the known URL with YouTube Channel Scraper.
- When you need public emails on that channel, continue with YouTube Channel Email Extractor.
- For a mixed video SERP on the same keyword, start with YouTube Search Scraper.
Pricing
This Actor uses Pay per event plus Apify platform usage. The live Pricing tab is the current source of truth for billing details.
apify-actor-start: $0.00005 per runchannel-found: $0.004 per unique public channel rowchannel-enriched: $0.006 per successful About-page enrich
A ten-channel prefill is about $0.04 in result events plus a few seconds of Apify platform usage. Empty niches and invalid keywords have no channel-found charge.
How it works
- Normalize keywords and optional results URLs, then collapse duplicates.
- Request YouTube channel-only search over residential HTTP (InnerTube
ytInitialDataplus continuation). - When direct HTTP is unavailable,
fallbackMode=autouses the managed recovery path. - Charge
channel-found, optionally enrich, then write the dataset item.
Best results
- Provide a specific niche keyword such as
personal financerather than a channel URL. - Start with
enrichProfilesoff for cheap discovery, then enrich the shortlist. - Confirm
countrymatches the market you care about so residential geo and YouTubeglstay aligned. - Validate
OUTPUT.outcomeafter the run:COMPLETEfor a full set,VALID_EMPTYfor a quiet niche.
Builder's note
I found that YouTube's public channel-only search token already returns identity, subscriber display text, and verification on the card, which is enough for a lean discovery product. Keeping About-page fields behind an optional enrich lets agents run a cheap keyword scan first, then call the known-URL sibling only for channels that matter. Direct residential HTTP with a managed recovery path covers the days when YouTube HTML is consent-walled while staying on cookieless public data.
Legal and responsible use
Use this Actor on public YouTube search data you are authorized to process, follow applicable law and YouTube's terms, and keep the output in your own compliance workflow. YouTube is a trademark of Google LLC. This independent Actor is not affiliated with, associated with, or endorsed by YouTube or Google.
Issues and feature requests: use the Actor Issues tab on Apify.