# YouTube Channel Search Scraper (`deepmine/youtube-channel-search-scraper`) Actor

YouTube channel search scraper: find YouTube channels and creators by keyword and get one row per channel with subscribers, video and view counts, country, join date, links, social profiles, keywords and banner. Filter by subscribers, videos, views, country and verification. No login, no API key.

- **URL**: https://apify.com/deepmine/youtube-channel-search-scraper.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 channels

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## YouTube Channel Search Scraper: Creator Finder

YouTube channel search scraper: type a topic and get the YouTube channels and creators behind it, one row per channel with subscribers, video and view counts, country, join date, recent activity, links, emails, social profiles and keywords.

| Channel | Handle | Subscribers | Videos | Total views | Country | Joined | Found in | Search term |
|---|---|---:|---:|---:|---|---|---|---|
| [Mill City Roasters®](https://www.youtube.com/@MillCityRoasters) | @MillCityRoasters | 42,800 | 201 | 2,561,895 | United States | 2014-02-07 | Channel results #1 | coffee roasting |
| [James Hoffmann](https://www.youtube.com/@jameshoffmann) | @jameshoffmann | 2,570,000 | 411 | 398,042,201 | United Kingdom | 2014-12-08 | Video results #1 | coffee roasting |
| [Walk at Home](https://www.youtube.com/@LeslieSansonesWalkatHome) | @LeslieSansonesWalkatHome | 6,060,000 | 294 | 1,305,415,463 | United States | 2011-07-11 | Video results #1 | home workout |

<sub>Collected 2026-10-17 with the prefilled input.</sub>

**$0.35 per 1,000 channels** on Starter ($0.39 Free, $0.27 Scale, $0.20 Business). The prefilled run (50 channels) costs about $0.02. No start fee; channels your filters leave out are free.

### What it does

- **Finds channels two ways:** YouTube's own channel results for your term (its Channels filter) and the creators behind the video results. By default both lists are merged result by result, so a 25-channel run already mixes channel names that match the term with the creators who actually make videos about it.
- **Finds channels like the ones you know:** give seed channels in `similarToChannels` and get the channels each one features on its home page, then the creators of videos on its topics (its own keywords, or what its newest videos are about). Each row names the seed it's similar to.
- **One full profile per channel:** subscribers, exact video and view counts, country, join date, description, every About-panel link (with Instagram, TikTok, X, Facebook, LinkedIn and website pulled out into their own columns), the email addresses written in the description, keywords, avatar and banner, verification, memberships and whether a business email is on file.
- **Recent activity, included:** when the channel last uploaded (to the second), how many uploads it made in the last 30 days, the average views of its newest uploads and the exact time the channel was created, from its RSS feed. Optionally its newest uploads' links, titles and dates (`recentVideos`).
- **Shows why each channel is there:** the search term, which result list found it, its rank there and, for video results, the video (title, link, views, age).
- **Filters before you pay:** subscriber, video and view ranges, verified only, business email on file, join date, uploaded within N days, channel country, channels to leave out and words to leave out. Channels left out are never charged and don't count toward your maximum. When the search page already shows the value (subscribers on channel results), the channel isn't even read.
- **No login, no API key, no browser.** Plain calls to YouTube's own web API through Apify's datacenter proxy. In our runs the first channel arrived after 1-4 seconds; 50 channels took 8 seconds, 300 channels 11 seconds and 400 channels 53 seconds, with the recent activity read for every channel.

### Input

| Field | What it does |
|---|---|
| 🔍 Search terms (`searchQueries`) | Topics, niches or products, one per line. YouTube search links work too, with their filters. |
| 💯 Channels per search term (`maxResults`) | The most channels to save per term (100 when empty, up to 5,000). |
| 🧭 Find channels in (`discoveryMode`) | `both` (default), `channelFilter` (YouTube's channel results only) or `videoResults` (creators of video results only). |
| 🎛️ Filters | `minSubscribers`, `maxSubscribers`, `minVideos`, `maxVideos`, `minViews`, `maxViews`, `verifiedOnly`, `onlyWithBusinessEmail`, `channelCountries` (codes or English names), `joinedAfter` / `joinedBefore` (a date or a period such as `2 years`), `activeWithinDays` (newest upload at most N days old), `excludedChannels` (links, @handles, ids), `excludeKeywords`. |
| 🔎 Search settings | `sortBy` (relevance or popularity), `uploadDate` (find creators by videos from the last hour, today, this week, month or year), `country` and `language` of the search, `expandQueries` (also search up to 10 of YouTube's autocomplete suggestions per term), `maxTotalResults` for the whole run, `recentActivity` (on by default), `recentVideos` (0-15 newest uploads per row), `onlyNew` (skip channels earlier runs of the same task delivered; `stateStoreName` names that memory). |
| 🔗 More inputs (`startUrls`) | YouTube search links, or channel links, @handles and UC... ids to look up one channel each. |
| 🧲 Find channels similar to (`similarToChannels`) | Seed channels (links, @handles, UC... ids). For each: the channels it features, then the creators of videos on its topics, up to `maxResults` per seed, with the same filters. The seeds themselves aren't saved. |

Example: UK finance creators with 10K-2M subscribers.

```json
{
  "searchQueries": ["personal finance uk"],
  "discoveryMode": "channelFilter",
  "maxResults": 60,
  "minSubscribers": 10000,
  "maxSubscribers": 2000000,
  "country": "GB",
  "channelCountries": ["GB"]
}
```

Example: active fitness creators (an upload in the last 14 days), with their 3 newest uploads, new to you on every daily run.

```json
{
  "searchQueries": ["home workout"],
  "maxResults": 100,
  "activeWithinDays": 14,
  "recentVideos": 3,
  "onlyNew": true
}
```

Example: up to 50 channels like each of three you know, with 10K subscribers or more.

```json
{
  "similarToChannels": ["@jameshoffmann", "@mkbhd", "@JeffNippard"],
  "maxResults": 50,
  "minSubscribers": 10000
}
```

Example: Spanish-language cooking creators who posted this month.

```json
{
  "searchQueries": ["recetas faciles"],
  "discoveryMode": "videoResults",
  "uploadDate": "month",
  "maxResults": 80,
  "country": "MX",
  "language": "es"
}
```

#### Moving from another YouTube channel search Actor

Saved inputs from maximedupre's, hyperbach's and coregent's channel search Actors run here as they are: `searchTerms`, `searchUrls`, `searchTermsFiles` (TXT or CSV links), `discoveryMode` (`both`, `videoResults`, `channelFilter`), `maxChannelsPerSearchTerm` / `maxChannelsPerQuery` / `maxResultsPerQuery`, `maxTotalResults` / `maxItems` (over all searches; 0 = no limit), `minSubscribers` / `maxSubscribers` (0 = no limit), `minVideos`, `verifiedOnly`, `excludedChannels` / `excludeChannels`, `countries`, `activeWithinDays`, `recentVideos`, `expandQueries`, `onlyNew` / `stateStoreName`, `languageHint` / `countryHint` / `regionCode` / `region`, `dateFrom` / `dateTo` (join date), `channels` / `channelOrVideoInputs` (channels; video links are skipped with a note) and hyperbach's `similarToChannels` (its `seed_channel_id` is `similarToChannelId` here). Hyperbach's channels and videos modes and its views order are accepted too. Coregent's activity-score add-on is in every row here (the activity columns). Not offered: coregent's niche presets and its subscriber/join-date output sort (rows keep YouTube's order and their rank; sort the dataset after the run).

### Output

One row per channel, the same keys in every row. Views: 📊 Overview, 📈 Stats, 💌 Outreach (links and emails), 🆕 Activity (recent uploads) and 🧭 Discovery (where the search found it).

| Key | What it is |
|---|---|
| `position` | The channel's place among this term's saved channels |
| `channelAvatarUrl`, `channelName`, `channelHandle`, `channelUrl` | Profile picture, name, @handle, link |
| `channelDescription` | The About panel's description, in full |
| `isChannelVerified`, `isChannelArtist` | Verified badge; official artist channel |
| `numberOfSubscribers`, `subscribersText` | Subscribers as YouTube shows them (rounded by YouTube for every viewer) and its text |
| `channelTotalVideos`, `videosText`, `channelTotalViews`, `viewsText` | Exact video and view counts and their texts |
| `avgViewsPerVideo`, `viewsPerSubscriber`, `sizeTier` | Views per video, views per subscriber, Nano / Micro / Mid-tier / Macro / Mega |
| `lastUploadAt`, `lastUploadDaysAgo` | The newest upload's time (UTC, to the second) and whole days since |
| `uploadsLast30Days`, `recentAvgViews` | Uploads in the last 30 days among the newest 15 (15 = 15 or more), and those 15 uploads' average views |
| `recentVideoUrls`, `recentVideoTitles`, `recentVideoDates` | With `recentVideos`: the newest uploads' links, titles and times, newest first |
| `channelLocation`, `channelCountryCode` | Country on the About panel and its code |
| `channelJoinedDate`, `joinedDateText`, `channelCreatedAt` | Creation day (YYYY-MM-DD), YouTube's text, and the exact creation time (UTC, to the second) |
| `keywords`, `tags` | The channel's keywords, as written and as a list |
| `externalLinks`, `websiteUrl`, `instagramUrl`, `tiktokUrl`, `twitterUrl`, `facebookUrl`, `linkedinUrl` | Every About-panel link, and the main ones in their own columns |
| `hasBusinessEmail`, `emailsInDescription`, `hasMemberships` | A business email on file (YouTube shows the address only to signed-in viewers); the email addresses written in the description; paid memberships |
| `tabs`, `tabUrls` | The channel's tabs (Videos, Shorts, Live, Podcasts, Store...) and their links |
| `isFamilySafe`, `isUnlisted`, `isNoindex` | YouTube's flags for the channel page |
| `channelBannerUrl`, `avatarImages` | Banner (largest size) and the avatar in every size |
| `discoveredVia`, `searchRank`, `searchTermMatch` | Channel results / Video results / Search link / Channel link (similar channels: Similar to: featured channel / Similar to: video results), the rank there, and how much of the term the channel's own text contains (0-100) |
| `similarToChannelName`, `similarToChannelId` | Similar channels: the seed channel the row was found for |
| `sourceVideoTitle`, `sourceVideoUrl`, `sourceVideoId`, `sourceVideoDateText`, `sourceVideoViews` | Video results: the video that showed the channel |
| `searchQuery`, `input`, `fromYTUrl`, `country`, `language` | The search the row came from (for similar channels, what the seed was searched on), the term or seed as you gave it, and the search's country and language |
| `id`, `channelId`, `channelUsername`, `rssUrl` | Channel id (UC...), handle without @, the channel's video feed |
| `ownerUrls`, `alternateUrls`, `availableCountryCodes` | YouTube's own links for the channel and where it's available |
| `scrapedAt` | When the row was read (UTC) |

A full row (James Hoffmann, found through his video for "coffee roasting", live run of 2026-10-18; description and country list shortened):

```json
{
  "position": 2,
  "channelAvatarUrl": "https://yt3.googleusercontent.com/2k3-P8cX-0sawteUmQSzaQb7pLaCOKcNtEYDEXy1y8Y5wv97Ecgzhgg50b6NYCwxm677h9bT=s160-c-k-c0x00ffffff-no-rj",
  "channelName": "James Hoffmann",
  "channelHandle": "@jameshoffmann",
  "channelUrl": "https://www.youtube.com/@jameshoffmann",
  "channelDescription": "Hi! My name is James, and I make videos about anything and everything to do with coffee...",
  "isChannelVerified": true,
  "isChannelArtist": false,
  "numberOfSubscribers": 2570000,
  "subscribersText": "2.57M subscribers",
  "channelTotalVideos": 411,
  "videosText": "411 videos",
  "channelTotalViews": 398151391,
  "viewsText": "398,151,391 views",
  "avgViewsPerVideo": 968738,
  "viewsPerSubscriber": 154.9,
  "sizeTier": "Mega",
  "lastUploadAt": "2026-10-14T14:36:45Z",
  "lastUploadDaysAgo": 4,
  "uploadsLast30Days": 2,
  "recentAvgViews": 615836,
  "recentVideoUrls": null,
  "recentVideoTitles": null,
  "recentVideoDates": null,
  "channelLocation": "United Kingdom",
  "channelCountryCode": "GB",
  "channelJoinedDate": "2014-12-08",
  "joinedDateText": "Joined Dec 8, 2014",
  "channelCreatedAt": "2014-12-08T15:27:06Z",
  "keywords": "coffee \"james hoffmann\" jimseven \"james hoffman\"",
  "tags": ["coffee", "james hoffmann", "jimseven", "james hoffman"],
  "externalLinks": ["http://linktree.com/jimseven", "https://www.tenshundredsthousands.com", "https://www.instagram.com/jimseven", "https://www.twitter.com/jimseven"],
  "websiteUrl": "http://linktree.com/jimseven",
  "instagramUrl": "https://www.instagram.com/jimseven",
  "tiktokUrl": null,
  "twitterUrl": "https://www.twitter.com/jimseven",
  "facebookUrl": null,
  "linkedinUrl": null,
  "hasBusinessEmail": true,
  "emailsInDescription": null,
  "hasMemberships": false,
  "tabs": ["Home", "Videos", "Shorts", "Live", "Playlists", "Posts", "Store"],
  "tabUrls": ["https://www.youtube.com/@jameshoffmann/featured", "https://www.youtube.com/@jameshoffmann/videos", "..."],
  "isFamilySafe": true,
  "isUnlisted": false,
  "isNoindex": false,
  "channelBannerUrl": null,
  "avatarImages": ["https://yt3.googleusercontent.com/2k3-P8cX-0sawteUmQSzaQb7pLaCOKcNtEYDEXy1y8Y5wv97Ecgzhgg50b6NYCwxm677h9bT=s72-c-k-c0x00ffffff-no-rj", "..."],
  "discoveredVia": "Video results",
  "similarToChannelName": null,
  "similarToChannelId": null,
  "searchRank": 1,
  "searchTermMatch": 50,
  "sourceVideoTitle": "Coffee Roasting Explained",
  "sourceVideoUrl": "https://www.youtube.com/watch?v=N6BJVM5tvnw",
  "sourceVideoId": "N6BJVM5tvnw",
  "sourceVideoDateText": "3 years ago",
  "sourceVideoViews": 2150189,
  "searchQuery": "coffee roasting",
  "input": "coffee roasting",
  "fromYTUrl": "https://www.youtube.com/results?search_query=coffee+roasting",
  "country": "US",
  "language": "en",
  "id": "UCMb0O2CdPBNi-QqPk5T3gsQ",
  "channelId": "UCMb0O2CdPBNi-QqPk5T3gsQ",
  "channelUsername": "jameshoffmann",
  "rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCMb0O2CdPBNi-QqPk5T3gsQ",
  "ownerUrls": ["http://www.youtube.com/@jameshoffmann"],
  "alternateUrls": ["https://m.youtube.com/channel/UCMb0O2CdPBNi-QqPk5T3gsQ", "android-app://com.google.android.youtube/http/youtube.com/channel/UCMb0O2CdPBNi-QqPk5T3gsQ", "ios-app://544007664/http/youtube.com/channel/UCMb0O2CdPBNi-QqPk5T3gsQ"],
  "availableCountryCodes": ["DK", "QA", "SX", "GL", "AS", "..."],
  "scrapedAt": "2026-10-18T23:14:41Z"
}
```

The run's summary (key-value store record `OUTPUT`) lists every search term with its channel count and status, the channels each filter left out, and the stop reason.

### FAQ

**How many channels does one search term give?** YouTube's channel results usually end after a few hundred channels; the video results go deeper. With `both`, a term gives more channels than either list alone.

**Why is a subscriber count rounded?** YouTube rounds subscriber counts for every viewer (14.2K, 2.57M). Video and view counts are exact. A channel that hides its subscribers has `numberOfSubscribers: null`, and is left out when you set a subscriber limit.

**Can I get the business email address?** Not the one behind YouTube's "View email address" button: YouTube shows it only to signed-in viewers behind a captcha, and this Actor never signs in. `hasBusinessEmail` tells you which channels have one, `emailsInDescription` gives the addresses channels write in their description, and the links columns give their website and social profiles.

**Where does the activity come from?** From the channel's RSS feed, which lists its newest 15 uploads (videos, Shorts and streams) with exact times and views, and whose own date is the channel's creation time. When the feed doesn't answer, the Videos tab gives `lastUploadDaysAgo`, `uploadsLast30Days` and `recentAvgViews` from its "3 days ago" texts (long videos only), without the exact times. Set `recentActivity` to false to skip it.

**How are similar channels found?** For each seed: first the channels on its home page's channel shelves (Featured Channels, its other channels), then the creators behind YouTube's video results for the seed's own keywords (its first three together, then the one its newest titles repeat most). When its keywords are only its name (MKBHD's are), the words its newest titles repeat most are searched instead ("pro iphone"). `searchQuery` shows what was searched for each row, and your filters apply as for search terms.

**Is the same channel charged twice?** No. A channel is saved and charged once per run, with the first search term or seed that found it, even when several find it.

**What if the run is restarted?** Channels saved before the restart are skipped and not charged again; the run continues to your maximum.

**Do I need a proxy or a YouTube account?** No. Apify's datacenter proxy is set by default, and nothing needs a login.

### Related Actors

- [YouTube Channel Scraper](https://apify.com/deepmine/youtube-channel-scraper): every video of the channels you found, with views, likes and dates.
- [YouTube Scraper](https://apify.com/deepmine/youtube-scraper): channels, Shorts, search results and video details in one Actor.
- [YouTube Comments Scraper](https://apify.com/deepmine/youtube-comments-scraper): comments and replies of any video.
- [YouTube Transcript API](https://apify.com/deepmine/youtube-transcript-scraper): transcripts and captions in any language.

Found what you needed? A short review helps other people find this Actor: [leave a review](https://apify.com/deepmine/youtube-channel-search-scraper/reviews).

# Actor input Schema

## `searchQueries` (type: `array`):

Topics, niches or products to find channels for, one per line, as you'd type them in YouTube's search box (e.g. coffee roasting). YouTube search links work too. Each channel is saved and charged once per run, even when several terms find it.

## `maxResults` (type: `integer`):

The most channels to save for each search term (100 when empty). Channels your filters leave out don't count. YouTube lists up to a few hundred channels per term.

## `discoveryMode` (type: `string`):

Where to look: YouTube's channel results (its Channels filter), the creators behind the video results, or both, merged result by result. Each row says which list found it, its rank there and, from video results, the video.

## `minSubscribers` (type: `integer`):

Keep only channels with at least this many subscribers, e.g. 10000. Channels that hide their count are left out when a subscriber limit is set. Empty = no limit.

## `maxSubscribers` (type: `integer`):

Keep only channels with at most this many subscribers, to find smaller creators, e.g. 100000. Empty = no limit.

## `minVideos` (type: `integer`):

Keep only channels with at least this many public videos, e.g. 20. Empty = no limit.

## `maxVideos` (type: `integer`):

Keep only channels with at most this many public videos. Empty = no limit.

## `minViews` (type: `integer`):

Keep only channels with at least this many views in total, e.g. 1000000. Empty = no limit.

## `maxViews` (type: `integer`):

Keep only channels with at most this many views in total. Empty = no limit.

## `verifiedOnly` (type: `boolean`):

Keep only channels with YouTube's verified or official artist badge.

## `onlyWithBusinessEmail` (type: `boolean`):

Keep only channels that list a business email on their About panel (hasBusinessEmail). YouTube shows the address itself only to signed-in viewers.

## `channelCountries` (type: `array`):

Keep only channels whose About panel shows one of these countries: codes or English names, e.g. US, GB, Germany. Channels that show no country are left out. Empty = any country.

## `joinedAfter` (type: `string`):

Keep only channels created on or after this date, or within a period such as 2 years. Empty = any date.

## `joinedBefore` (type: `string`):

Keep only channels created before this date (or longer ago than a period such as 5 years). Empty = any date.

## `activeWithinDays` (type: `integer`):

Keep only channels whose newest upload (video, Short or stream) is at most this many days old, e.g. 30 for active creators. Channels with no upload are left out. Empty or 0 = no limit.

## `excludedChannels` (type: `array`):

Channels you already know: links, @handles or UC... ids, e.g. https://www.youtube.com/@MrBeast.

## `excludeKeywords` (type: `array`):

Words that rule a channel out when its name, handle, description or keywords contain them, e.g. gaming.

## `sortBy` (type: `string`):

YouTube's own order for both result lists: relevance, or popularity.

## `uploadDate` (type: `string`):

Find creators by their recent videos: video results uploaded within this time (the channel results aren't filtered).

## `country` (type: `string`):

Search as from this country: a two-letter code such as US, GB, IN, DE, BR (US when empty). YouTube ranks results by country.

## `language` (type: `string`):

Search in this language: a code such as en, es, pt, de, ja, or pt-BR (en when empty).

## `expandQueries` (type: `integer`):

For each search term, also search this many of YouTube's own autocomplete suggestions (coffee roasting → coffee roasting at home, coffee roasting business...). Their rows name the suggestion in searchQuery and your term in input. 0 = off.

## `maxTotalResults` (type: `integer`):

Stop after this many channels across all search terms. Empty or 0 = no limit (each term stops at its own maximum).

## `recentActivity` (type: `boolean`):

Read each channel's newest uploads (its RSS feed): when it last uploaded, uploads in the last 30 days, the recent uploads' average views and the exact time the channel was created. Included in the price.

## `recentVideos` (type: `integer`):

List this many of the channel's newest uploads in each row (links, titles and dates), up to 15. 0 = none.

## `onlyNew` (type: `boolean`):

Skip channels earlier runs with the same search terms delivered: run the same search daily and get only the channels you don't have yet (skipped channels are free). The memory is a key-value store in your account.

## `stateStoreName` (type: `string`):

Name of the key-value store that remembers delivered channels (onlyNew). Empty = derived from your search terms and channels, so the same task always meets its own memory; set a name to share one memory between tasks.

## `startUrls` (type: `array`):

Search result links (youtube.com/results?search_query=..., kept with their filters) or channel links, @handles and UC... ids to look up one channel each.

## `similarToChannels` (type: `array`):

Channel links, @handles or UC... ids (seed channels). For each seed: the channels it features on its home page, then the creators of videos on its topics (its own keywords, or what its newest videos are about), up to 'Channels per search term' per seed. The same filters apply; each row names the seed it's similar to, and a channel is saved once however many seeds find it. The seeds themselves aren't saved.

## `proxyConfiguration` (type: `object`):

Leave as is: Apify's datacenter proxy works for every call.

## `searchTerms` (type: `array`):

The same as searchQueries (searchTerms).

## `searchTermsFiles` (type: `array`):

Links to TXT or CSV files with one search term per line (the first column of a CSV).

## `searchUrls` (type: `array`):

The same as startUrls (searchUrls): links or {url} objects.

## `query` (type: `string`):

One search term (query).

## `maxChannelsPerSearchTerm` (type: `integer`):

The same as maxResults (maxChannelsPerSearchTerm, maxResultsPerQuery).

## `maxResultsPerQuery` (type: `integer`):

The same as maxResults.

## `countryHint` (type: `string`):

The same as country (countryHint, regionCode).

## `languageHint` (type: `string`):

The same as language (languageHint).

## `channelOrVideoInputs` (type: `array`):

Channel links, @handles or UC... ids to look up (the same as startUrls).

## `dateFrom` (type: `string`):

The same as joinedAfter.

## `dateTo` (type: `string`):

The same as joinedBefore.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee roasting",
    "home workout"
  ],
  "maxResults": 25,
  "discoveryMode": "both",
  "verifiedOnly": false,
  "onlyWithBusinessEmail": false,
  "sortBy": "relevance",
  "expandQueries": 0,
  "recentActivity": true,
  "recentVideos": 0,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "coffee roasting",
        "home workout"
    ],
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/youtube-channel-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": [
        "coffee roasting",
        "home workout",
    ],
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/youtube-channel-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "coffee roasting",
    "home workout"
  ],
  "maxResults": 25
}' |
apify call deepmine/youtube-channel-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepmine/youtube-channel-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bBwOCmr9ofaJ2Bpad/builds/K9gAONI4l7IsXcWA6/openapi.json
