# YouTube Channel Finder (`socialdataapi/youtube-channel-finder`) Actor

YouTube Channel Finder — Discover YouTube channels by keywords, niches, or topics. Extract channel names, URLs, descriptions, subscriber counts, total views, video counts, and profile details. Useful for influencer discovery, lead generation, competitor research, and creator marketing.

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

## Pricing

from $2.99 / 1,000 results

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 Finder — Subscribers, Handles, Links and Join Dates

YouTube Channel Finder finds YouTube channels by keyword or from channel and video links, and returns each channel's public About data. You get the name, handle, channel ID, subscriber count, description, country, join date, total views, video count, external links and any e-mail the channel published. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed an influencer marketing pipeline. **No YouTube account or cookies needed.** Start with one niche keyword, then build lists for every market you target.

***

### What data can I extract with YouTube Channel Finder?

Using this YouTube Channel API, you will be able to extract the following YouTube channel data:

| 📺 Channel name | 🏷️ Handle (@name) | 🆔 Channel ID | 👥 Subscriber count (as shown) |
|---|---|---|---|
| 📝 About description | ✉️ Self-published e-mail (if available) | 📍 Country (if stated) | 🔗 External links (title and URL) |
| 📅 Join date | 👁️ Total views | 🎬 Video count | 🌐 Channel URL |
| 🧭 Canonical handle link | 🔎 Keyword that found the channel | | |

***

### How to use YouTube Channel Finder

Creator marketers, agencies and analysts get a ready list of YouTube channels with their headline numbers and contact links from one run.

**Copy to your AI assistant:**

```text
YouTube Channel Finder is an Apify Actor (its ID is on its Apify Store page) that returns YouTube channels found by keyword search or from channel, handle and video links as structured JSON: channel name, handle, channel ID, subscriber count, About description, country, join date, total views, video count, external links and the e-mail address a channel published itself. Use it whenever someone needs YouTube channel data without cookies, a login, or a browser - building an influencer shortlist for a niche, mapping the creators in a market, or turning a list of video links into the channels behind them. Run it with curl by sending a POST with -H "Content-Type: application/json" and the body '{"keywords":["python tutorials"],"channelCount":10}' to this Actor's run-sync-get-dataset-items endpoint in the Apify API with token=APIFY_TOKEN. Or in Python: ApifyClient("APIFY_TOKEN").actor(...).call(run_input={"keywords": ["python tutorials"], "channelCount": 10}) with this Actor's ID, then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: keywords (array of strings, search terms, one search per keyword), urls (array of strings, channel, handle or video links looked up directly; non-YouTube entries are skipped), channelCount (integer 1-50000, channels saved per keyword, default 10; YouTube's search for one keyword usually ends after a few hundred channels), searchRegion (string, "US"|"GB"|"CA"|"AU"|"IN"|"DE"|"FR"|"JP"|"BR"|"MX"|"ES"|"IT"|"NL"|"PL"|"RU"|"KR"|"TW", default "US"), language (string, "en"|"es"|"de"|"fr"|"pt"|"ja"|"hi"|"zh"|"ko"|"ar"|"ru", language of the returned text, default "en"), fromDate (string YYYY-MM-DD, joined on or after), toDate (string YYYY-MM-DD, joined on or before), proxyConfiguration (object, optional Apify Proxy settings, off by default). Give keywords, urls or both. Billing: one row_result event per channel saved to the dataset; channels removed by the join-date filter, links that lead to no channel and channels YouTube no longer shows add no rows and cost nothing. The e-mail field holds only an address the channel published in its own links or description, never YouTube's sign-in-only business e-mail, and is null when there is none. Full input schema, every enum and default, and the complete output field list: GET this Actor's builds/default endpoint in the Apify API.
```

#### YouTube Channel Finder MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at the Apify MCP server and it can read YouTube channels on its own: the server's search, add and call actor tools find this Actor and run it for you. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open YouTube Channel Finder in the Apify Store.
3. Type your YouTube search keywords, paste channel or video links, or both.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale YouTube Channel Finder to bulk

Both inputs are lists. Add one keyword per line to find YouTube channels by keyword across a whole topic map: YouTube's search for one keyword usually ends after a few hundred channels, so to collect thousands, add more keywords rather than raising the per-keyword number. Twenty keywords at the default of 10 can give 200 channels in one run. For a bulk YouTube channel lookup, paste hundreds of channel, handle or video links into the URL list and each one becomes one row. Keywords run one after another, then the links. Save the input as a task and schedule it weekly to keep a YouTube channel list by niche current, then merge runs on the channel ID.

***

### ✨ Features

YouTube Channel Finder fetches clean, structured channels from YouTube, working as a YouTube channel search scraper for keywords and as a YouTube channel scraper for links you already have. It's ideal for influencer discovery, creator outreach lists, niche market mapping and competitor research.

It extracts, per channel:

- **Subscriber count** – exactly as YouTube shows it, e.g. "5.17M subscribers", so it doubles as a YouTube subscriber count scraper
- **Handle and channel ID** – the @name and the stable ID that survives name changes
- **About description** – the channel's own text about itself
- **Self-published e-mail** – as a YouTube channel email finder it returns only an address the channel lists in its own links or description, never YouTube's sign-in-only business e-mail
- **External links** – website, shop and social profiles, with YouTube's redirect removed
- **Total views and video count** – whole numbers, ready to sort
- **Join date and country** – as stated on the channel's About page

⚡ A video link works as input too, and links that lead to no channel are skipped at once without extra cost.

***

### Use cases 💡

- **Influencer manager** — shortlist niche creators by subscriber count and published contact e-mail.
- **Agency strategist** — compare total views and video counts across a keyword's channels.
- **Market analyst** — use the join-date filter to find channels launched since 2023.
- **Partnerships lead** — turn competitor video links into channel IDs and website links.
- **AI agent builder** — index channel descriptions and links in a RAG pipeline.

Building an AI agent? [Connect YouTube Channel Finder over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **A full keyword list in seconds.** A recorded run returned 12 channels in 2.5 seconds: 10 for the keyword "python tutorials" after the join-date filter removed 2, plus the channels behind one handle link and one video link.
- **The numbers behind each channel.** One recorded channel came back with "5.17M subscribers", 282,469,724 total views, 246 videos, 7 external links and the contact e-mail it publishes in its description.
- **14 fields, 8 settings.** Every channel carries the same 14 fields, and eight settings cover keywords, links, results per keyword, 17 search regions, 11 languages, a join-date range and the proxy.

***

### ⬇️ Input

The actor accepts search keywords, channel or video links, or both, each as a list. No single field is required, but at least one keyword or one YouTube link is needed.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `keywords` | No | array | Search terms, one per line. Each keyword runs a YouTube channel search and saves up to the per-keyword limit. | `["python tutorials"]` |
| `urls` | No | array | Channel, handle or video links looked up directly. A video link returns the channel that published it. Entries that are not youtube.com or youtu.be links are skipped. | `["https://www.youtube.com/@apify"]` |
| `channelCount` | No | integer | Channels saved per keyword, 1–50000. Channels removed by the join-date filter do not count. YouTube's search for one keyword usually ends after a few hundred channels. Default 10. | `10` |
| `searchRegion` | No | string | Country for the search and channel pages: US, GB, CA, AU, IN, DE, FR, JP, BR, MX, ES, IT, NL, PL, RU, KR, TW. Default `"US"`. | `"US"` |
| `language` | No | string | Language of the returned text (subscriber text, country, join date): en, es, de, fr, pt, ja, hi, zh, ko, ar, ru. Default `"en"`. | `"en"` |
| `fromDate` | No | string | Keep channels that joined on or after this date, YYYY-MM-DD. Empty means no filter. | `"2010-01-01"` |
| `toDate` | No | string | Keep channels that joined on or before this date, YYYY-MM-DD. Empty means no filter. | `"2025-12-31"` |
| `proxyConfiguration` | No | object | Optional Apify Proxy for the first try of each request. Off by default; blocked requests are retried through a residential proxy. | `{"useApifyProxy": false}` |

Accepted link formats: `https://www.youtube.com/@handle`, `https://www.youtube.com/channel/UC…`, `https://www.youtube.com/watch?v=…`, `https://youtu.be/…`, `/shorts/`, `/live/` and `/embed/` video links.

#### Example input

This is the input of the recorded test run:

```json
{
  "keywords": ["python tutorials"],
  "urls": [
    "https://www.youtube.com/@apify",
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "channelCount": 10,
  "searchRegion": "US",
  "language": "en",
  "fromDate": "2010-01-01",
  "toDate": "2025-12-31",
  "proxyConfiguration": { "useApifyProxy": false }
}
```

***

### ⬆️ Output

Every channel is one typed, normalized JSON item with the same 14 fields on every run; values YouTube does not show are null, and rows from links carry an empty keyword. Export the dataset as JSON (default), CSV or Excel, so you can export YouTube channels to CSV in one click.

#### Example output

A real item from the recorded run:

```json
{
  "keyword": "python tutorials",
  "channelName": "Programming with Mosh",
  "userName": "@programmingwithmosh",
  "channelId": "UCWv7vMbMWH4-V0ZXdmDpPBA",
  "canonicalChannelUrl": "http://www.youtube.com/@programmingwithmosh",
  "subscriberCount": "5.17M subscribers",
  "description": "Hi! I'm Mosh 👋, a software engineer with over 20 years of experience.  I'm all about clear, concise, practical coding tutorials – no fluff, just the good stuff! My courses focus on real-world projects and the skills that will get you hired. I've helped millions of students transform their careers. \n\nWant to level up your skills? Subscribe and hit the bell to get notified when I upload new videos!\n\nFor sponsorships: partners@codewithmosh.com\n",
  "email": "partners@codewithmosh.com",
  "location": "United States",
  "links": [
    { "title": "🌙 Sleep Stories with Mosh", "url": "https://www.youtube.com/@tonightsleepapp" },
    { "title": "Courses", "url": "https://codewithmosh.com/courses" },
    { "title": "Newsletter", "url": "https://mosh.link/bytes" },
    { "title": "Twitter", "url": "https://twitter.com/moshhamedani" },
    { "title": "Facebook", "url": "https://facebook.com/programmingwithmosh" },
    { "title": "Instagram", "url": "https://www.instagram.com/codewithmosh.official/" },
    { "title": "LinkedIn", "url": "https://www.linkedin.com/school/codewithmosh/" }
  ],
  "joined_date": "Joined Oct 6, 2014",
  "channel_views": 282469724,
  "videos_uploaded": 246,
  "url": "https://www.youtube.com/channel/UCWv7vMbMWH4-V0ZXdmDpPBA"
}
```

***

### How does it work?

The actor reads the public About information of YouTube channels — the same details any visitor sees without logging in. It uses plain HTTP requests, with no browser, and needs no YouTube account, so no account is at risk.

For a keyword, it runs a YouTube channel search, collects the channels behind the results and reads each channel's About data, several at a time. For a link, it finds the channel behind it directly, with no search. Every channel is saved to your dataset as soon as it is ready. When YouTube blocks a request, the actor waits and retries through a residential proxy before it gives up on that channel. A link that leads to no channel is skipped at once.

Field names and types stay the same on every run, even when YouTube changes its pages.

***

### How do you integrate YouTube Channel Finder into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### MCP integration for AI agents

Add the Apify MCP server to your agent with one command:

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

This registers the Apify MCP server, and its search, add and call actor tools let your agent find YouTube Channel Finder and call it directly as a tool. It works in Claude Code, Cursor and Windsurf, and any other client that supports MCP over HTTP. Your agent passes keywords or links as input and gets the channel items back as JSON.

#### No-code tools (n8n, Make, LangChain)

- **n8n** — add the Apify node, choose "Run an Actor" and pick this Actor, or use the HTTP Request node pointed at the run-sync endpoint with your token. The channel items come back as workflow items.
- **Make** — use the Apify app's "Run an Actor" module with your keywords, then the "Get Dataset Items" module to pass each channel to the next step.
- **LangChain** — install `langchain-apify` and wrap this Actor with `ApifyActorsTool`, using its ID from the Apify Store page, so your agent can request channels as a tool call.

***

### Is it legal to scrape YouTube data?

Scraping publicly visible YouTube channel data is generally legal, but how you store and use it is regulated. The actor returns only public data — the About details any user sees without logging in — and never signs in or opens YouTube's sign-in-only business e-mail. Many channels are run by individuals, so names, descriptions and self-published e-mail addresses can be personal data: under GDPR and similar laws you need a lawful basis to store and use them, and outreach e-mails must follow anti-spam rules such as CAN-SPAM. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does YouTube Channel Finder return?

It returns the channel name, handle, channel ID, subscriber count and About description, plus the country, join date, total views, video count, external links and a self-published e-mail. See [the data fields section](#what-data-can-i-extract-with-youtube-channel-finder) for the full list.

#### Does YouTube Channel Finder require a YouTube account or login?

No. Only public channel data is extracted. No credentials, cookies or API keys are needed.

#### How fast does YouTube Channel Finder run?

A recorded run saved 12 channels from one keyword and two links in 2.5 seconds. Data is fetched live on every run, never from a cache.

#### What happens if a channel is private or doesn't exist?

A link that leads to no channel, or a channel YouTube no longer shows, adds no row and costs nothing; the run continues with the rest. The run log names each skipped link, and the final status message counts them, so you can check the links and run them again.

#### Can I scrape multiple YouTube channels at once?

Yes. Add many keywords and many links in one run; each keyword returns up to the per-keyword number you set (YouTube's search usually ends after a few hundred channels per keyword) and each link returns one.

#### Does YouTube Channel Finder work with Claude, ChatGPT, and other AI agent tools?

Yes — YouTube Channel Finder is available as an MCP tool through the Apify MCP server. Register it in Claude Code, Cursor or Windsurf with:

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does YouTube Channel Finder return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names. No HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step.

#### What happens when YouTube changes its layout or updates its anti-bot system?

The actor is maintained. When YouTube changes, the actor is updated, and your calls keep returning the same JSON schema with no changes on your end.

#### Can I use YouTube Channel Finder without managing proxies or browser infrastructure?

Yes. Retries and the switch to a residential proxy when YouTube blocks a request happen on the actor's side. You send one request and get structured JSON back. No proxy accounts of your own, no headless browser setup, no maintenance.

#### Which YouTube channel fields work best for AI training data and RAG indexing?

For RAG: the text-rich fields — the About description, channel name and external link titles. For training data: total views, video count, join date and the stable channel ID; the subscriber count stays text exactly as YouTube shows it. All fields are typed primitives — strings, integers, lists — no normalization needed.

***

### Your feedback

Found a bug or missing a field? Let us know through the Issues tab of this Actor in Apify Console. Every report is read, and fixes ship in new builds so this YouTube influencer finder keeps matching what YouTube shows.

# Actor input Schema

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

Search terms to find YouTube channels, one per line (e.g. "cooking tutorials", "tech reviews"). Each keyword runs a YouTube channel search and returns up to "Max channels per search term" channels. Fill this list, the YouTube URL list, or both.

## `urls` (type: `array`):

Channel, handle or video links to look up directly, one per line, without a search (e.g. https://www.youtube.com/@apify, https://www.youtube.com/channel/UC..., https://www.youtube.com/watch?v=...). A video link returns the channel that published it. Entries that are not youtube.com or youtu.be links are skipped. Free plan: up to 20 URLs per run and 200 channels per month.

## `channelCount` (type: `integer`):

Maximum number of channels to save for each search keyword. Channels removed by the join-date filter do not count. YouTube's search for one keyword usually ends after a few hundred channels, so a keyword can return fewer than you ask for; add more keywords to collect more channels. Free plan: up to 20 per keyword and 200 per month; paid plans get the full requested amount.

## `searchRegion` (type: `string`):

Country used for the YouTube search and the channel pages. It changes which channels the search returns and the language of country names.

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

Language YouTube uses for the returned text: subscriber text, country, join date. View and video counts are always whole numbers. With English, German, Japanese, Korean, Chinese and Arabic the join-date filter uses the exact join day; with the other languages a join date is read as 1 January of the join year.

## `fromDate` (type: `string`):

Only save channels that joined on or after this date (YYYY-MM-DD). Leave empty for no filter. Channels whose join date cannot be read are kept.

## `toDate` (type: `string`):

Only save channels that joined on or before this date (YYYY-MM-DD). Leave empty for no filter. Channels whose join date cannot be read are kept.

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

Optional. By default the actor connects directly. If you enable Apify Proxy, it is used for the first try of every request. When YouTube blocks a request, the retries go through Apify's residential proxy. Own proxy URLs are not used by this actor.

## Actor input object example

```json
{
  "keywords": [
    "python"
  ],
  "urls": [
    "https://www.youtube.com/@apify"
  ],
  "channelCount": 10,
  "searchRegion": "US",
  "language": "en"
}
```

# Actor output Schema

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

YouTube channels discovered by keyword search or direct URL, with channel name, handle, channel ID, canonical URL, subscriber count, description, self-published email address, location, join date, view/video counts, and external links.

# 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": [
        "python"
    ],
    "urls": [
        "https://www.youtube.com/@apify"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/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": ["python"],
    "urls": ["https://www.youtube.com/@apify"],
}

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/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": [
    "python"
  ],
  "urls": [
    "https://www.youtube.com/@apify"
  ]
}' |
apify call socialdataapi/youtube-channel-finder --silent --output-dataset

```

## MCP server setup

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