# Influencer Discovery - Find Creators by Niche & Reach (`viralanalyzer/influencer-discovery-agent`) Actor

Discover influencers by niche, engagement rate, and audience size. Multi-platform search across Instagram, TikTok, YouTube, and Twitter.

- **URL**: https://apify.com/viralanalyzer/influencer-discovery-agent.md
- **Developed by:** [viralanalyzer](https://apify.com/viralanalyzer) (community)
- **Categories:** Social media, Marketing, Agents
- **Stats:** 74 total users, 5 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 4.82 out of 5 stars

## Pricing

from $42.00 / 1,000 influencer profile discovereds

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?

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

## 🔍 Influencer Discovery Agent — Find YouTube Creators by Niche with Engagement Metrics

> 🔗 [View on Apify Store](https://apify.com/viralanalyzer/influencer-discovery-agent) | 🇺🇸 English | [🇧🇷 Português](#português)

Discover **YouTube influencers by niche keyword**. Search for creators in any niche, filter by minimum subscribers, and get enriched profiles with subscriber counts, recent video metrics, engagement rates, and content analysis. Pure HTTP — fast and cost-effective, no browser needed.

### ✨ Features

- 🎯 **Niche keyword search** — Find influencers by topic ("fitness motivation", "tech review", "cooking recipes")
- 📊 **Engagement metrics** — Average views (last 10 videos) and engagement rate (views/subscribers)
- 👥 **Subscriber filtering** — Set minimum subscriber threshold to focus on the right tier
- 🎬 **Recent video data** — Last 10 videos with titles, views, publish dates, and durations
- ✅ **Verified badge detection** — Identifies verified channels and verified artists
- 🔄 **Enrichment toggle** — Full enrichment (visit channel page) or fast search-only mode
- 🛡️ **Anti-placeholder guardrails** — Every result validated against placeholder patterns
- ⚡ **Pure HTTP** — No browser needed, uses YouTube internal data extraction
- 💰 **Pay per result** — $0.08/influencer

### 📥 Input

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | string\[] | ✅ | — | Niche keywords to search (1-10 keywords) |
| `minSubscribers` | integer | ❌ | `1000` | Minimum subscriber count filter. Use 0 for no filter. |
| `maxResults` | integer | ❌ | `20` | Maximum influencer profiles to return (1-100) |
| `enrichDetails` | boolean | ❌ | `true` | Visit channel pages for video metrics and engagement rate. Disable for faster, basic-only results. |
| `proxyConfiguration` | object | ❌ | — | Proxy settings (recommended for large runs) |

#### Input Example

```json
{
  "keywords": [
    "fitness motivation",
    "home workout",
    "healthy meal prep"
  ],
  "minSubscribers": 5000,
  "maxResults": 30,
  "enrichDetails": true
}
```

### 📤 Output

Every influencer profile includes these fields:

| Field | Type | Description |
|---|---|---|
| `channelId` | string | YouTube channel ID |
| `name` | string | Channel name |
| `handle` | string | Channel handle (e.g., /@username) |
| `url` | string | Channel URL |
| `thumbnailUrl` | string | Channel profile picture |
| `bannerUrl` | string | Channel banner image |
| `verified` | boolean | Whether channel is verified |
| `subscribers` | number | Subscriber count (parsed from text) |
| `subscriberText` | string | Raw subscriber text (e.g., "1.23M subscribers") |
| `videoCount` | number | Total number of videos |
| `avgViewsLast10` | number | Average views of last 10 videos |
| `engagementRate` | number | avgViews / subscribers ratio |
| `description` | string | Channel description |
| `country` | string | Channel country |
| `recentVideoCount` | number | Number of recent videos analyzed |
| `recentVideos` | object\[] | Last 10 videos: {title, views, publishedText, duration} |
| `discoveredVia` | string | The keyword that found this channel |
| `platform` | string | Always `"youtube"` |
| `_dataQuality` | string | `"full"` (enriched) or `"search_only"` |
| `scrapedAt` | string | ISO 8601 timestamp |

#### Output Example

```json
{
  "channelId": "UCe0TLA0EsQbP-7JRGD8BoAg",
  "name": "JEFIT",
  "handle": "/@JEFITapp",
  "url": "https://www.youtube.com/channel/UCe0TLA0EsQbP-7JRGD8BoAg",
  "thumbnailUrl": "https://yt3.ggpht.com/ytc/AIdro_lCHzN1PSQ4KvJh...",
  "bannerUrl": "https://yt3.googleusercontent.com/0VvPqCMf...",
  "verified": false,
  "subscribers": 127000,
  "subscriberText": "127K subscribers",
  "videoCount": 245,
  "avgViewsLast10": 18420,
  "engagementRate": 0.145,
  "description": "JEFIT is the #1 workout tracking app...",
  "country": "US",
  "recentVideoCount": 10,
  "recentVideos": [
    {
      "title": "Best Push Pull Legs Routine for Muscle Growth (2026)",
      "views": 34521,
      "publishedText": "2 weeks ago",
      "duration": "12:34"
    },
    {
      "title": "5 Exercises You're Doing WRONG at the Gym",
      "views": 28103,
      "publishedText": "3 weeks ago",
      "duration": "8:47"
    }
  ],
  "discoveredVia": "fitness motivation",
  "platform": "youtube",
  "_dataQuality": "full",
  "scrapedAt": "2026-03-06T15:10:45.321Z"
}
```

### 📋 Use Cases

- 🤝 **Influencer Marketing** — Find creators in your niche for brand partnerships
- 🔎 **Competitor Research** — Discover which influencers cover your competitors
- 📝 **Content Strategy** — Analyze top-performing content formats and topics in a niche
- 📊 **Market Research** — Map the creator landscape for any industry vertical
- 📡 **Brand Monitoring** — Find channels that discuss topics related to your brand
- ⭐ **Talent Scouting** — Identify rising creators with high engagement rates

### ✅ Capabilities & Limits

Stated up front, so you do not pay a run to find out.

**Built here:** `videoCount` is not the channel's lifetime total. YouTube does not expose that in guest HTML, so the actor counts the video tiles rendered on the first `/videos` page - usually about 30, with no continuation fetch. Read it as "recent videos visible on page 1" and use `avgViewsLast10` or `recentVideos` for anything quantitative.

| Input / feature | Supported | Notes |
|---|---|---|
| **Platform** | ⚠️ **YouTube only** | despite the generic name, this discovers **YouTube** creators. It does not search Instagram, TikTok or X |
| Niche keywords | ✅ | `keywords` — required; each keyword triggers a separate channel search |
| Subscriber floor | ✅ | `minSubscribers`; `0` disables the filter |
| Engagement enrichment | ✅ | `enrichDetails` visits each channel for recent views and engagement rate — slower, far more useful |
| Creator contact e-mail | ❌ | not returned here — see `youtube-channel-leads-scraper-pro` |
| Audience demographics | ❌ | YouTube does not expose them publicly |
| Result volume | ⚠️ | `maxResults`; each profile is one billable event |
| Rate limiting | ⚠️ | a proxy is recommended for large runs |

### ❓ FAQ

**Q: How does the engagement rate work?**
A: Engagement rate is calculated as `avgViewsLast10 / subscribers`. For example, a channel with 100K subscribers averaging 15K views per video has a 0.15 (15%) engagement rate. Higher is better — it means the audience actively watches content.

**Q: What is the difference between "full" and "search\_only" data quality?**
A: With `enrichDetails: true` (default), the actor visits each channel's /videos page to get recent video metrics and calculate engagement rate — this produces "full" quality. With `enrichDetails: false`, only search result data is used (faster but no video metrics) — this produces "search\_only" quality.

**Q: Can I search for influencers in a specific language or country?**
A: The actor searches YouTube globally. Results depend on YouTube's search algorithm and the language of your keywords. Use keywords in the target language (e.g., Portuguese keywords for Brazilian creators) to find region-specific influencers.

**Q: How are duplicate channels handled across keywords?**
A: The actor automatically deduplicates channels across all keywords. If the same channel appears in results for "fitness motivation" and "home workout", it is only included once (attributed to the first keyword that found it).

**Q: Why do some channels show 0 for videoCount?**
A: Video count is extracted from the channel page during enrichment. If enrichment fails or is disabled, video count may show 0. The actor still provides subscriber count and search data for these channels.

### 💰 Pricing

This actor uses **Pay Per Event (PPE)** pricing:

| Metric | Cost |
|--------|------|
| Per influencer discovered | $0.08 |

For example, discovering 30 influencers costs $2.40.

### 🔗 Related Actors

- [YouTube Fast Scraper](https://apify.com/viralanalyzer/youtube-fast-scraper) — Deep-dive into specific channel videos
- [TikTok Viral Scanner](https://apify.com/viralanalyzer/tiktok-viral-scanner) — Discover TikTok creators
- [Instagram Reels Scraper](https://apify.com/viralanalyzer/instagram-reels-scraper) — Instagram influencer data
- [Google Trends Scraper](https://apify.com/viralanalyzer/google-trends-scraper) — Validate niche trending potential

### 📝 Changelog

#### v1.0 (Current)

- YouTube channel search by niche keyword (channel filter)
- Subscriber count parsing (K, M, B suffixes)
- Channel page enrichment with recent video metrics
- Engagement rate calculation (avgViews / subscribers)
- Verified channel/artist badge detection
- Cross-keyword deduplication
- Minimum subscriber filtering
- Cookie seeding to bypass YouTube consent pages
- Anti-placeholder guardrails
- PPE billing integration

***

<a name="português"></a>

## 🔍 Influencer Discovery Agent — Encontre Criadores do YouTube por Nicho com Métricas de Engajamento

> 🔗 [View on Apify Store](https://apify.com/viralanalyzer/influencer-discovery-agent) | [🇺🇸 English](#-influencer-discovery-agent--find-youtube-creators-by-niche-with-engagement-metrics) | 🇧🇷 Português

Descubra **influenciadores do YouTube por palavra-chave de nicho**. Busque criadores em qualquer nicho, filtre por mínimo de inscritos e obtenha perfis enriquecidos com contagem de inscritos, métricas de vídeos recentes, taxa de engajamento e análise de conteúdo. HTTP puro — rápido e econômico, sem browser.

### ✨ Funcionalidades

- 🎯 **Busca por nicho** — Encontre influenciadores por tópico ("fitness motivation", "tech review", "receitas saudáveis")
- 📊 **Métricas de engajamento** — Média de views (últimos 10 vídeos) e taxa de engajamento (views/inscritos)
- 👥 **Filtro de inscritos** — Defina mínimo de inscritos para focar no tier certo
- 🎬 **Dados de vídeos recentes** — Últimos 10 vídeos com títulos, views, datas e durações
- ✅ **Detecção de verificado** — Identifica canais verificados e artistas verificados
- 🔄 **Toggle de enriquecimento** — Enriquecimento completo (visita página do canal) ou modo rápido somente busca
- 🛡️ **Guardrails anti-placeholder** — Todo resultado validado contra padrões falsos
- ⚡ **HTTP puro** — Sem browser, usa extração interna de dados do YouTube
- 💰 **Pague por resultado** — $0.08/influenciador

### 📥 Entrada

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| `keywords` | string\[] | ✅ | — | Keywords de nicho para busca (1-10 keywords) |
| `minSubscribers` | inteiro | ❌ | `1000` | Filtro de mínimo de inscritos. Use 0 para sem filtro. |
| `maxResults` | inteiro | ❌ | `20` | Número máximo de perfis de influenciadores (1-100) |
| `enrichDetails` | boolean | ❌ | `true` | Visitar páginas dos canais para métricas de vídeo e engajamento. Desative para resultados mais rápidos, somente busca. |
| `proxyConfiguration` | objeto | ❌ | — | Configuração de proxy (recomendado para grandes volumes) |

#### Exemplo de Entrada

```json
{
  "keywords": [
    "fitness motivation",
    "home workout",
    "healthy meal prep"
  ],
  "minSubscribers": 5000,
  "maxResults": 30,
  "enrichDetails": true
}
```

### 📤 Saída

Cada perfil de influenciador inclui estes campos:

| Campo | Tipo | Descrição |
|---|---|---|
| `channelId` | string | ID do canal YouTube |
| `name` | string | Nome do canal |
| `handle` | string | Handle do canal (ex: /@username) |
| `url` | string | URL do canal |
| `thumbnailUrl` | string | Foto de perfil do canal |
| `bannerUrl` | string | Imagem de banner do canal |
| `verified` | boolean | Se o canal é verificado |
| `subscribers` | número | Contagem de inscritos (extraído do texto) |
| `subscriberText` | string | Texto bruto de inscritos (ex: "1.23M subscribers") |
| `videoCount` | número | Número total de vídeos |
| `avgViewsLast10` | número | Média de views dos últimos 10 vídeos |
| `engagementRate` | número | Razão avgViews / inscritos |
| `description` | string | Descrição do canal |
| `country` | string | País do canal |
| `recentVideoCount` | número | Número de vídeos recentes analisados |
| `recentVideos` | objeto\[] | Últimos 10 vídeos: {title, views, publishedText, duration} |
| `discoveredVia` | string | A keyword que encontrou este canal |
| `platform` | string | Sempre `"youtube"` |
| `_dataQuality` | string | `"full"` (enriquecido) ou `"search_only"` |
| `scrapedAt` | string | Timestamp ISO 8601 |

#### Exemplo de Saída

```json
{
  "channelId": "UCe0TLA0EsQbP-7JRGD8BoAg",
  "name": "JEFIT",
  "handle": "/@JEFITapp",
  "url": "https://www.youtube.com/channel/UCe0TLA0EsQbP-7JRGD8BoAg",
  "thumbnailUrl": "https://yt3.ggpht.com/ytc/AIdro_lCHzN1PSQ4KvJh...",
  "bannerUrl": "https://yt3.googleusercontent.com/0VvPqCMf...",
  "verified": false,
  "subscribers": 127000,
  "subscriberText": "127K subscribers",
  "videoCount": 245,
  "avgViewsLast10": 18420,
  "engagementRate": 0.145,
  "description": "JEFIT is the #1 workout tracking app...",
  "country": "US",
  "recentVideoCount": 10,
  "recentVideos": [
    {
      "title": "Best Push Pull Legs Routine for Muscle Growth (2026)",
      "views": 34521,
      "publishedText": "2 weeks ago",
      "duration": "12:34"
    },
    {
      "title": "5 Exercises You're Doing WRONG at the Gym",
      "views": 28103,
      "publishedText": "3 weeks ago",
      "duration": "8:47"
    }
  ],
  "discoveredVia": "fitness motivation",
  "platform": "youtube",
  "_dataQuality": "full",
  "scrapedAt": "2026-03-06T15:10:45.321Z"
}
```

### 📋 Casos de Uso

- 🤝 **Marketing de Influenciadores** — Encontre criadores no seu nicho para parcerias de marca
- 🔎 **Pesquisa de Concorrentes** — Descubra quais influenciadores cobrem seus concorrentes
- 📝 **Estratégia de Conteúdo** — Analise os formatos e tópicos de melhor performance em um nicho
- 📊 **Pesquisa de Mercado** — Mapeie o cenário de criadores para qualquer vertical
- 📡 **Monitoramento de Marca** — Encontre canais que discutem tópicos relacionados à sua marca
- ⭐ **Descoberta de Talentos** — Identifique criadores em ascensão com altas taxas de engajamento

### ❓ Perguntas Frequentes

**P: Como funciona a taxa de engajamento?**
R: A taxa de engajamento é calculada como `avgViewsLast10 / subscribers`. Por exemplo, um canal com 100K inscritos com média de 15K views por vídeo tem taxa de engajamento de 0.15 (15%). Quanto maior, melhor — significa que a audiência assiste ativamente ao conteúdo.

**P: Qual a diferença entre qualidade "full" e "search\_only"?**
R: Com `enrichDetails: true` (padrão), o actor visita a página /videos de cada canal para obter métricas de vídeos recentes e calcular a taxa de engajamento — isso produz qualidade "full". Com `enrichDetails: false`, apenas dados do resultado de busca são usados (mais rápido mas sem métricas de vídeo) — isso produz qualidade "search\_only".

**P: Posso buscar influenciadores em um idioma ou país específico?**
R: O actor busca no YouTube globalmente. Os resultados dependem do algoritmo de busca do YouTube e do idioma das suas keywords. Use keywords no idioma-alvo (ex: keywords em português para criadores brasileiros) para encontrar influenciadores de uma região específica.

**P: Como canais duplicados são tratados entre keywords?**
R: O actor deduplica automaticamente canais entre todas as keywords. Se o mesmo canal aparece nos resultados para "fitness motivation" e "home workout", ele é incluído apenas uma vez (atribuído à primeira keyword que o encontrou).

**P: Por que alguns canais mostram 0 para videoCount?**
R: A contagem de vídeos é extraída da página do canal durante o enriquecimento. Se o enriquecimento falhar ou estiver desativado, a contagem de vídeos pode mostrar 0. O actor ainda fornece contagem de inscritos e dados de busca para esses canais.

### 💰 Preços

Este actor usa precificação **Pay Per Event (PPE)**:

| Métrica | Custo |
|---------|-------|
| Por influenciador descoberto | $0.08 |

Por exemplo, descobrir 30 influenciadores custa $2.40.

### 🔗 Actors Relacionados

- [YouTube Fast Scraper](https://apify.com/viralanalyzer/youtube-fast-scraper) — Mergulho profundo nos vídeos de canais específicos
- [TikTok Viral Scanner](https://apify.com/viralanalyzer/tiktok-viral-scanner) — Descubra criadores do TikTok
- [Instagram Reels Scraper](https://apify.com/viralanalyzer/instagram-reels-scraper) — Dados de influenciadores do Instagram
- [Google Trends Scraper](https://apify.com/viralanalyzer/google-trends-scraper) — Valide o potencial de tendência do nicho

### 📝 Changelog

#### v1.0 (Atual)

- Busca de canais YouTube por keyword de nicho (filtro de canais)
- Parsing de contagem de inscritos (sufixos K, M, B)
- Enriquecimento da página do canal com métricas de vídeos recentes
- Cálculo de taxa de engajamento (avgViews / inscritos)
- Detecção de badge verificado (canal/artista)
- Deduplicação entre keywords
- Filtro de mínimo de inscritos
- Cookie seeding para bypass de páginas de consentimento do YouTube
- Guardrails anti-placeholder
- Integração com cobrança PPE

# Actor input Schema

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

Search terms to find influencers (e.g., 'fitness motivation', 'tech review', 'cooking recipes'). Each keyword triggers a separate YouTube channel search.

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

Only include channels with at least this many subscribers. Use 0 for no filter.

## `maxResults` (type: `integer`):

Maximum number of influencer profiles to return. Each profile costs 1 PPE event.

## `enrichDetails` (type: `boolean`):

Visit each channel page to get recent video views and calculate engagement rate. Slower but much more valuable data. Disable for faster, basic-only results.

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

Proxy settings. Recommended for large runs to avoid YouTube rate limiting.

## Actor input object example

```json
{
  "keywords": [
    "fitness motivation",
    "tech review"
  ],
  "minSubscribers": 1000,
  "maxResults": 20,
  "enrichDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset containing all scraped results. Each item follows the dataset schema.

# 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": [
        "fitness motivation",
        "tech review"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("viralanalyzer/influencer-discovery-agent").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": [
        "fitness motivation",
        "tech review",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("viralanalyzer/influencer-discovery-agent").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": [
    "fitness motivation",
    "tech review"
  ]
}' |
apify call viralanalyzer/influencer-discovery-agent --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,viralanalyzer/influencer-discovery-agent"
        }
    }
}

```

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/Eollc5FXxwfRBqkNX/builds/nKs8khhJthKa8Zagz/openapi.json
