# Find Influencers: TikTok Engagement Rate + Creator Emails (`pnda/creator-contact-finder`) Actor

Find influencers on Instagram and TikTok by niche and city, or paste a list: verified business email, followers, bio link and TikTok engagement rate. Influencer search and influencer email finder, no login. $7.20 per 1,000 creators.

- **URL**: https://apify.com/pnda/creator-contact-finder.md
- **Developed by:** [PNDA](https://apify.com/pnda) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 12 total users, 11 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $7.20 / 1,000 creator profiles

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?

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

## Influencer Email Finder for Instagram + TikTok Engagement Rate

**Find influencers on Instagram and TikTok by niche, city or language, and get their business email.** Or paste your own list of creators and get, for each one, followers, **engagement rate**, bio, link in bio, category and a **verified business email**.

No login, no cookies, no Instagram or TikTok account needed. Public data only.

### What does Influencer Email Finder do?

| You give | You get |
|---|---|
| A niche ("fitness coach", "skincare", "vegan recipes"), optionally a city and a language | Instagram and TikTok creators who match, ranked by Google |
| A list of Instagram / TikTok URLs or @handles | Each profile, enriched |

For every creator:

- **Profile**: handle, name, profile URL, bio, **link in bio**, category, verified badge, business / commerce account, profile picture.
- **Audience**: followers, following, posts or videos, total likes (TikTok).
- **Engagement rate**: TikTok's average engagement rate of the account, plus average likes, comments and views of the top videos. Instagram: computed from the recent posts when their likes are public (often not available: `engagementRate` is then `null`).
- **Business email**: the public email of the profile or bio, or an address found on the creator's own website and **verified by SMTP**.
- **Language** of the content (TikTok).

### Why use it?

- **Influencer marketing**: build a list of micro-influencers in your niche and city, with an email to pitch them.
- **Brand partnerships and UGC**: find creators with a real audience (engagement rate filter), not just big follower counts.
- **Agencies**: enrich a client's creator list in one run, export to CSV / Excel / Google Sheets.
- **TikTok engagement rate checker**: paste handles, get the engagement rate of each account.

### How to find influencers (search mode)

1. Choose **Find creators by niche, city or language**.
2. Type one or more niche keywords, as creators write them in their bio.
3. Optional: a city or country ("Paris", "Miami"), the language ("fr") and Google country ("fr").
4. Set filters: min / max followers, min engagement rate, only creators with an email.
5. Run. Export the results as JSON, CSV or Excel.

Example input:

```json
{
  "mode": "search",
  "keywords": ["fitness coach", "pilates"],
  "platforms": ["instagram", "tiktok"],
  "location": "paris",
  "language": "fr",
  "country": "fr",
  "maxResultsPerKeyword": 20,
  "minFollowers": 5000,
  "maxFollowers": 100000,
  "minEngagementRate": "2",
  "findEmail": true
}
```

### How to enrich a list of creators (profiles mode)

```json
{
  "mode": "profiles",
  "profiles": [
    "https://www.instagram.com/natgeo/",
    "https://www.tiktok.com/@khaby.lame",
    "@nike",
    "tt:charlidamelio"
  ],
  "findEmail": true
}
```

A bare `@handle` uses the **Platform of bare @handles** setting (Instagram by default). Prefix with `ig:` or `tt:` to choose.

### Output example

```json
{
  "platform": "tiktok",
  "handle": "glowlab",
  "profileUrl": "https://www.tiktok.com/@glowlab",
  "fullName": "Glow Lab",
  "bio": "Skincare tips ✨ business: hello@glowlab.co",
  "bioLink": "https://glowlab.co",
  "category": "Beauty",
  "followers": 150000,
  "following": 80,
  "postsCount": 410,
  "totalLikes": 3200000,
  "isVerified": true,
  "isBusinessAccount": true,
  "engagementRate": 5.43,
  "engagementRateSource": "computed",
  "avgLikes": 800,
  "avgComments": 100,
  "avgViews": 10000,
  "language": "en",
  "email": "hello@glowlab.co",
  "email_status": "found",
  "email_confidence": "verified",
  "email_source": "bio",
  "searchKeyword": "skincare",
  "searchRank": 3,
  "fromCache": false,
  "scrapedAt": "2026-10-05T18:00:00.000Z"
}
```

`engagementRate` is in percent (5.43 = 5.43 %). It is `null` when unknown (most Instagram profiles: the recent posts come without like counts).

#### Email statuses

| `email_status` | Meaning | Charged |
|---|---|---|
| `found` | Verified business email (SMTP) | yes, `email-found` |
| `unverified` | Public email shown by the creator, the mail server could not confirm it | no |
| `catch-all` | The creator's domain accepts any address: best guess (`contact@…`) | no |
| `not-found` | Own website found, no deliverable address | no |
| `no-website` | No public email and no own website (only social links / Linktree without site) | no |
| `no-mx` | The website domain has no mail server | no |

`email_source` says where the email comes from: `profile` (Instagram business email), `bio`, `bio-link-page` (Linktree-style page), `website` (the creator's homepage) or `website-pattern` (name or role address at the creator's domain, verified).

### How much does it cost?

**Store discounts:** on Apify Silver, Gold, Platinum and Diamond plans, some events cost up to 20 % less. The Pricing tab of the Store page shows the exact price for each plan.

Pay per event, you only pay for results:

| Event | Price | When |
|---|---|---|
| `profile` | **$7.20 / 1,000** | a creator profile delivered with engagement rate |
| `email-found` | **$9.00 / 1,000** | a **verified** business email is found |
| `search-result` | **$2.00 / 1,000** | a creator found by the niche search |

A creator found by search, with full profile and verified email, costs $0.0182. Without the email: $0.0092.

Coming soon: an email the creator **published** (profile, bio, link-in-bio page, website) on a catch-all mail server will be billed at half the price of a verified email ($4.50 / 1,000), while a catch-all **guess** (`contact@…` pattern) stays free; until this is enabled, both are free.

Free: profiles not found, creators filtered out (followers, engagement, email), off-topic search results, unverified emails, and every status row. The run never costs more than your **Maximum cost per run**: the actor checks it before any paid lookup.

**Works with a free Apify account too.** Free-plan accounts can use every feature at the same per-result prices, paid from their monthly Apify credit. Limit: free accounts share a daily capacity; once it is used up, the remaining inputs are skipped with one `free-plan-limit` row (not charged). Retry the next day, or switch to a paid Apify plan to run without this limit.

### Tips

- Write keywords like a bio: "nutritionist", "makeup artist", "dog trainer", "personal trainer".
- For a city outside the US, set `country` and `language` to the local ones ("fr" / "fr" for Paris).
- Use **Min / Max followers** for micro-influencers (e.g. 5,000 to 100,000): follower counts shown by Google are checked before anything is billed.
- Need emails only? Tick **Only creators with an email**: creators without an email are skipped and not charged.

### FAQ

**Do I need an Instagram or TikTok account?** No. The actor only reads public profiles. No login, no cookies.

**Does it scrape followers lists or private data?** No. Only public profile data. No list of followers, no private account content, no direct messages. Accounts of users under 18 are skipped.

**How is the engagement rate computed?** TikTok: the platform's average engagement rate of the account. If missing, (likes + comments + shares) ÷ views over the top videos. Instagram: (average likes + average comments) ÷ followers over the recent posts, only when the like counts are available, which is rarely the case; otherwise `engagementRate` is `null` and the min engagement filter does not drop the profile.

**How are emails found?** First the public email of the profile or bio. Then the creator's link in bio: a Linktree-style page and the creator's own website are read for a public email, then common addresses at that domain (name, contact@, hello@, collab@…) are verified by SMTP. Only verified emails are charged.

**Is it legal?** The actor collects public data only. You are responsible for using it lawfully (privacy and anti-spam rules, platform terms): contact creators for legitimate business purposes and honour opt-out requests.

**Something does not work?** Open an issue in the Issues tab, we answer fast.

### Related actors

- [YouTube Email Finder](https://apify.com/pnda/youtube-email-finder): Looking for YouTube creators? Find YouTube influencers by niche and get each channel's verified business email.
- [YouTube Scraper](https://apify.com/pnda/youtube-scraper): Need YouTube video and channel data? Views, likes, transcripts and subscribers by URL.

# Actor input Schema

## `mode` (type: `string`):

"Find creators": no URL needed, the actor searches Instagram and TikTok creators by niche keyword, city and language. "Enrich my list": paste Instagram / TikTok profile URLs or @handles and get each profile with engagement rate and email.

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

One niche per line, as a creator would write it in their bio: "fitness coach", "skincare", "vegan recipes", "travel photographer". Each keyword is searched separately on each platform.

## `platforms` (type: `array`):

Where to look for creators.

## `location` (type: `string`):

Narrows the search to creators who mention this place in their profile, e.g. "Paris", "London", "Miami", "Brazil".

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

Language of the creators (Google interface language, 2 letters): en, fr, es, de, pt, it…

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

Country of the Google search (2 letters): us, fr, gb, es, de, br… Set it to the audience's country.

## `maxResultsPerKeyword` (type: `integer`):

How many creators to find for each keyword, split across the selected platforms.

## `onlyNew` (type: `boolean`):

Search mode: skip the creators you already received from this Actor in previous runs (same Apify account, last 12 months) and keep searching for new ones. Creators skipped are never charged.

## `enrichProfiles` (type: `boolean`):

Adds the full public profile of each creator found: followers, engagement rate, bio, link in bio, category, posts, verified badge. Billed as "profile". Off: only what Google shows (handle, name, follower count when visible).

## `profiles` (type: `array`):

Profile URLs or handles, one per line: https://www.instagram.com/nike/, https://www.tiktok.com/@khaby.lame, @natgeo, tt:charlidamelio, ig:nike. Duplicates are removed.

## `defaultPlatform` (type: `string`):

Platform used for a handle given without URL or prefix ("@nike").

## `findEmail` (type: `boolean`):

Looks for the creator's business email: the public email of the profile or bio first, then the creator's own website (link in bio) with SMTP verification. Billed only when a verified email is found.

## `minFollowers` (type: `integer`):

Only creators with at least this many followers (e.g. 10000 for micro-influencers).

## `maxFollowers` (type: `integer`):

Only creators with at most this many followers (e.g. 100000).

## `minEngagementRate` (type: `string`):

Only creators with at least this engagement rate, in percent (e.g. 2 or 3.5). Needs the full profile. Applies to TikTok, and to Instagram only when the rate is known (Instagram like counts are often unavailable).

## `requireEmail` (type: `boolean`):

Skips creators without an email (turns email search on). Creators skipped are not charged.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "fitness coach"
  ],
  "platforms": [
    "instagram",
    "tiktok"
  ],
  "location": "paris",
  "language": "en",
  "country": "us",
  "maxResultsPerKeyword": 10,
  "onlyNew": false,
  "enrichProfiles": true,
  "profiles": [
    "https://www.instagram.com/natgeo/",
    "https://www.tiktok.com/@khaby.lame"
  ],
  "defaultPlatform": "instagram",
  "findEmail": true,
  "requireEmail": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

All creators (JSON, CSV, Excel).

# 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 = {
    "mode": "search",
    "keywords": [
        "fitness coach"
    ],
    "platforms": [
        "instagram",
        "tiktok"
    ],
    "location": "paris",
    "maxResultsPerKeyword": 10,
    "profiles": [
        "https://www.instagram.com/natgeo/",
        "https://www.tiktok.com/@khaby.lame"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pnda/creator-contact-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 = {
    "mode": "search",
    "keywords": ["fitness coach"],
    "platforms": [
        "instagram",
        "tiktok",
    ],
    "location": "paris",
    "maxResultsPerKeyword": 10,
    "profiles": [
        "https://www.instagram.com/natgeo/",
        "https://www.tiktok.com/@khaby.lame",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("pnda/creator-contact-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 '{
  "mode": "search",
  "keywords": [
    "fitness coach"
  ],
  "platforms": [
    "instagram",
    "tiktok"
  ],
  "location": "paris",
  "maxResultsPerKeyword": 10,
  "profiles": [
    "https://www.instagram.com/natgeo/",
    "https://www.tiktok.com/@khaby.lame"
  ]
}' |
apify call pnda/creator-contact-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pnda/creator-contact-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/1coDmncfo64wfo0lw/builds/YytBbOS1A9XC1dm43/openapi.json
