# Tiktok Creator Enrichment (`masked_hacker/tiktok-creator-enrichment`) Actor

- **URL**: https://apify.com/masked\_hacker/tiktok-creator-enrichment.md
- **Developed by:** [Masked Hacker](https://apify.com/masked_hacker) (community)
- **Categories:** Social media
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / 1,000 creator enricheds

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

## TikTok Creator Contact Enrichment

Turn TikTok handles — or a hashtag — into **CRM-ready contact cards**: email,
Instagram / YouTube / X / Threads, website, follower count, engagement and account
category. Built for influencer outreach and creator lead-gen.

No login, no device. The actor reads TikTok's public profile data and follows each
creator's bio link (Linktree, Beacons, own site) to recover the contact email that
isn't shown in the bio — then verifies quality so you get real addresses, not noise.

### What you get

- **Contact email** — resolved from the bio, the bio-link hub, and the creator's own
  site's contact/about pages. Agency / management emails included (the real outreach path).
- **Reach & engagement** — followers, following, total likes, video count, plus derived
  `followerTier`, avg-likes-per-video and likes-per-follower.
- **Every platform** — Instagram, YouTube, X, Threads and website links from the bio hub.
- **Account signals** — verified badge, business/Shop-seller flag, category, region,
  account age, avatar.

### Two ways to use it

**Enrich handles you already have:**

```json
{ "handles": ["mkbhd", "https://www.tiktok.com/@gordonramsayofficial", "humphreytalks"] }
```

**Discover creators by hashtag, then enrich them:**

```json
{ "hashtags": ["skincare", "personalfinance"], "maxProfilesPerHashtag": 50, "onlyEmailFound": true }
```

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `handles` | string\[] | — | TikTok handles or profile URLs. |
| `hashtags` | string\[] | — | Discover creators from each hashtag's recent videos. |
| `maxProfilesPerHashtag` | integer | `50` | Cap creators collected per hashtag. |
| `onlyEmailFound` | boolean | `false` | Output only creators where an email was found (lead-list mode). |
| `skipProfiles` | string\[] | — | Handles already enriched — skipped before fetching, never re-charged. |
| `crawlBioLinks` | boolean | `true` | Follow bio links to recover emails. Higher yield. |
| `maxConcurrency` | integer | `10` | Profiles enriched in parallel. |
| `proxyConfiguration` | object | Residential | Residential recommended. |

Provide `handles`, `hashtags`, or both.

### Output

One record per creator in the default dataset:

```json
{
  "handle": "humphreytalks",
  "nickname": "Humphrey Yang",
  "email": "humphreytalks@gmail.com",
  "emailSource": "bio",
  "emailStatus": "deliverable",
  "instagram": "humphreytalks",
  "youtube": "https://youtube.com/humphrey",
  "xUrl": "https://x.com/humphreytalks",
  "website": "humphreytalks.com",
  "phone": null,
  "followers": 3400000,
  "likes": 55000000,
  "videoCount": 611,
  "followerTier": "mega",
  "avgLikesPerVideo": 90016,
  "verified": true,
  "isBusinessAccount": false,
  "category": null,
  "discoveredFromHashtag": null
}
```

Email is resolved in order: **bio text → bio-link hub → the creator's own site**.
`emailSource` records which one hit; `emailStatus` flags domain-level deliverability
(`deliverable` = the domain publishes MX records and can receive mail, else `no_mx`).

### Pricing (pay per event)

| Event | Price |
|---|---|
| Creator enriched | $0.012 |

One flat price per creator — **everything included**: hashtag discovery, bio-link
crawling, cross-platform links, engagement metrics and email validation. No stacked
per-feature charges.

### How it works

1. Fetch the public TikTok profile and parse the embedded JSON (fast, no browser).
2. Build the card; if no email in the bio, follow the bio link → parse the hub for
   socials → crawl the creator's own site's contact pages.
3. Hashtag discovery and any challenged profiles run through a stealth browser
   (camoufox) with automatic IP-rotation retries, so results don't flake.

### Use cases

- Build creator outreach / lead lists for influencer campaigns.
- Source contacts for a niche by hashtag (skincare, fitness, finance…).
- Enrich an existing creator list with emails, socials, reach and engagement.

### Notes

- Email coverage runs roughly half of a varied creator set — creators who publish no
  email anywhere have none to find. Use `onlyEmailFound` for a pure lead list.
- Every account is honored: a challenged profile is retried, then written as a stub
  rather than silently dropped (unless `onlyEmailFound` is on).

# Actor input Schema

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

TikTok handles or profile URLs to enrich, e.g. "zachking" or "https://www.tiktok.com/@zachking".

## `hashtags` (type: `array`):

Optional. For each hashtag, collect creators from its recent videos, then enrich them. Combine with or use instead of handles.

## `maxProfilesPerHashtag` (type: `integer`):

Cap how many creators to collect from each hashtag.

## `skipProfiles` (type: `array`):

Handles/URLs already enriched in a previous run — skipped before fetching, so never re-charged.

## `onlyEmailFound` (type: `boolean`):

Drop creators where no contact email was found (lead-list mode).

## `crawlBioLinks` (type: `boolean`):

Follow each creator's bio link (Linktree/Beacons/own site) to recover a contact email when it isn't in the bio. Slower but higher email yield.

## `maxConcurrency` (type: `integer`):

Maximum profiles enriched in parallel.

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

Proxy for the HTTP profile/site pass. Datacenter is fine and cheap; camoufox browser passes always use residential.

## Actor input object example

```json
{
  "handles": [
    "mkbhd",
    "https://www.tiktok.com/@gordonramsayofficial"
  ],
  "hashtags": [
    "personalfinance",
    "skincare"
  ],
  "maxProfilesPerHashtag": 50,
  "skipProfiles": [],
  "onlyEmailFound": false,
  "crawlBioLinks": true,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}
```

# Actor output Schema

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

All enriched TikTok creators 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 = {
    "handles": [
        "zachking",
        "humphreytalks"
    ],
    "hashtags": [],
    "skipProfiles": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("masked_hacker/tiktok-creator-enrichment").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": [
        "zachking",
        "humphreytalks",
    ],
    "hashtags": [],
    "skipProfiles": [],
}

# Run the Actor and wait for it to finish
run = client.actor("masked_hacker/tiktok-creator-enrichment").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 '{
  "handles": [
    "zachking",
    "humphreytalks"
  ],
  "hashtags": [],
  "skipProfiles": []
}' |
apify call masked_hacker/tiktok-creator-enrichment --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=masked_hacker/tiktok-creator-enrichment",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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