# Instagram Creator Email Finder (UGC & Influencers) (`kingly_contest_7cb/creator-contact-finder`) Actor

Find public business emails of Instagram creators and UGC influencers by handle. Reads bio and link-in-bio pages, labels management emails, drops vendor emails.

- **URL**: https://apify.com/kingly_contest_7cb/creator-contact-finder.md
- **Developed by:** [Carina Hatton](https://apify.com/kingly_contest_7cb) (community)
- **Categories:** Social media, Lead generation, Marketing
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 creator contact founds

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?

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

### What does Creator Contact Finder do?

**Creator Contact Finder** takes a list of Instagram handles and returns the **public business contact** for each creator: the email in their bio, plus emails, phone numbers and WhatsApp links on the creator's own link-in-bio page (Linktree, Beacons, Stan, bio.site, july.bio, their own website and up to 5 linked contact or media-kit pages).

> **Not included:** emails that a creator shows only behind Instagram's **Contact** button (or the Email button in the app). Instagram shows those only to logged-in users, and this Actor never logs in, by design. If a creator's only email is behind that button, the row comes back as `no_contact` and is free.

Every email is tagged with **where it was found** (`bio` or `link_in_bio`, with the exact page URL) and **what kind of contact it is** (`creator` or `management`). Emails that belong to shops, affiliate platforms or brands linked from the creator's page (for example `hello@shopmy.us`, `info@liketoknow.it` or a brand's support address) are **filtered out** and reported in `filteredVendorEmails`, so you don't pay for them or email the wrong company.

### Why use Creator Contact Finder?

- **Influencer and UGC outreach:** get one clean, deliverable contact per creator instead of a pile of mixed emails.
- **Know who you're emailing:** management and agency addresses (talent agencies, "mgmt" contacts) are labeled, so you can route pitches correctly.
- **Pay per contact found:** this Actor charges only for creators where a public contact was found. The profile scraper it uses is billed separately per profile (see pricing).
- **Repeat lists without paying twice:** `skipPreviouslyDelivered` remembers handles already delivered in earlier runs.

### What data can Creator Contact Finder extract?

| Field | Description |
|---|---|
| `handle`, `profileUrl`, `fullName` | Instagram profile identity |
| `followers`, `isBusiness`, `igCategory`, `niche` | Audience size, account type, category and niche tags from the bio |
| `primaryEmail`, `primaryEmailType`, `primaryEmailSource` | The best contact to use first |
| `emails[]` | Every public email with `source`, `sourceUrl`, `type` and `reason` |
| `filteredVendorEmails[]` | Shop, platform or brand emails removed, with the reason |
| `phones[]`, `whatsapp` | Public phone and WhatsApp links from the link-in-bio page |
| `linkInBioUrl`, `linkInBioPlatform`, `pagesScanned[]` | What was crawled and the HTTP result |
| `status`, `charged` | `ok`, `no_contact`, `not_found`, `private`, `error` or `not_scanned`, and whether the row was billed |

### How to find creator emails

1. Paste Instagram handles, `@handles` or profile URLs into **Instagram handles**.
2. Optionally set follower limits, choose which email sources and types you want, and keep **Exclude vendor emails** on.
3. Click **Start** and download the **Contacts** view as CSV, Excel or JSON.

### How much does it cost?

You pay two things, both billed to your Apify account:

1. **This Actor: $0.01 per creator with a public contact** (pay per event, event `creator-contact`). Creators with no contact, missing, private, failed or not-scanned profiles are not charged, and there is no per-row dataset fee. Users on the free Apify plan get up to **25 contacts per run**.
2. **Apify's Instagram Profile Scraper**, which this Actor runs in your account to read the public profiles (the default profile source). That Actor is priced and billed separately by Apify for **every profile it reads, whether or not a contact is found**. In our test runs in October 2026 it cost **about $0.0023 per profile** (for example, $0.023 for 10 profiles). Check its current price on the [Instagram Profile Scraper page](https://apify.com/apify/instagram-profile-scraper), because Apify can change it.

**Example:** 100 handles where 60 creators have a public contact costs about 60 × $0.01 = $0.60 for this Actor, plus about 100 × $0.0023 = $0.23 for the profile scraper.

Set two limits to control spend:

- **Maximum total charge** on the run caps the $0.01 contact charges. The run stops cleanly when the cap is reached.
- **Max spend on the profile scraper (USD)** caps the scraper sub-runs. Handles it didn't reach come back as `not_scanned` and are free.

The run's `RUN_SUMMARY` record reports the scraper cost as `profileScraperCostUsd`. If Apify hadn't finished settling the charges when the run ended, `profileScraperCostIsEstimate` is `true`.

### Input

```json
{
  "handles": ["melissaa.ga", "@itsmelissabailey", "https://www.instagram.com/theonlyyennii/"],
  "maxCreators": 100,
  "excludeVendorEmails": true,
  "includeLinkInBio": true,
  "emailTypes": ["creator", "management"]
}
```

### Output example

```json
{
  "handle": "melissaa.ga",
  "profileUrl": "https://www.instagram.com/melissaa.ga/",
  "followers": 32687,
  "igCategory": "Digital creator",
  "niche": ["beauty"],
  "primaryEmail": "melissa@pctalent.co",
  "primaryEmailType": "management",
  "primaryEmailSource": "bio",
  "emails": [
    { "email": "melissa@pctalent.co", "source": "bio", "sourceUrl": "https://www.instagram.com/melissaa.ga/", "type": "management", "reason": "known management domain pctalent.co" }
  ],
  "filteredVendorEmails": [],
  "linkInBioUrl": "https://stan.store/melissagarcia",
  "linkInBioPlatform": "stan.store",
  "status": "ok",
  "charged": true
}
```

### Tips

- Keep **Exclude vendor emails** on. It removes shop and affiliate addresses that other tools return as if they were the creator's.
- Use **Email types = creator** if you only want to reach creators directly.
- Turn on **Include no-contact rows** if you want a full audit of every handle. Those rows are free.
- Use `skipPreviouslyDelivered` for weekly lists so you never pay twice for the same creator.

### Privacy and compliance

This Actor collects **only public business contact information** that creators chose to publish for brand inquiries: their public Instagram bio and the public pages they link from it. It does **not** log in to Instagram, use cookies or accounts, or access private profiles, DMs, followers lists or any non-public data. Private profiles return `status: "private"` with no contact data.

You are responsible for using the results lawfully. Personal data may be protected by GDPR, UK GDPR, CCPA/CPRA and similar laws. Have a legitimate reason for contacting each person, follow anti-spam rules such as CAN-SPAM and PECR (identify yourself, include an opt-out, honor unsubscribes), and don't resell or publish the data. Delete contacts you no longer need. If you're unsure, consult a lawyer. Read more in Apify's post on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### FAQ

**Which profile source should I use?** Use the default, Apify Instagram Profile Scraper (about $0.0023 per profile in our tests, billed to your Apify account by that Actor). The Direct source is experimental: Instagram usually answers logged-out requests with a login wall, so the Actor automatically falls back to the scraper.

**What does `not_scanned` mean?** You set a spend cap on the profile scraper and it was reached before these handles were read. They are free. Raise the cap and run them again.

**Why didn't I get an email for some creators?** Many creators don't publish one. Some show an email only behind Instagram's Contact button. This Actor does not read the Contact button, because Instagram only shows it to logged-in users and the Actor never logs in. Others put it on pages that need JavaScript or block bots. Those rows come back as `no_contact` and are free.

**What counts as a "management" email?** An address at a known talent agency or management company, one whose name contains words like "mgmt" or "talent", or one labeled "management" or "booking" in the bio.

**Is this affiliated with Instagram?** No. This Actor is not affiliated with, endorsed by or sponsored by Instagram or Meta.

# Actor input Schema

## `handles` (type: `array`):

Instagram usernames or profile URLs to look up, one per line. The @ is optional, e.g. <code>natgeo</code>, <code>@natgeo</code> or <code>https://www.instagram.com/natgeo/</code>.

## `maxCreators` (type: `integer`):

The run stops after this many creators with a public contact are delivered. You are charged only for these creators. On the free Apify plan the limit is 25 per run.

## `maxProfilesToScan` (type: `integer`):

Ceiling on how many Instagram profiles are looked up, whether or not they have a contact. Defaults to 3 × max creators.

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

Skip creators with fewer followers. Skipped creators are not charged.

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

Skip creators with more followers. Skipped creators are not charged.

## `emailSources` (type: `array`):

Public places to read emails from: the Instagram contact button, the bio text, and the creator's link-in-bio page (Linktree, Stan, Beacons, bio.site or their own website).

## `emailTypes` (type: `array`):

Each email is tagged as the creator's own, their management/agency, or a vendor (shop, affiliate platform or brand linked from the bio). Vendor emails are never charged.

## `excludeVendorEmails` (type: `boolean`):

Remove emails that belong to shops, affiliate platforms or brands linked from the creator's bio (e.g. shopmy.us, liketoknow.it). Dropped emails are listed in <code>filteredVendorEmails</code> for transparency.

## `requireContact` (type: `string`):

A creator is delivered and charged only when they have this kind of public contact.

## `includeLinkInBio` (type: `boolean`):

Open the creator's bio link and up to a few child links that look like their own contact or collab pages, 1 level deep.

## `maxChildLinks` (type: `integer`):

How many links from the link-in-bio page to follow (creator-owned and contact/collab pages first).

## `includeNoContactRows` (type: `boolean`):

Also output free rows for creators with no public contact, not found or private (status no_contact / not_found / private). These rows are never charged.

## `dedupe` (type: `boolean`):

One row per handle (case-insensitive) within a run.

## `skipPreviouslyDelivered` (type: `string`):

Name of a key-value store that remembers handles you already received. Creators already in it are skipped and not charged. Leave empty to turn off.

## `profileSource` (type: `string`):

How public profile data is read (never with a login). <b>Apify Instagram Profile Scraper</b> (recommended) runs apify/instagram-profile-scraper in your account; it is billed separately by that Actor (about $0.0023 per profile in our October 2026 tests) and is capped by the setting below. <b>Direct (experimental)</b> calls Instagram's public logged-out endpoint through your proxy; Instagram currently often refuses it with a login wall, and the Actor then falls back to the profile scraper automatically. <b>Existing dataset</b> reuses a dataset produced by that scraper.

## `profileDatasetId` (type: `string`):

Only for profile source "Existing dataset": pick a dataset produced by apify/instagram-profile-scraper. This Actor gets read-only access to the dataset you pick.

## `profileScraperMaxChargeUsd` (type: `number`):

Only for profile source "Apify Instagram Profile Scraper": hard cap on what its sub-runs may charge.

## `instagramProxy` (type: `object`):

Proxy used for the built-in profile source. Residential proxies are recommended.

## `linkProxy` (type: `object`):

Proxy used to open link-in-bio pages and creator websites.

## `requestTimeoutSecs` (type: `integer`):

Timeout for each link-in-bio page request.

## `concurrency` (type: `integer`):

How many creators are processed in parallel.

## Actor input object example

```json
{
  "handles": [
    "theblissfulbrooke",
    "makeupby__mar"
  ],
  "maxCreators": 100,
  "emailSources": [
    "ig_business_contact",
    "bio",
    "link_in_bio"
  ],
  "emailTypes": [
    "creator",
    "management"
  ],
  "excludeVendorEmails": true,
  "requireContact": "email",
  "includeLinkInBio": true,
  "maxChildLinks": 5,
  "includeNoContactRows": false,
  "dedupe": true,
  "skipPreviouslyDelivered": "",
  "profileSource": "apifyProfileScraper",
  "profileScraperMaxChargeUsd": 1,
  "instagramProxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "linkProxy": {
    "useApifyProxy": true
  },
  "requestTimeoutSecs": 20,
  "concurrency": 5
}
```

# Actor output Schema

## `contacts` (type: `string`):

No description

## `detail` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "handles": [
        "theblissfulbrooke",
        "makeupby__mar"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kingly_contest_7cb/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 = { "handles": [
        "theblissfulbrooke",
        "makeupby__mar",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("kingly_contest_7cb/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 '{
  "handles": [
    "theblissfulbrooke",
    "makeupby__mar"
  ]
}' |
apify call kingly_contest_7cb/creator-contact-finder --silent --output-dataset

```

## MCP server setup

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