# YouTube Similar Channels Finder (`maximedupre/youtube-similar-channels`) Actor

Find public YouTube channels similar to a channel reference or topic. Get ranked matches with scores, discovery evidence, public channel data, audience metrics, and filters in an Apify dataset.

- **URL**: https://apify.com/maximedupre/youtube-similar-channels.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$18.00 / 1,000 similar channels

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

### 🔎 Find YouTube channels that match your topic

If you are a marketer, agency, creator, researcher, or developer, use this Actor to find public YouTube channels similar to a channel reference or a topic. It returns one row for each first eligible matching channel, with a similarity score, the first discovery input, channel identity and URL, public profile data, audience metrics, topic keywords, and YouTube related-channel status. Use the rows to research competitors, find creators, or feed a machine-readable workflow.

- Compare a known channel in **[Social Blade Similar Channels](https://apify.com/maximedupre/youtube-similar-channels/examples/social-blade-similar-channels)**.
- Compare channels with **[Similar Tube Alternative](https://apify.com/maximedupre/youtube-similar-channels/examples/similar-tube-alternative)**.
- Try a browser extension workflow in **[Similar Channels Extension](https://apify.com/maximedupre/youtube-similar-channels/examples/similar-channels-extension)**.
- Review a run example in **[Find Similar YouTube Channels Free](https://apify.com/maximedupre/youtube-similar-channels/examples/find-similar-youtube-channels-free)**.
- Start a new discovery search in **[Similar Channels](https://apify.com/maximedupre/youtube-similar-channels/examples/similar-channels)**.

#### 📊 Ranked YouTube channel matches

**One row per candidate**

Each saved row represents the first eligible occurrence of one public YouTube channel. If the same channel appears again through another seed or discovery path, the later match is ignored. `discoveryInput` records the channel reference or topic query that first led to the saved row.

**What the rows show**

Rows include a 0 to 100 similarity score, public channel identity and URLs, topic keywords, the observed YouTube related-channel status, audience and publishing metrics, profile links, dates, tags, creator signals, and commercial or trust signals when public values are available. Missing public values are `null`, and arrays can be empty. `hasPublicEmail` is only a flag. The email address is not returned.

#### ▶️ Run a YouTube similar-channel search

**Choose a discovery mode**

Select `Channel` to start with one or more public YouTube channel URLs, `@handles`, or channel IDs. Select `Topic` to search from a topic query. A channel search can use several references in one run.

**Set the search scope**

Choose `Focused`, `Balanced`, or `Broad` result breadth. Use filters when you want candidates with specific public subscriber, view, publishing, country, language, verification, family-friendliness, creator type, public-email, monetization, or sponsorship signals.

**Save the rows**

Set `Maximum candidates` when you want an optional stop. Leave it empty to return all available results until the source is exhausted. Then open the default dataset through the run output.

#### ⚙️ Input

Use one discovery method per run. `Channel` uses public channel references, and `Topic` uses a topic query. Leave optional filter fields empty to skip them.

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `discoveryMethod` | string | Required. Choose `channel` or `topic`. |
| `channelReferences` | string\[] | For `channel` mode, enter one or more public YouTube channel URLs, `@handles`, or channel IDs, one per line. |
| `topicQuery` | string | For `topic` mode, enter a topic or phrase for finding relevant public YouTube channels. |
| `resultBreadth` | string | Choose `focused`, `balanced`, or `broad` to set how broadly to search and return candidates. No choice guarantees a fixed number of results. |
| `maxItems` | integer | Optional stop for the number of candidates returned. Leave it empty to return all available results until the source is exhausted. |
| `filters` | object | Optional filters shared by Channel and Topic discovery. Leave a field empty to skip that filter. |
| `filters.minSubscribers` | integer | Keep candidates with at least this many public subscribers. |
| `filters.maxSubscribers` | integer | Keep candidates with no more than this many public subscribers. |
| `filters.minTotalViews` | integer | Keep candidates with at least this many public total views. |
| `filters.maxTotalViews` | integer | Keep candidates with no more than this many public total views. |
| `filters.minPublishedVideos` | integer | Keep candidates with at least this many published videos. |
| `filters.maxPublishedVideos` | integer | Keep candidates with no more than this many published videos. |
| `filters.minAverageVideoViews` | integer | Keep candidates whose average recent video views meet or exceed this value. |
| `filters.maxAverageVideoViews` | integer | Keep candidates whose average recent video views are at or below this value. |
| `filters.minAverageShortsViews` | integer | Keep candidates whose average recent Shorts views meet or exceed this value. |
| `filters.maxAverageShortsViews` | integer | Keep candidates whose average recent Shorts views are at or below this value. |
| `filters.countries` | string\[] | Keep candidates from one or more countries. Enter country names or codes, one per line. |
| `filters.languages` | string\[] | Keep candidates with one of these primary languages. Enter language names or codes, one per line. |
| `filters.verification` | string | Choose `any` or `verified` for the public verification signal. |
| `filters.familyFriendliness` | string | Choose `any` or `familyFriendly` for the public family-friendliness signal. |
| `filters.creatorTypes` | string\[] | Keep candidates with one or more public creator classifications, such as individual, organization, or brand. |
| `filters.publicEmail` | string | Choose `any`, `hasEmail`, or `noEmail` for the public email signal. |
| `filters.monetization` | string | Choose `any` or `monetized` for the public monetization signal. |
| `filters.sponsorship` | string | Choose `any` or `hasSponsorship` for the public sponsorship signal. |

**Successful default-input QA run**

This is the public input from a successful current-beta run using the default channel setup.

```json
{
  "discoveryMethod": "channel",
  "channelReferences": [
    "https://www.youtube.com/@Google"
  ],
  "resultBreadth": "balanced",
  "maxItems": 6
}
```

#### 🧾 Output

The run output exposes `datasetItems` as a string link to the result rows in the default dataset. The default dataset rows use the single shape below for both Channel and Topic discovery. A valid run can return no rows when no candidate is available or passes the selected filters.

**Similar channel row**

| Field | Type | What it does |
|---|---|---|
| `discoveryMethod` | string | Shows whether the row came from `channel` or `topic` discovery. |
| `discoveryInput` | string | The one submitted channel reference or topic query that first led to this candidate. Later matches are not included. |
| `channelId` | string | Stable public YouTube channel ID for joins or later channel lookups. |
| `channelName` | string | Public name of the candidate channel. |
| `channelUrl` | string | Public URL for the candidate channel. |
| `similarityScore` | number | Score from 0 to 100. A higher score means closer topic or content relevance and audience-size proximity. |
| `topicKeywords` | string\[] | Public topic or keyword terms that support the match. The array can be empty. |
| `youtubeRelatedStatus` | string | `listed`, `notListed`, `empty`, or `notApplicable`, based on the available public YouTube related-channel list. |
| `youtubeRelatedRank` | integer or null | Observed one-based position in the related-channel list. It is `null` when the candidate was not listed or no seed list applied. |
| `subscribers` | integer or null | Public subscriber count, or `null` when unavailable. |
| `totalViews` | integer or null | Public total view count, or `null` when unavailable. |
| `publishedVideos` | integer or null | Public number of published videos, or `null` when unavailable. |
| `averageVideoViews` | integer or null | Average view count for recent regular videos, or `null` when unavailable. |
| `averageShortsViews` | integer or null | Average view count for recent Shorts, or `null` when unavailable. |
| `description` | string or null | Public channel description, or `null` when unavailable. |
| `avatarUrl` | string or null | Public channel avatar URL, or `null` when unavailable. |
| `bannerUrl` | string or null | Public channel banner URL, or `null` when unavailable. |
| `country` | string or null | Public country or region, or `null` when unavailable. |
| `createdDate` | string or null | Public channel creation date, or `null` when unavailable. |
| `tags` | string\[] | Public tags attached to the channel. The array can be empty. |
| `creatorType` | string or null | Public creator classification, such as individual, organization, or brand. |
| `gender` | string or null | Public gender signal for the creator, or `null` when unavailable. |
| `language` | string or null | Public primary language, or `null` when unavailable. |
| `isVerified` | boolean or null | Public verification signal, or `null` when unavailable. |
| `isFamilyFriendly` | boolean or null | Public family-friendliness signal, or `null` when unavailable. |
| `hasPublicEmail` | boolean or null | Whether a public email is reported. The email address is not returned. |
| `isMonetized` | boolean or null | Public monetization signal, or `null` when unavailable. |
| `hasSponsorship` | boolean or null | Public sponsorship signal, or `null` when unavailable. |

**Genuine current-beta row**

This complete row came from the successful default-input QA run. It shows the first saved match for the submitted Google channel reference.

```json
{
  "discoveryMethod": "channel",
  "discoveryInput": "https://www.youtube.com/@Google",
  "channelId": "UCJS9pqu9BzkAMNTmzNMNhvg",
  "channelName": "Google Cloud Tech",
  "channelUrl": "https://www.youtube.com/@googlecloudtech",
  "similarityScore": 92.1,
  "topicKeywords": [
    "Google Cloud",
    "Cloud Developers",
    "Google Developers",
    "Cloud Computing",
    "Cloud Infrastructure",
    "AI Builders",
    "AI Developers"
  ],
  "youtubeRelatedStatus": "empty",
  "youtubeRelatedRank": null,
  "subscribers": 1440000,
  "totalViews": 59532251,
  "publishedVideos": 2251,
  "averageVideoViews": 15215,
  "averageShortsViews": 2978,
  "description": "Welcome to the official YouTube channel for Google Cloud’s technical community. Explore our tutorials, see exciting demos, stay up to date with product news, and find new developer tools helping you build what’s next.",
  "avatarUrl": "https://yt3.googleusercontent.com/_XJ_FbhTDiTg7Zhr328vkGrw99p8-uQ3Y1nW2KZozueF_nkixmIhAbF2hUMFB9lUqMwSBo4etlY=s72-c-k-c0x00ffffff-no-rj",
  "bannerUrl": "https://yt3.googleusercontent.com/ge6YDY1UngkGMzt6A2C12a-lN7YO-DCF0uwdn1Dd5OoDmNTDEJiOOqf1XBH01T2bhT3FmJi4=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
  "country": "United States",
  "createdDate": "2014-07-21",
  "tags": [
    "Google Cloud",
    "Cloud Developers",
    "Google Developers",
    "Cloud Computing",
    "Cloud Infrastructure",
    "AI Builders",
    "AI Developers"
  ],
  "creatorType": null,
  "gender": null,
  "language": null,
  "isVerified": true,
  "isFamilyFriendly": true,
  "hasPublicEmail": false,
  "isMonetized": null,
  "hasSponsorship": null
}
```

#### 💳 Pricing

**Per saved channel**

Each saved similar channel costs `$0.018`. This is the `similar-channel-discovered` event, and it is not a one-time event. No separate run-start event is listed.

#### 🔌 Integrations

**Watch the input walkthrough**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

**Use the dataset**

The output link opens the default dataset. Its rows are machine-readable and available through the Apify API for programmatic processing.

#### ❓ FAQ

##### Can I find similar channels without a seed channel?

Yes. Choose `Topic` and enter a topic query. You can also choose `Channel` and enter one or more public channel references.

##### What counts as a channel reference?

Use a public YouTube channel URL, an `@handle`, or a channel ID. Enter one reference per line when you use Channel discovery.

##### What does the similarity score mean?

The score runs from 0 to 100. A higher score means closer topic or content relevance and audience-size proximity. It is a similarity signal, not YouTube’s private recommendation formula.

##### Why is a field `null` or an array empty?

The public source may not provide every value. The Actor keeps an unavailable value as `null` and can return an empty array when no public terms or tags are available.

##### What do the YouTube related statuses mean?

`listed` means the candidate appeared in the available public related-channel list. `notListed` means the list did not include it. `empty` means the list had no entries. `notApplicable` means no seed channel was used.

##### How are duplicate channels handled?

The first eligible occurrence is saved. If the same channel appears again through another seed or discovery path, the later match is ignored. `discoveryInput` shows the reference or topic that first led to the saved row.

##### Can I ask for all available matches?

Yes. Leave `maxItems` empty to return all available results until the source is exhausted. Result breadth and source coverage still affect how many candidates are available, so no fixed count is guaranteed.

##### Does the Actor return email addresses?

No. `hasPublicEmail` only says whether a public email is reported for the channel. The email address itself is not returned.

##### What happens when no channel passes my filters?

The run can return an empty dataset. This is a valid outcome when no available candidate meets the source and filter conditions.

### 📝 Changelog

**v0.0** (02-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~youtube-similar-channels/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [YouTube Channel Search Scraper](https://apify.com/maximedupre/youtube-channel-search-scraper): Find public YouTube channels from keywords when you need a starting list.
- [YouTube Channel Statistics Scraper](https://apify.com/maximedupre/youtube-channel-statistics-scraper): Enrich a known channel with subscribers, views, video count, profile fields, images, and a source URL.
- [YouTube Channel Scraper](https://apify.com/maximedupre/youtube-channel-scraper): Collect a channel profile and recent videos after you identify a channel.
- [Influencer Scraper](https://apify.com/maximedupre/influencer-scraper): Find public creator profiles across YouTube and other social platforms for broader creator research.
- [Search Similar YouTube Channels by Content, Not Keywords](https://apify.com/dataovercoffee/youtube-channel-lookalike-finder): Compare content-based channel lookalikes when you want another similar-channel workflow.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `discoveryMethod` (type: `string`):

Choose Channel to start from public channel references, or Topic to search from a topic query.

## `channelReferences` (type: `array`):

Enter one or more public YouTube channel URLs, @handles, or channel IDs. Use one reference per line. This option is used for Channel discovery.

## `topicQuery` (type: `string`):

Enter a topic or phrase for finding relevant public YouTube channels. This option is used for Topic discovery.

## `resultBreadth` (type: `string`):

Choose how broadly to search for and return candidates. The available count depends on source coverage, so no choice guarantees a fixed number of results.

## `maxItems` (type: `integer`):

Optional stop for the number of candidates returned. If omitted, the Actor returns all candidates found for the selected breadth until genuine source exhaustion.

## `filters` (type: `object`):

Optional filters shared by Channel and Topic discovery. Leave a field empty to skip that filter. A selected filter only matches candidates with the needed public value.

## Actor input object example

```json
{
  "discoveryMethod": "channel",
  "channelReferences": [
    "https://www.youtube.com/@Google",
    "@NASA",
    "UC_x5XG1OV2P6uZZ5FSM9Ttw"
  ],
  "topicQuery": "renewable energy",
  "resultBreadth": "balanced",
  "maxItems": 6,
  "filters": {
    "minSubscribers": 1000,
    "countries": [
      "US"
    ],
    "publicEmail": "hasEmail"
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Open the result rows in the default dataset.

# 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 = {
    "discoveryMethod": "channel",
    "channelReferences": [
        "https://www.youtube.com/@Google"
    ],
    "resultBreadth": "balanced",
    "maxItems": 6
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/youtube-similar-channels").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 = {
    "discoveryMethod": "channel",
    "channelReferences": ["https://www.youtube.com/@Google"],
    "resultBreadth": "balanced",
    "maxItems": 6,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/youtube-similar-channels").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 '{
  "discoveryMethod": "channel",
  "channelReferences": [
    "https://www.youtube.com/@Google"
  ],
  "resultBreadth": "balanced",
  "maxItems": 6
}' |
apify call maximedupre/youtube-similar-channels --silent --output-dataset

```

## MCP server setup

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

```

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/NqqpJX1cYzXmRHqot/builds/dEJw1TuZSMlP9CxIa/openapi.json
