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

Find YouTube channels by keyword or search URL: subscribers, exact video and view counts, joined date, country, description, links, verified badge and business e-mail flag. Filters, limits and a real-time API. No login.

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

## Pricing

from $0.35 / 1,000 channels

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### What is YouTube Channel Search Scraper?

**YouTube Channel Search Scraper** is a tool that lets you **find YouTube channels by keyword** and scrape each channel's subscribers, exact video and view counts, joined date, country, description, links, keywords, verified badge and whether it lists a business e-mail. Type your topics, click **Start**, and download the channels as Excel, CSV or JSON.

- ⚡ **Speed:** about 2,000 channels per minute (1,000 channels from 10 search terms in 29 seconds in our test)
- 🔎 **Deep searches:** usually 700 to 800 channels for one search term
- 📊 **Spreadsheet-ready:** one flat row per channel, with the joined date as a real date
- 🔓 **No login:** no YouTube account, cookies or API key needed

### What can YouTube Channel Search Scraper do?

- **Find YouTube channels by keyword**, niche or product, hundreds of search terms in one run
- Build **YouTube influencer lists** filtered by subscriber count, video count and verified badge
- Get each channel's **subscriber count, exact video count and exact total views**
- Get the **channel creation date**, country, description, keywords and **links to websites and social profiles**
- See which channels **list a business e-mail** for sponsorship outreach
- Re-run any **YouTube search URL**, including its filters
- Leave out channels you already know, and never get the same channel twice in a run
- Get results in seconds over the **real-time API**, without starting a run
- Export to Excel, CSV, JSON, HTML or XML, or send them to Google Sheets, Make, Zapier and more

### What data can you extract from YouTube channels?

| | | |
|---|---|---|
| 📺 Channel name | 🆔 Channel ID | 🏷️ Handle |
| 🔗 Channel link | 👥 Subscribers | 🎬 Number of videos |
| 👁️ Total views | 📅 Joined date | 🌍 Country |
| 📝 Description | 🔑 Keywords | 🌐 Website and social links |
| ✔️ Verified badge | ✉️ Business e-mail listed | 🖼️ Picture and banner |
| 📡 RSS feed | 🔎 Search term that found it | 🎞️ Video that led to it |

### How to scrape YouTube channels by keyword

1. [Create a free Apify account](https://console.apify.com/sign-up) (no credit card needed).
2. Open **YouTube Channel Search Scraper**.
3. Add one or more **search terms**, for example `coffee roasting` or `personal finance`, or paste YouTube search links.
4. Click **Start**.
5. When the run finishes, download the channels as Excel, CSV, JSON, HTML or XML.

### ⬇️ Input

| Setting | What it does |
|---|---|
| Find channels by | **Channel results and video results** (the most channels), **Channel results** (what YouTube lists under the Channels filter) or **Video results** (the channels behind the videos a search finds) |
| Search terms | Topics, products or kinds of creators to search for |
| YouTube search URLs | YouTube search pages, such as `https://www.youtube.com/results?search_query=chess`. A page with a filter (for example Channels, Playlists or This week) is searched with that filter; for playlists you get the channels that made them |
| Channels per search | Stop after this many channels for each search term or URL. Leave it empty to get every channel YouTube lists |
| Total channels | Stop after this many channels in the whole run |
| Minimum / Maximum subscribers | Only channels in this subscriber range |
| Minimum videos | Only channels with at least this many videos |
| Verified channels only | Only channels with YouTube's verified badge |
| Excluded channels | Channels to leave out, as `@handle`, a handle link or a `/channel/UC...` link |
| Search language / Search country | The language and country YouTube searches for, such as `en` and `US` |

Channels left out by the filters are not saved and not charged, and they do not count toward your limits.

Example:

```json
{
  "searchTerms": ["coffee roasting", "home espresso"],
  "discoveryMode": "both",
  "maxChannelsPerSearchTerm": 200,
  "minSubscribers": 10000,
  "maxSubscribers": 500000,
  "excludedChannels": ["@JamesHoffmann"]
}
```

### ⬆️ Output

You get one row per channel. You can view them as a table in Apify Console or download them as Excel, CSV, JSON, HTML or XML. Fields a channel does not show (for example, a country) are empty.

```json
{
  "channelId": "UCLe_q9axMaeTbjN0hy1Z9xA",
  "handle": "@CalebHammer",
  "title": "Caleb Hammer",
  "url": "https://www.youtube.com/@CalebHammer",
  "channelUrl": "https://www.youtube.com/channel/UCLe_q9axMaeTbjN0hy1Z9xA",
  "description": "Having the conversations that I wish someone had with me over a decade ago...",
  "isVerified": true,
  "isFamilySafe": true,
  "subscribers": 3830000,
  "subscriberText": "3.83M subscribers",
  "subscriberCountIsExact": false,
  "videos": 4894,
  "videoText": "4,894 videos",
  "totalViews": 4481734366,
  "totalViewText": "4,481,734,366 views",
  "country": "United States",
  "joinedDate": "2020-05-20",
  "joinedText": "Joined May 20, 2020",
  "hasBusinessEmail": true,
  "externalLinks": [
    {"title": "Website", "url": "https://www.calebhammer.com"},
    {"title": "Stan Store", "url": "https://stan.store/calebhammer"}
  ],
  "keywords": ["personal finance", "budgeting", "financial education", "dave ramsey"],
  "rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCLe_q9axMaeTbjN0hy1Z9xA",
  "avatarUrl": "https://yt3.googleusercontent.com/gW5N5sL574VGFhCfRXh5Hkmr2B3f6iQZ...=s900-c-k-c0x00ffffff-no-rj",
  "bannerUrl": "https://yt3.googleusercontent.com/hpHDjaIDPLk12AjY8eUpo1syn0zmK62m...=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
  "source": "personal finance",
  "sourceKind": "keyword",
  "discoverySurface": "video_results",
  "rank": 23,
  "sourceUrl": "https://www.youtube.com/results?search_query=personal+finance&hl=en&gl=US&sp=CAMSAhAB",
  "sourceVideo": {
    "videoId": "XT02_pqmbeM",
    "title": "I Finally Snapped | Financial Audit",
    "url": "https://www.youtube.com/watch?v=XT02_pqmbeM",
    "publishedText": "2 months ago",
    "viewText": "2,611,287 views"
  },
  "fetchedAt": "2026-09-26T07:29:30Z"
}
```

`source`, `discoverySurface`, `rank` and `sourceUrl` tell you where the run first found the channel. `sourceVideo` is the video that led to it when it was found in video results, and empty when it was found in channel results.

Each run also saves a short report with how many search terms it covered and any search it could not complete, with the reason.

### How can I use YouTube channel data?

- **Influencer discovery:** find creators in your niche and sort them by subscribers, views and videos
- **Sponsorship and outreach lists:** keep the channels that list a business e-mail, a website or social links
- **Competitor research:** map every channel publishing about your product category
- **Market research:** see how many channels cover a topic, how big they are and where they are based
- **Lead generation:** build lists of brands and agencies active on YouTube, with their websites
- **Tracking new creators:** run the same searches on a schedule and compare channels and counts over time

### How to find YouTube influencers in a niche

1. Add a few search terms that describe the niche, for example `vegan recipes`, `plant based meal prep`.
2. Choose **Channel results and video results** to find the most channels.
3. Set **Minimum subscribers** and **Maximum subscribers** to the audience size you want, for example 10,000 to 500,000.
4. Add channels you already work with to **Excluded channels**.
5. Start the run and sort the table by subscribers, or filter on `hasBusinessEmail` to see who accepts business inquiries.

### Real-time YouTube channel search API

Need channels right away inside your app? Call the actor's API and get them back in the response, without starting a run:

```
GET https://<your-actor-standby-url>/search?term=coffee%20roasting&limit=20&minSubscribers=10000
Authorization: Bearer <YOUR_APIFY_TOKEN>
```

`term` can also be a YouTube search link. The same filters are available: `mode`, `minSubscribers`, `maxSubscribers`, `minVideos`, `verifiedOnly`, `language` and `country`.

You can also run the actor from your own code with the [Apify API](https://docs.apify.com/api/v2) or the Python and JavaScript clients:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("automly/youtube-channel-search-scraper").call(run_input={
    "searchTerms": ["coffee roasting", "home espresso"],
    "maxChannelsPerSearchTerm": 100,
    "minSubscribers": 5000,
})
for channel in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(channel["title"], channel["subscribers"], channel["country"], channel["url"])
```

### ❓FAQ

#### How much does it cost to scrape YouTube channels?

You pay only for the channels you get, per 1,000 channels. Channels left out by your filters are not charged. See the **Pricing** tab for the current price. Every Apify account gets $5 of free usage each month, so you can try it at no cost.

#### How many channels can I get from one search term?

Usually 700 to 800 channels for a popular topic when you find channels by channel results and video results, and about 450 with channel results only. That is how many different channels YouTube itself lists for the search. Narrow topics give fewer. Add more search terms (synonyms, related products, other languages) to find more channels; a channel found by several terms is saved once.

#### Why is the subscriber count approximate?

YouTube shows the exact number only for channels under 1,000 subscribers. Above that it shows a rounded number, such as "3.83M". You get it as a number (3830000) you can sort and filter, `subscriberText` as YouTube shows it, and `subscriberCountIsExact` tells you whether the number is exact. Video counts and total views are exact numbers.

#### Can I get the business e-mail address of a channel?

No. YouTube shows the address only to signed-in viewers, and this scraper does not sign in. `hasBusinessEmail` tells you whether the channel lists one, so you know which channels accept business inquiries through YouTube. Many channels also list a website or social profiles, which you get in `externalLinks`.

#### Why is the subscriber count empty for some channels?

Some channels hide their subscriber count. Their rows have every other field, and they are left out when you set a subscriber filter.

#### Can I use a YouTube search link instead of keywords?

Yes. Paste links like `https://www.youtube.com/results?search_query=chess&sp=EgIQAg%253D%253D` into **YouTube search URLs**. A link with a filter (Channels, Videos, upload date, sort order) is searched with exactly that filter.

#### Can I search in another language or country?

Yes. Set **Search language** (for example `de`) and **Search country** (for example `DE`). Channel counts and dates stay in the same format whatever the language, so filters and spreadsheets work the same.

#### Do I need a YouTube account or API key?

No. You don't need a YouTube account, cookies or a YouTube Data API key, and there is no daily quota.

#### Is it legal to scrape YouTube channels?

This scraper only collects information that channels show publicly to every visitor. It does not collect private data such as e-mail addresses. Channel pages can still contain personal data, which may be protected by laws such as GDPR, so only scrape it for a legitimate reason and ask a lawyer if you are unsure. You can read more in [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

YouTube Channel Search Scraper is an independent tool. It is not affiliated with, endorsed by or sponsored by YouTube or Google.

#### Something isn't working. What should I do?

Open the **Issues** tab and tell us the search term and what you expected. We usually reply within a day.

# Actor input Schema

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

Channel results are what YouTube lists under the Channels filter; video results add the channels behind the videos a search finds. Both finds the most channels.

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

Topics, products or kinds of creators to search for, one per line.

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

YouTube search result pages, e.g. https://www.youtube.com/results?search\_query=chess. A page with a filter (for example Channels) is searched with that filter.

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

Stop after this many channels for each search term or URL. Leave it empty to get every channel YouTube lists.

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

Stop after this many channels in the whole run. Leave it empty for no limit.

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

Only channels with at least this many subscribers. Channels that hide their subscriber count are left out.

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

Only channels with at most this many subscribers. Channels that hide their subscriber count are left out.

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

Only channels with at least this many videos.

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

Only channels with YouTube's verified badge.

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

Channels to leave out: @handle, https://www.youtube.com/@handle or https://www.youtube.com/channel/UC... links.

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

Two-letter language code YouTube searches in, e.g. en, de, es.

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

Two-letter country code YouTube ranks results for, e.g. US, GB, IN.

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

Proxy settings. The default works for most runs.

## Actor input object example

```json
{
  "discoveryMode": "both",
  "searchTerms": [
    "coffee roasting"
  ],
  "maxChannelsPerSearchTerm": 50,
  "verifiedOnly": false,
  "languageHint": "en",
  "countryHint": "US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `discovery` (type: `string`):

No description

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

No description

## `report` (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 = {
    "searchTerms": [
        "coffee roasting"
    ],
    "maxChannelsPerSearchTerm": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/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": ["coffee roasting"],
    "maxChannelsPerSearchTerm": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/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": [
    "coffee roasting"
  ],
  "maxChannelsPerSearchTerm": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automly/youtube-channel-search-scraper --silent --output-dataset

```

## MCP server setup

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