# YouTube Influencer Finder · Socials & Fit Score (`doesaiknow/youtube-influencer-discovery-contact-api`) Actor

Give it niche keywords, get a ranked list of YouTube creators: subscribers, size band, a 0-100 fit score with reasons, the social profiles the creator published, plus the evidence URLs behind every row. One delivered channel is one billed row.

- **URL**: https://apify.com/doesaiknow/youtube-influencer-discovery-contact-api.md
- **Developed by:** [David S](https://apify.com/doesaiknow) (community)
- **Categories:** Lead generation, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.015 / influencer contact row

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/platform/actors/running/actors-in-store#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 Influencer Finder — creator profiles, socials and fit scores

Type a niche keyword, get an outreach-ready list of **YouTube influencers**: the channels that rank
for that phrase, their subscriber and view stats, a 0-100 fit score with written reasons, and the
**social profiles the creator published on the channel** — each with the URL that proves it.

**Measured on live runs:** 73% of channels found for a niche keyword ship with Instagram and 82%
with some social profile, while **none of them published an email**. Socials are the promise here.
An address is included when a creator published one; do not plan a campaign around it.

Built for influencer-marketing agencies, DTC brands and PR teams. One channel = one row = one billed
row; rows already fetched in the last 24 hours come from cache and cost nothing.

### What does the YouTube Influencer Finder do?

It runs your keywords through YouTube search, collects every channel that ranks for them (from the
channel results and the creators behind ranking videos), enriches each with public stats, scores fit, then collects the contact routes the creator published on the channel:
social profiles first, plus an email when there is one. Reading the creator's own site is an
opt-in extra, billed per attempt and rarely productive. Output is a flat table: one row per
channel, 26 fixed columns, evidence URLs included.

It does not send outreach, guess addresses or track creators over time. It answers one question per
run: which creators should I contact about this niche, and where do I reach them?

### Why use the YouTube Influencer Finder

- **Keyword in, contactable creators out.** Up to 20 channels per keyword, unlimited keywords per run.
- **Contact routes with provenance.** Every profile and address carries an `evidenceUrl`, so you
  see where it came from.
- **A fit score you can audit.** `fitReasons` lists each component with its points, adding up to
  `fitScore` — no black box.
- **Size bands for campaign planning.** nano/micro/mid/macro/mega, plus a `minSubscribers` floor.
- **Honest gaps.** A hidden counter or a creator with no website comes back as `null` with a stated
  reason — never a zero or an invented value.
- **Pay per channel, cache free.** $0.020 per delivered row on the Free plan, $0.011 on Gold and
  above; a cache hit costs nothing beyond the one-time run start.

### How to find YouTube influencers and their social profiles

1. Fill the **Niche keywords** field — one phrase per line, e.g. `dog training`. Each keyword is
   searched separately and its channels are scored against that phrase.
2. Optionally pick a **Country** and **Language** to prospect a market; leave both on "Auto" for
   YouTube's defaults.
3. Set **Channels per keyword** (default and maximum 20 = one search page) and, for larger creators
   only, a **Minimum subscribers** floor.
4. Leave **Parse the creator's website for contacts** on to also read the site linked from the
   channel. Off by default: billed per attempt, and most creator sites return nothing.
5. Run the Actor — rows stream into the dataset as each channel finishes.
6. Open the **Overview** view for the shortlist, then export to JSON, CSV or Excel, or pull the rows
   from the API into your CRM.

Minimal input:

```json
{ "keywords": ["dog training"], "maxChannels": 20 }
```

Market run with a size floor: `{ "keywords": ["dog training"], "country": "GB", "language": "en",
"minSubscribers": 10000 }`.

### What data you get per channel

One dataset row = one channel prospect, always the same 26 keys. Example row:

```json
{
  "keyword": "dog training",
  "channelId": "UC7bK1nQ9vX2mYt4LpR0sZaQ",
  "channelUrl": "https://www.youtube.com/channel/UC7bK1nQ9vX2mYt4LpR0sZaQ",
  "channelTitle": "Puppy Academy",
  "handle": "@puppyacademy",
  "subscribers": 128000,
  "videoCount": 412,
  "totalViews": 31204880,
  "joinedDate": "2018-03-04",
  "channelCountry": null,
  "uploadCadenceDays": null,
  "avgViewsRecent": null,
  "sizeBand": "mid",
  "fitScore": 85,
  "fitReasons": [
    "Audience: 128,000 subscribers (mid band) — 23/38 fit points.",
    "Activity: upload cadence unavailable — not scored, its weight moved to the other components.",
    "Niche match: 2/2 keyword terms (dog, training) found in the channel title, description or recent video titles — 62/62 fit points."
  ],
  "contactEmails": [
    { "email": "bookings@puppyacademy.example", "source": "channel-about", "evidenceUrl": "https://www.youtube.com/channel/UC7bK1nQ9vX2mYt4LpR0sZaQ" }
  ],
  "socials": [{ "platform": "instagram", "url": "https://www.instagram.com/puppyacademy" }, { "platform": "tiktok", "url": "https://www.tiktok.com/@puppyacademy" }],
  "website": "https://puppyacademy.example",
  "siteContactUrl": "https://puppyacademy.example",
  "siteParsed": true,
  "contactConfidence": "high",
  "evidenceUrls": ["https://www.youtube.com/channel/UC7bK1nQ9vX2mYt4LpR0sZaQ", "https://puppyacademy.example", "https://www.youtube.com/watch?v=8Kx2fQ0aVQo"],
  "source": "primary",
  "notFound": false,
  "contentHash": "557a9ec6602c98069a3ef83a555005748d6267ceca608fa1026959c91277f446",
  "finishedAt": "2026-07-26T09:14:02.371Z"
}
```

| Field | Type | What it tells you |
|---|---|---|
| `keyword` | string | The phrase that surfaced this channel (echo of input) |
| `channelId` | string | null | Canonical `UC…` ID when the channel exposes it, otherwise the `@handle` |
| `channelUrl` / `handle` / `channelTitle` | string | null | Canonical channel URL, `@handle`, display name |
| `subscribers` / `videoCount` / `totalViews` | integer | null | Public counters; `null` when hidden (video count is rounded at the source) |
| `joinedDate` / `channelCountry` | string | null | Creation date `YYYY-MM-DD`, and the declared country |
| `uploadCadenceDays` | number | null | Average days between recent uploads; `null` without publish labels |
| `avgViewsRecent` | integer | null | Average views of recent long-form videos; `null` when no counters are listed |
| `sizeBand` | string | null | `nano`, `micro`, `mid`, `macro`, `mega` |
| `fitScore` | integer 0-100 | null | Fit for the keyword; `null` only when no component has data |
| `fitReasons` | array | null | One line per component: points awarded out of available, or why it was skipped |
| `contactEmails` | array | null | `{email, source, evidenceUrl}`; `source` is `channel-about` or `site-page` |
| `socials` | array | null | `{platform, url}` for the profiles the creator links |
| `website` / `siteContactUrl` | string | null | Site linked from the channel, and the page read for contacts |
| `siteParsed` | boolean | null | `true` when that site was read successfully |
| `contactConfidence` | string | null | `high` / `medium` / `low` / `none` |
| `evidenceUrls` | array | null | Channel URL, parsed page URL and the ranking video URLs behind the row |
| `source` | string | null | `primary`, or `fallback` when any step used a backup path |
| `notFound` | boolean | `true` = the keyword returned no channels; a billed row with every other field `null` |
| `contentHash` / `finishedAt` | string | Deterministic hash of the row, and when it was produced (a cache hit keeps the original timestamp) |

### How the fit score and contact confidence work

`fitScore` is a weighted 0-100 sum of three components, each printed in `fitReasons`:

- **Audience reach — 30 points**, by size band: `nano` (under 10k), `micro` (10k+), `mid` (100k+),
  `macro` (500k+), `mega` (1M+).
- **Publishing activity — 20 points**, full marks for weekly uploads, zero past a four-month gap.
- **Niche match — 50 points**: share of the keyword's terms found in the channel title, description
  and recent video titles, matched on whole words with inflections — "cat" never matches "catalogue".

A component with no data is **not scored as zero**; it drops out of the scale and its points are
redistributed (hence `23/38` and `62/62` in the example). Scoring is deterministic.

`contactConfidence` ranks how directly you can reach the creator: `high` = email published on the
channel, `medium` = a profile you can DM (Instagram, TikTok, X, Facebook, LinkedIn) or an email from
their site, `low` = some web presence but no DM route, `none` = neither. Rows
with `none`, and `notFound` rows, are surfaced in the **Alerts** dataset view.

### Input parameters

| Field | Required | Notes |
|---|---|---|
| `keywords` | yes | 1-100 niche phrases. A phrase with no channels still returns one `notFound` row |
| `country` | no | Market to search in — pick from the dropdown (51 markets); "Auto" lets YouTube choose |
| `language` | no | Language of the results — pick from the dropdown; "Auto" uses YouTube's default |
| `maxChannels` | no | Channels per keyword, 1-20 (default 20 = one search page) |
| `minSubscribers` | no | Drop channels below this subscriber count; empty keeps every creator |
| `parseCreatorSite` | no | Default `true`. Also read the website linked from the channel for contacts |

Run it from the Apify API, the CLI, or the Apify MCP server (`mcp.apify.com`), so an AI assistant can
build a creator shortlist from a keyword.

### How much does the YouTube Influencer Finder cost?

Pay-per-event billing: you pay per **delivered row**, never per keyword and never per request.

| Event | When | Price |
|---|---|---|
| Run start | Once per run | $0.005 (flat, one-time) |
| Channel prospect | Per delivered row | $0.020 (Free plan) → $0.011 on Gold and above |

Minimum run budget: **$0.025** — one run start plus one row at the Free-plan price.

You are never charged for **cache hits** (a channel fetched within 24 hours is re-delivered free,
with its original `finishedAt`), for **failures** (no row, no charge), or for extra work inside a row
— retries and backup paths are included in the per-row price. A `notFound` keyword **is** a delivered
answer and is billed as one row. On Free accounts the run stops before the first paid request once
the remaining balance drops under the minimum run budget.

### YouTube Influencer Finder vs influencer platforms and manual research

| | This actor | Influencer SaaS | Manual research |
|---|---|---|---|
| Discovery by niche keyword | Yes, ranked by search | Database filters | Yes, tab by tab |
| Social profiles with evidence URL | Yes | Sometimes, unsourced | Copy-paste per channel |
| Auditable fit score | Yes, points per component | Proprietary score | No |
| Cost model | From $0.011 per channel | Monthly seat | Your time |
| API + MCP access | Yes | Enterprise tier | No |

### What this actor does not do

- It does **not** send outreach — it produces the prospect list.
- It does **not** guess or unscramble obfuscated addresses — a guessed contact is the worst error here.
- It does **not** return private data — only what a channel and its linked business page publish.
- It does **not** report engagement rate, comment sentiment or sponsorship history in this version.
- It does **not** track creators over time — it is stateless; re-run it (about every 30 days).
- It does **not** page past the first search page (20 channels per keyword).

### FAQ

#### How many channels do I get per keyword?

Up to 20 — one YouTube search page, counting both the channels returned directly and the creators
behind the ranking videos, de-duplicated.

#### Will I get email addresses?

Usually not. Across live runs, no channel found for a niche keyword published one on its About tab, and YouTube hides the business address behind a captcha we do not touch. When an address is present it is returned with its `source` and an `evidenceUrl`; never guessed, never unscrambled. Plan outreach around the social profiles — that is what this actor reliably delivers.

#### Why is uploadCadenceDays null?

Cadence needs at least two dated uploads. When the channel page returns no publish labels, the field
is `null` and the activity component is dropped from the score rather than scored as zero.

#### Do cache hits cost anything?

No. A channel fetched within the last 24 hours is re-delivered from cache and bills nothing beyond
the run start.

### Related actors

- [YouTube Research Digest](https://apify.com/doesaiknow/youtube-research-digest) — transcripts and
  an AI digest of the top videos for a keyword, when you need what creators say, not who they are.
- [Website Traffic Estimator](https://apify.com/doesaiknow/website-traffic-estimator) — organic
  traffic for the creator websites you collect here, to size a placement before pitching.

### Legal & support

- This actor collects **public channel information**: what a creator publishes on their own YouTube
  channel and on the website they link from it. It does not access private data, log-in-gated pages
  or personal profiles on other platforms, and it does not profile private individuals.
- Contact addresses are returned **verbatim, with the URL they were read from** — nothing guessed,
  de-obfuscated or inferred, so you can verify every address before using it.
- Business contact data is returned for **B2B outreach**; you remain responsible for using it in line
  with the marketing and privacy rules that apply to you (GDPR, CAN-SPAM, ePrivacy and local
  equivalents), including honouring opt-outs and identifying yourself as sender.
- Output is provided **as-is** for prospecting and market research; public statistics are
  point-in-time figures reported by the platform, not audited numbers.
- Questions or a bug? Open an issue on the Actor's **Issues** tab, or see the **API** tab.

### SEO keywords

youtube influencer finder, find youtube influencers, youtube influencer search, youtube creator
discovery, youtube outreach tool, instagram handles for creators, creator discovery tool, find youtube
creators, influencer contact list, creator social profiles, youtube influencer marketing,
youtube channel finder, influencer prospecting tool, micro influencer
finder, niche creator search, influencer discovery api, youtube channel
contact info, creator fit score, influencer research tool.

Built by doesaiknow.

# Actor input Schema

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

Niche phrases to prospect creators for (e.g. "dog training"). Each keyword is searched on YouTube and the ranking channels are returned as prospect rows. A keyword with no results still returns one row, marked as not found.

## `country` (type: `string`):

YouTube market to search in. Leave on "Auto" to let YouTube pick by IP.

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

Language of the search results. Leave on "Auto" for YouTube's default.

## `maxChannels` (type: `integer`):

How many channels to return per keyword. Maximum 20 in this version (one search page); deeper sweeps are a planned feature.

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

Drop channels below this subscriber count. Leave empty to keep every channel found, including nano creators.

## `parseCreatorSite` (type: `boolean`):

Opens the website linked from the channel and looks for a contact email there. Measured hit rate is low: most creator sites are JavaScript-rendered and the parser returns nothing, while every attempt is billed. Social profiles and any email published on the channel itself are always included and cost nothing extra.

## Actor input object example

```json
{
  "keywords": [
    "dog training"
  ],
  "country": "",
  "language": "",
  "maxChannels": 20,
  "parseCreatorSite": false
}
```

# Actor output Schema

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

All delivered rows: keyword, channelId, channelTitle, subscribers, sizeBand, fitScore, fitReasons, contactEmails, socials, website, contactConfidence, evidenceUrls, source, notFound.

## `cache` (type: `string`):

Per-channel rows cached for 24h; a cache hit re-delivers the row free (never billed beyond the one-time run start).

# 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": [
        "dog training"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("doesaiknow/youtube-influencer-discovery-contact-api").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": ["dog training"] }

# Run the Actor and wait for it to finish
run = client.actor("doesaiknow/youtube-influencer-discovery-contact-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "dog training"
  ]
}' |
apify call doesaiknow/youtube-influencer-discovery-contact-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=doesaiknow/youtube-influencer-discovery-contact-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/ce0sphCoAG1hzJXNt/builds/ufY4kNFuJ27pZtI6U/openapi.json
