# YouTube Channel Search Scraper - Subscribers, Emails (`om_kh/youtube-channel-search-scraper`) Actor

YouTube channel search: find channels by keyword or through the videos that rank, up to 1,000 per search. Filters: subscribers, videos, verified, country. Optional country, total views, social links, public business email and latest uploads. $0.50 per 1,000 channels. API and MCP.

- **URL**: https://apify.com/om_kh/youtube-channel-search-scraper.md
- **Developed by:** [Khandji Omar](https://apify.com/om_kh) (community)
- **Categories:** Lead generation, Social media, Videos
- **Features:** Limited permissions
- **Stats:** 10 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 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 — Subscribers, Emails

> Search YouTube **channels** by keyword and get a clean list: channel name, handle,
> subscribers, description and link — up to 1,000 per search, found through YouTube's channel filter or through the videos that rank. Turn on enrichment to add
> **country, total views, join date, social links and a public business email**
> (MX-checked). **$0.50 per 1,000 channels.**

### In short: what you give, what you get, what it costs

| | |
|---|---|
| **You give** | Keywords (up to 500 per run) or YouTube search links |
| **We do** | Search YouTube for channels, through its channel filter or through the videos that rank |
| **You get** | One row per channel: name, handle, subscribers, description and link. Option: country, total views, video count, join date, social links, the public email from the bio (mail-checked), whether a business-email button exists, family-safe flag, the countries where the channel is available, and the latest uploads with views, date and length |
| **It costs** | $0.50 per 1,000 channels, + $0.002 per channel with the option on, no start fee. The first 10 channels of every run are free |
| **It does not** | Read emails hidden behind YouTube's "View email address" button, or keep channels that hide their subscriber count when you set a minimum |

A real result row is shown further down this page.

### Free tier — 10 results free on every run

**The first 10 results of every run are free**, on every run you ever make — not a one-off trial. One guard: the free allowance never covers more than half of a run, so the offer stays sustainable.

### What does this YouTube channel search scraper do?

It runs YouTube's own channel search (the "Channels" filter on youtube.com) for each of
your keywords and returns one row per channel, in YouTube's ranking order. Use it to
build influencer lists, find creators in a niche, or map who owns a topic on YouTube.

With **enrichment** on, it also opens each channel's About panel and adds:

- country, exact subscriber count, total views, number of videos and join date,
- social links (Instagram, TikTok, X, LinkedIn...) and website links,
- a **business email** when the creator publishes one in the channel bio, with its
  verification level (`mx_valid` = the domain's mail server exists).

No login, no YouTube API key, no quota. It reads YouTube directly — no third-party
scraper in the middle.

### Compared with maximedupre/youtube-channel-search-scraper

Read on the Store on 2026-10-23 (YouTube Channel Search Scraper). Where it does better, this section says so.

- **Built on the site's own data**, not a resold scraper: no second Actor between you and the source.
- **Free results on every run** and a hard cost cap (`maxTotalChargeUsd`).
- **Same fields with enrichment on:** total views, video count, join date, country, banner, links, business-email button, family-safe flag, available countries, owner URLs, and (option `includeRecentVideos`) the latest uploads.
- **Price:** $0.5 per 1,000 here, $1 there.

### Why use it

1. **Micro-influencer friendly.** `minSubscribers` / `maxSubscribers` filters keep only the
   channel sizes you want.
2. **Contacts, not just names.** Optional enrichment adds social links and published
   business emails — never guessed.
3. **Country filter.** Keep only channels based in a given country.
4. **Cheap.** $0.0005 per channel, $0.002 extra per enriched channel. First 10 channels
   of every run free.
5. **API and AI-agent ready.** JSON, CSV, Excel, n8n, Make, Zapier, and MCP.

### How to use it in 3 steps

1. Click **Try for free** — a keyword is prefilled.
2. Optional: set how many channels, subscriber limits, turn on **Enrich channels**, or add a country.
3. Click **Start** and download JSON, CSV or Excel, or read the results from the API.

### Input

| Field | What it does |
|---|---|
| `searchTerms` | Keywords, one per line (up to 500 per run). |
| `searchUrls` | Pasted `youtube.com/results` links, run again with their filters. |
| `searchTermsFiles` | Up to 20 TXT or CSV files of terms, one per line. |
| `discoveryMode` | `channelFilter` (default), `videoResults` (the creators whose videos rank, with the video that surfaced them) or `both`. |
| `maxChannels` | Channels per search, 1 to 1,000. Default 50. |
| `maxTotalResults` | Optional limit for the whole run. |
| `minSubscribers` / `maxSubscribers` | Optional subscriber range. |
| `minVideos` | Optional minimum number of public videos. |
| `verifiedOnly` | Keep only verified channels. |
| `excludedChannels` | Channel links, @handles or IDs to leave out. |
| `countryHint` / `languageHint` | Two-letter country and language YouTube ranks the search for. |
| `enrichChannels` | Add country, views, links and business email. Default off. |
| `includeRecentVideos` | Add each channel's latest uploads (title, link, views, date, length) and its last upload date. Turns on enrichment, no extra price. Default off. |
| `maxRecentVideos` | Latest uploads per channel when recent videos are on, 1 to 30. Default 10. |
| `country` | Optional country filter (e.g. `United States`, `France`); turns enrichment on. |
| `maxTotalChargeUsd` | Optional hard cost cap for the run. |

```json
{
  "searchTerms": ["personal finance", "home workout"],
  "maxChannels": 100,
  "minSubscribers": 10000,
  "maxSubscribers": 500000,
  "enrichChannels": true
}
```

### Output

One row per channel. Real example with enrichment (email masked):

A real row from this Actor's run on Apify (2026-11-11, run B6yQp5vtrafZ1J3HX, `enrichChannels` + `includeRecentVideos`; long texts are cut and people's names hidden here, your dataset has them in full):

```json
{
  "status": "ok",
  "input_ref": "personal finance",
  "channelId": "UCMw07uiVxGULqePlrOZnx9A",
  "title": "Personal Finance with Leila - Debt Over It",
  "handle": "(hidden here)",
  "subscribers": 68500,
  "subscribersText": "68.5K subscribers",
  "description": "I help overwhelmed individuals get control of their money and build better habits so they can pay off debt, save consistently, and ...",
  "isVerified": false,
  "thumbnailUrl": "https://yt3.ggpht.com/jQWukM-SKjnmxhCuILiOXLCCBF8jAYgSqQUsyMFyoE7x_0HrSUweTFvALQVqEiAT5oBFhzvZDwc=s176-c-k-c0x00ffffff-no-rj-mo",
  "channelUrl": "https://www.youtube.com/@PersonalFinancewithLeila",
  "rank": 1,
  "searchQuery": "personal finance",
  "discoverySource": "channel",
  "videoCount": 1261,
  "country": "United States",
  "totalViews": 9769727,
  "joinedAt": "2019-12-04",
  "avatarUrl": "https://yt3.googleusercontent.com/jQWukM-SKjnmxhCuILiOXLCCBF8jAYgSqQUsyMFyoE7x_0HrSUweTFvALQVqEiAT5oBFhzvZDwc=s900-c-k-c0x00ffffff-no-rj",
  "bannerUrl": "https://yt3.googleusercontent.com/noGUeJA0fN9J5uuJY4mQ8N7mXyY6xomRS8HyOmNvSBasOJSDDO1YyAhWbPjb8y_z2K9iwX8clw=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
  "totalViewsText": "9,769,727 views",
  "videoCountText": "1,261 videos",
  "joinedText": "Joined Dec 4, 2019",
  "hasBusinessEmailButton": true,
  "isFamilySafe": true,
  "availableCountryCodes": [
    "SI",
    "MY",
    "VG",
    "MD",
    "PR",
    "... 249 in total"
  ],
  "ownerUrls": [
    "http://www.youtube.com/@PersonalFinancewithLeila"
  ],
  "recentVideos": [
    {
      "videoId": "MuwCtxEZZM4",
      "title": "Another $10K+ month, over budget, lower net worth | 2026 Finance Update",
      "url": "https://www.youtube.com/watch?v=MuwCtxEZZM4",
      "views": 7000,
      "publishedText": "2 days ago",
      "publishedAt": "2026-11-09",
      "durationSeconds": 1186
    },
    {
      "videoId": "jN0yVe5QEjk",
      "title": "Things People REFUSE to Spend Money On",
      "url": "https://www.youtube.com/watch?v=jN0yVe5QEjk",
      "views": 32000,
      "publishedText": "5 days ago",
      "publishedAt": "2026-11-06",
      "durationSeconds": 2523
    }
  ],
  "lastUploadAt": "2026-11-09",
  "daysSinceLastUpload": 2,
  "recentAvgViews": 15433,
  "enriched": true,
  "fullDescription": "I help overwhelmed individuals get control of their money and build better habits so they can pay off debt, save consistently, and feel conf ...",
  "keywords": [
    "financial",
    "literacy"
  ],
  "socialLinks": [],
  "websiteLinks": [
    "https://debtoverit.com/coaching",
    "https://skool.com/budget-build-1523",
    "https://beacons.ai/debtoverit",
    "https://open.spotify.com/show/3sDyo5XJO4J9JzED2LwfK5?si=DdjdaHQxSDaxPlwjpgw4sQ"
  ],
  "businessEmail": null,
  "rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCMw07uiVxGULqePlrOZnx9A"
}
```

### How much does it cost?

| Result | Price |
|---|---|
| Channel | **$0.0005** ($0.50 per 1,000) |
| Enrichment (optional) | **+$0.002** per enriched channel |
| Start fee | none |

The first 10 channels of every run are free. A search YouTube could not answer is never
charged. Paid Apify plans get lower tier prices — see the Pricing tab.

### Use cases

- **Influencer marketing** — shortlist creators in a niche by size and country, with contacts.
- **Sponsorship and agency prospecting** — build outreach lists of channels that publish a business email.
- **Market mapping** — see which channels own a topic on YouTube.
- **Competitive research** — track who ranks for your keywords.

### Use it from code (API)

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/youtube-channel-search-scraper").call(run_input={
    "searchTerms": ["personal finance"],
    "maxChannels": 100,
    "enrichChannels": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["subscribers"], (item.get("businessEmail") or {}).get("email"))
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('om_kh/youtube-channel-search-scraper').call({
    searchTerms: ['personal finance'],
    maxChannels: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Integrations: n8n, Make, Zapier, Google Sheets

Use the Apify app in n8n, Make or Zapier, or the Google Sheets integration from the
Integrations tab, to send new channels straight to your CRM or spreadsheet.

### Use it from an AI agent (MCP)

Connect an MCP client to `https://mcp.apify.com` and add
`om_kh/youtube-channel-search-scraper` as a tool.

### Tips and limits

- YouTube returns channels in its own relevance order; `rank` keeps that order.
- A few channels hide their subscriber count; `subscribers` is then empty and they are
  dropped by `minSubscribers`.
- Emails come only from what creators publish in their bio. Channels that hide their
  email behind YouTube's "View email address" button are not bypassed.

### FAQ

**Do I need a YouTube API key?**
No.

**How many channels can I get?**
Up to 1,000 per keyword and 500 keywords per run. Every row also has `discoverySource` (`channel` or `video`), `sourceVideo` for channels found through a video, `avatarUrl` and `rssUrl`.

**Where do the emails come from?**
Only from the public channel description, checked against the domain's mail server.
Nothing is guessed.

**Can I find channels from one country only?**
Yes, set `country`; each channel's About page is read to keep only that country.

**Is it legal?**
It reads public channel information any visitor can see. You are responsible for how
you contact creators; follow the anti-spam law that applies to you.

### Related Actors

- [YouTube Creator Lead Finder - Views, Niche, Email](https://apify.com/om_kh/youtube-creator-lead-finder) — scores creators and keeps only active, qualified channels.
- [YouTube Channel Videos Scraper - Exact Views, $0.50/1K](https://apify.com/om_kh/youtube-channel-videos-scraper) — every recent upload of a channel with exact likes.
- [YouTube Comments Scraper - Likes, Replies, Date, $0.40/1K](https://apify.com/om_kh/youtube-comments-scraper) — what the audience says.

### Your feedback

Did this Actor save you time? A short review on the **Reviews** tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the **Issues** tab: it is answered and fixed fast.

# Actor input Schema

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

Topics, products or types of creators to search YouTube for, one per line (up to 500 with the files and links below).

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

Paste youtube.com/results links to run a search again exactly as you set it on YouTube, filters included.

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

Up to 20 TXT or CSV files, one term per line (first column of a CSV).

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

The channel filter returns channels YouTube matches by name and topic. Video results return the creators whose videos rank for the search, with the video that surfaced them. Both mixes the two.

## `maxChannels` (type: `integer`):

Channels saved per search term or search link, after filters (1 to 1,000). Default 50.

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

Optional: skip channels below this subscriber count.

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

Optional: skip channels above this subscriber count (great for micro-influencers).

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

Optional: keep only channels with at least this many public videos.

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

Keep only channels YouTube marks as verified.

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

Channel links, @handles or channel IDs that must never be returned (your own channels, ones you already have).

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

Stop after this many channels over all searches. Empty: no run-wide limit.

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

Two-letter country YouTube ranks the search for: US, FR, DE, BR...

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

Two-letter language YouTube ranks the search for: en, fr, es, de...

## `enrichChannels` (type: `boolean`):

Adds country, exact subscribers, total views, join date, social and website links, and a public business email from the channel bio (MX-checked). +$0.002 per enriched channel.

## `includeRecentVideos` (type: `boolean`):

Adds each channel's latest uploads (title, link, views, upload date, length) plus last upload date, days since and average recent views. Turns on enrichment; no extra price beyond the enriched channel.

## `maxRecentVideos` (type: `integer`):

How many latest uploads to add per channel when recent videos are on (1 to 30). Default 10.

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

Optional: keep only channels whose About page lists this country (e.g. United States, France). Turns on enrichment.

## `maxTotalChargeUsd` (type: `number`):

Optional hard cap on what this run can cost you.

## Actor input object example

```json
{
  "searchTerms": [
    "personal finance"
  ],
  "discoveryMode": "channelFilter",
  "maxChannels": 50,
  "verifiedOnly": false,
  "enrichChannels": false,
  "includeRecentVideos": false,
  "maxRecentVideos": 10
}
```

# Actor output Schema

## `report` (type: `string`):

A visual summary of delivery, charges, and source issues.

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

Companies in a sortable table. No JSON knowledge required.

## `csv` (type: `string`):

Results ready for spreadsheets, CRMs, and analytics tools.

## `excel` (type: `string`):

Results as an Excel workbook for non-technical teams.

## `runSummary` (type: `string`):

Machine-readable delivery, billing, and source diagnostics.

# 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 = {
    "searchTerms": [
        "personal finance"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("om_kh/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 = { "searchTerms": ["personal finance"] }

# Run the Actor and wait for it to finish
run = client.actor("om_kh/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 '{
  "searchTerms": [
    "personal finance"
  ]
}' |
apify call om_kh/youtube-channel-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,om_kh/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/HXXh5HE0bs6Zp64Dp/builds/aYLZmQxCwvGX0shng/openapi.json
