# YouTube Channel Finder — Search Channels by Niche (`seemuapps/youtube-channel-finder`) Actor

Find YouTube channels by keyword with subscriber, view, and engagement stats, upload cadence, country, emails, and social links — filter by size and activity.

- **URL**: https://apify.com/seemuapps/youtube-channel-finder.md
- **Developed by:** [Andrew](https://apify.com/seemuapps) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 channel founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## YouTube Channel Finder — Search Channels by Niche

Find YouTube channels in any niche by keyword and get back a vetted list with subscriber, view, and engagement stats, upload cadence, country, business emails, and social links - filtered to the exact audience size and activity level you want.

Type a topic like `home espresso` or `personal finance for students`, set a subscriber range, and get one clean row per channel, ready to export to JSON, CSV, Excel, or Google Sheets.

### What you get

For every matching channel:

**Identity**

- **channelId**, **channelUrl**, **handle**, **title**, **description**, **thumbnailUrl**
- **country**, **joinedAt**, **channelKeywords** (the creator's own tags), **topicCategories**

**Size and reach**

- **subscriberCount**, **totalViews**, **videoCount**, **avgViewsPerVideo**
- **sizeTier** - `nano` (<10k), `micro` (10k-100k), `mid` (100k-1M), `macro` (1M-10M), or `mega` (>10M)

**Recent activity** (from the channel's 10 latest uploads)

- **lastUploadAt** and **uploadsPerMonth** - is the channel still active, and how often does it post?
- **avgViewsRecent**, **avgLikesRecent**, **avgCommentsRecent** - what a new video actually gets today, not lifetime averages
- **engagementRate** - (likes + comments) / views, as a percentage
- **shortsShareRecent** - fraction of recent uploads that are Shorts
- **latestVideoTitle**, **latestVideoUrl**

**Contacts and links**

- **email** (business email when one is listed) and **allEmails**
- **website**, **instagram**, **tiktok**, **twitter**, **facebook**, **linkedin**, **discord**, **patreon**, **otherLinks**
- **externalLinks** - every link from the channel's About page with its label

**Provenance**

- **searchKeyword** and **searchRank** - which keyword surfaced the channel and where it ranked

Channels are de-duplicated across keywords within a run.

### Use cases

- **Influencer discovery** - build a shortlist of creators in your niche within a subscriber range, with engagement rates and contact details in one export
- **Sponsorship and outreach lists** - find active channels with business emails and social handles for partnership campaigns
- **Competitor research** - map every channel competing for a topic and benchmark their size, cadence, and engagement
- **Niche validation** - check how many active channels exist for a topic before starting your own
- **Lead generation** - locate brand channels (agencies, e-commerce, SaaS) publishing on a subject
- **Market sizing** - aggregate subscribers and views per country for a category

### How to use

1. Enter one or more **Keywords**, one per line. Longer, specific phrases give tighter niches.
2. Set **Max channels per keyword** (default 50, `0` for as many as possible).
3. Optionally narrow the results:
   - **Min / Max subscribers** - e.g. 10,000 to 100,000 for micro-influencers
   - **Countries** - two-letter codes such as `US`, `GB`, `AU`
   - **Active within (days)** - only channels that uploaded recently
4. Leave **Include recent activity stats** and **Include About-page links and contacts** on for the full enrichment, or turn them off for a faster, lighter run.
5. Run the actor - results stream into the **Dataset** tab as they are matched.

### Output format

Each dataset record:

```json
{
  "channelId": "UCZoHGo5fFAVhYAEJmAIAobQ",
  "channelUrl": "https://www.youtube.com/@veganricharecipes",
  "handle": "@veganricharecipes",
  "title": "Vegan Richa",
  "description": "Hi! I am Richa. I share easy vegan recipes...",
  "thumbnailUrl": "https://yt3.ggpht.com/...",
  "subscriberCount": 67900,
  "totalViews": 7186530,
  "videoCount": 1617,
  "avgViewsPerVideo": 4444,
  "sizeTier": "micro",
  "country": "US",
  "joinedAt": "2015-05-07T00:59:20Z",
  "channelKeywords": ["vegan", "food", "recipes"],
  "topicCategories": ["Lifestyle (sociology)", "Food"],
  "externalLinks": [
    { "title": "Visit Vegan Richa Blog", "url": "veganricha.com" },
    { "title": "Instagram", "url": "instagram.com/veganricha" }
  ],
  "lastUploadAt": "2026-09-02T04:04:12Z",
  "recentVideosAnalyzed": 10,
  "uploadsPerMonth": 13.1,
  "avgViewsRecent": 10737,
  "avgLikesRecent": 320,
  "avgCommentsRecent": 17,
  "engagementRate": 3.14,
  "shortsShareRecent": 0.7,
  "latestVideoTitle": "Carrot Cake bites in 15 minutes!",
  "latestVideoUrl": "https://www.youtube.com/watch?v=VSxBpfjwA_0",
  "email": null,
  "allEmails": [],
  "website": "https://veganricha.com/",
  "instagram": "https://instagram.com/veganricha",
  "tiktok": null,
  "twitter": "https://x.com/veganricha",
  "facebook": "https://facebook.com/veganricha",
  "linkedin": null,
  "discord": null,
  "patreon": null,
  "otherLinks": ["https://pinterest.com/veganricha"],
  "searchKeyword": "vegan cooking",
  "searchRank": 1
}
```

### Pricing

You pay a small fixed amount per channel returned after filters are applied. Channels that are searched but filtered out cost nothing.

### Tips

- Use several phrasings of the same niche (`home espresso`, `espresso machine review`, `latte art tutorial`) to widen coverage; duplicates are removed automatically.
- Pair **Max subscribers** with **Active within (days)** to surface rising creators who still reply to outreach.
- Many creators only list a business email inside YouTube's protected "view email" button, which is not public. The **email** field is filled when the address appears in the channel description.
- Combine with the **YouTube Similar Channels Finder** to expand from your best matches to their lookalikes.

### FAQ

**Does it need my YouTube login?**
No. Everything comes from public channel data.

**Why is `country` empty for some channels?**
Creators choose whether to display a country. When you filter by **Countries**, channels without a declared country are excluded.

**How current are the stats?**
They are fetched live during the run.

# Actor input Schema

## `keywords` (type: `array`):

Niche or topic keywords to search channels for, one per line (e.g. "home espresso", "vegan cooking", "personal finance for students").

## `maxChannelsPerKeyword` (type: `integer`):

Maximum number of matching channels to return for each keyword after filters are applied. Set 0 for as many as possible (up to 1,000 per keyword).

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

Only return channels with at least this many subscribers. 0 = no minimum.

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

Only return channels with at most this many subscribers. 0 = no maximum. Useful for targeting micro-influencers (e.g. 10,000-100,000).

## `countries` (type: `array`):

Optional two-letter country codes (US, GB, AU, DE, ...). Only channels that publicly declare one of these countries are returned. Leave empty for all countries.

## `lastUploadWithinDays` (type: `integer`):

Only return channels that uploaded a video within this many days. 0 = no activity filter.

## `includeRecentActivity` (type: `boolean`):

Analyze each channel's 10 latest uploads to compute last upload date, uploads per month, average views, likes, comments, engagement rate, and Shorts share. Adds a little runtime per channel.

## `includeLinks` (type: `boolean`):

Read each channel's About panel to collect external links (website, Instagram, TikTok, X, Facebook, LinkedIn, Discord, Patreon) and extract business emails from the description.

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

Optional. Leave off by default. Enable Apify Proxy only if YouTube starts blocking requests from the default network.

## Actor input object example

```json
{
  "keywords": [
    "vegan cooking"
  ],
  "maxChannelsPerKeyword": 50,
  "minSubscribers": 0,
  "maxSubscribers": 0,
  "countries": [],
  "lastUploadWithinDays": 0,
  "includeRecentActivity": true,
  "includeLinks": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One record per channel: channelId, channelUrl, handle, title, description, thumbnailUrl, subscriberCount, totalViews, videoCount, avgViewsPerVideo, sizeTier, country, joinedAt, channelKeywords, topicCategories, externalLinks, lastUploadAt, uploadsPerMonth, avgViewsRecent, avgLikesRecent, avgCommentsRecent, engagementRate, shortsShareRecent, latestVideoTitle, latestVideoUrl, email, allEmails, website, instagram, tiktok, twitter, facebook, linkedin, discord, patreon, otherLinks, searchKeyword, searchRank.

# 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 = {
    "keywords": [
        "vegan cooking"
    ],
    "countries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/youtube-channel-finder").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 = {
    "keywords": ["vegan cooking"],
    "countries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/youtube-channel-finder").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 '{
  "keywords": [
    "vegan cooking"
  ],
  "countries": []
}' |
apify call seemuapps/youtube-channel-finder --silent --output-dataset

```

## MCP server setup

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

```

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/HOnSeM1vJUc0PCTtg/builds/ntB1TRmKKpW5jwoXm/openapi.json
