# TikTok Email Finder Scraper (`automation-lab/tiktok-profile-email-scraper`) Actor

Extract public TikTok profile email addresses with creator names, source bios, links, verification, and audience metrics for outreach lists.

- **URL**: https://apify.com/automation-lab/tiktok-profile-email-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Email Finder Scraper

Build creator outreach lists from email addresses that people explicitly publish in their TikTok profile bios.

TikTok Email Finder Scraper accepts usernames, `@handles`, or profile URLs and returns one structured record per public email, enriched with the creator's profile link, bio, verification status, and audience metrics. It does **not** guess, infer, or generate private email addresses.

### What does TikTok Email Finder Scraper do?

The Actor reads supplied public TikTok profiles and:

- extracts email addresses displayed in the profile bio;
- preserves the bio as evidence of where each email appeared;
- adds the canonical username and profile URL;
- adds the current display name and linked website;
- adds verification and privacy flags;
- adds follower, following, likes, and video counts;
- filters contacts by follower count, verification, or email domain;
- skips profiles that do not display an email;
- exports clean JSON, CSV, Excel, XML, or RSS through Apify datasets.

The result is a reviewable contact list for recurring creator outreach rather than a list of inferred addresses.

### Who is it for?

#### Influencer marketing teams

Enrich a vetted campaign shortlist with public contact details and current audience context before outreach.

#### Creator partnerships teams

Collect business emails displayed by selected creators and filter for agency or company domains.

#### PR and communications teams

Turn known TikTok profile URLs into a spreadsheet-ready contact list while keeping the source bio beside every email.

#### Data and automation teams

Schedule the same profile list, save timestamped datasets, and compare public contact changes in downstream systems.

#### Researchers

Review only the public contact information creators chose to show, together with transparent source URLs and scrape times.

### Why use this Actor?

- **No inferred emails:** an output row exists only when an address appears in the public profile bio.
- **Source evidence included:** the output keeps the bio and profile URL beside the email.
- **Useful context:** qualification fields are collected in the same request as the contact.
- **Bulk input:** mix handles, usernames, and full TikTok profile URLs.
- **Focused filters:** narrow results by audience size, verification, and email domain.
- **HTTP-only execution:** no browser is needed for the supported supplied-profile workflow.
- **Integration ready:** use the dataset API, webhooks, schedules, Zapier, Make, Google Sheets, or your own code.

### What TikTok profile data is extracted?

| Field | Meaning |
| --- | --- |
| `email` | Email address displayed in the public profile bio |
| `emailDomain` | Domain portion of the email |
| `username` | Current TikTok username |
| `displayName` | Public display name |
| `profileUrl` | Canonical TikTok profile URL |
| `bio` | Public bio where the email was found |
| `bioLink` | Public website linked from the profile, when available |
| `userId` | Public TikTok user identifier |
| `isVerified` | Whether TikTok marks the profile verified |
| `isPrivate` | Whether TikTok marks the profile private |
| `followerCount` | Public follower count at scrape time |
| `followingCount` | Public following count at scrape time |
| `likesCount` | Public profile likes count at scrape time |
| `videoCount` | Public video count at scrape time |
| `scrapedAt` | UTC timestamp for the extraction |

### How to find public emails on TikTok profiles

1. Open the Actor in Apify Console.
2. Add at least one username, handle, or profile URL under **TikTok profiles**.
3. Keep the default filters to accept every displayed email.
4. Optionally set a minimum follower count, require verified profiles, or list accepted email domains.
5. Set **Maximum email records** to control the output size.
6. Click **Start**.
7. Open the default dataset to preview, download, or integrate the records.

A profile without a displayed email is checked but does not create a dataset row or item charge.

### Input parameters

#### `profiles`

Required array of up to 1,000 profiles. Accepted forms are:

- `samplecreator`
- `@samplecreator`
- `https://www.tiktok.com/@samplecreator`

Duplicate handles are requested once. Invalid or non-TikTok URLs fail input validation instead of being silently reinterpreted.

#### `maxItems`

Maximum number of email records to save, from 1 to 1,000. The default is 100.

A profile can display more than one email. Each displayed email is one output row, so `maxItems` limits contacts rather than requested profiles.

#### `minFollowers`

Optional non-negative minimum follower count. The default `0` accepts profiles of any audience size.

#### `verifiedOnly`

Set to `true` to return contacts only from profiles currently marked verified by TikTok.

#### `emailDomains`

Optional list of exact domains such as:

```json
["gmail.com", "agency.example"]
```

Do not include a full email address. Matching is case-insensitive and exact by domain.

### Example input

```json
{
  "profiles": [
    "@jamescharles",
    "@spencerx",
    "https://www.tiktok.com/@lexibrookerivera",
    "@avani"
  ],
  "maxItems": 10,
  "minFollowers": 1000000,
  "verifiedOnly": true,
  "emailDomains": []
}
```

### Example output

The following shape reflects current Actor output. Values are anonymized:

```json
{
  "email": "partnerships@example.org",
  "emailDomain": "example.org",
  "username": "samplecreator",
  "displayName": "Sample Creator",
  "profileUrl": "https://www.tiktok.com/@samplecreator",
  "bio": "Short videos and creator tips | partnerships@example.org",
  "bioLink": "https://www.example.org",
  "userId": "7123456789012345678",
  "isVerified": true,
  "isPrivate": false,
  "followerCount": 125000,
  "followingCount": 340,
  "likesCount": 2400000,
  "videoCount": 186,
  "scrapedAt": "2026-01-15T12:00:00.000Z"
}
```

### How much does it cost to extract public TikTok profile emails?

This Actor uses pay-per-event pricing:

- one small `start` event is charged when a valid run begins;
- one `item` event is charged for each public email record saved;
- profiles without a displayed email are not charged as items;
- invalid, unavailable, filtered, duplicate, or failed profiles are not charged as items.

The one-time start event is **$0.005**. Item prices decrease across the six Apify tiers:

| Tier | Price per public email record |
| --- | ---: |
| FREE | $0.00414 |
| BRONZE | $0.0036 |
| SILVER | $0.002808 |
| GOLD | $0.00216 |
| PLATINUM | $0.00144 |
| DIAMOND | $0.001008 |

At the BRONZE tier, example Actor charges are:

| Public email records | Start + item events |
| ---: | ---: |
| 1 | USD 0.0086 |
| 10 | USD 0.0410 |
| 100 | USD 0.3650 |

Multiply your active tier's item price by the number of displayed email records and add the run-start fee. Runtime platform usage may be billed separately according to your Apify plan.

### Workflows and integrations

#### Build a one-time creator contact list

Supply a campaign shortlist, run the Actor, review the source bios, and download the overview as CSV or Excel.

#### Schedule recurring outreach enrichment

Save the input as an Apify Task and schedule it weekly. Send each dataset to your warehouse and compare `email`, `bio`, and `scrapedAt` over time.

#### Route agency contacts

Use `emailDomains` to return contacts from a known agency domain, then send the dataset to the account owner in your CRM.

#### Qualify by audience size

Use `minFollowers` and `verifiedOnly` to create a smaller review queue before an outreach campaign.

#### Trigger downstream automation

Connect a run-finished webhook to Make, Zapier, Slack, Google Sheets, HubSpot, or a custom endpoint.

### Use the Actor with the Apify API

Replace `YOUR_TOKEN` with an Apify API token.

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~tiktok-profile-email-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "profiles": ["@jamescharles", "@spencerx"],
    "maxItems": 10
  }'
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/tiktok-profile-email-scraper').call({
  profiles: ['@jamescharles', '@spencerx'],
  maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/tiktok-profile-email-scraper").call(run_input={
    "profiles": ["@jamescharles", "@spencerx"],
    "maxItems": 10,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use TikTok Email Finder Scraper with MCP

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/tiktok-profile-email-scraper"
```

#### Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use this MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/tiktok-profile-email-scraper"
    }
  }
}
```

Example prompts:

- “Extract public contact emails and follower counts from these TikTok profile URLs.”
- “Return only verified creators with at least one million followers from this shortlist.”
- “From these TikTok profiles, keep public emails on `wmeagency.com`.”

### Tips for reliable runs

- Use current profile URLs or exact usernames.
- Start with a small sample before submitting hundreds of profiles.
- Keep `maxItems` near the number of contacts you actually need.
- Remember that many profiles do not publicly display an email.
- Re-run saved Tasks when fresh public profile metrics matter.
- Review the `bio` and `profileUrl` before using a contact in outreach.
- Split very large recurring lists into logical campaign Tasks for easier comparison.

### Limits and failure behavior

- The Actor supports supplied profiles; it does not search TikTok by keyword.
- It reads public profile bios only and does not visit linked websites for hidden contact details.
- It does not infer email patterns, verify deliverability, or claim that an address belongs to a specific legal person.
- Private, removed, renamed, region-restricted, or challenged profiles may be unavailable.
- TikTok can change its public page structure without notice.
- Individual unavailable profiles are logged and skipped so a bulk run can retain useful results.
- Transient network and upstream server errors receive bounded retries.
- A successful run can contain zero rows when none of the supplied profiles displays an email matching the filters.

### Responsible use and legality

This Actor collects information displayed on public TikTok profiles. Public availability does not remove privacy, marketing, or platform obligations.

You are responsible for:

- having a lawful purpose for collection and outreach;
- following TikTok's terms and applicable laws;
- respecting GDPR, CCPA, CAN-SPAM, ePrivacy, and similar rules where they apply;
- keeping appropriate suppression and opt-out lists;
- securing exported datasets and limiting retention;
- avoiding harassment, spam, discrimination, or sensitive profiling;
- verifying that your message is relevant before contacting anyone.

Do not use the Actor to obtain private data, bypass access controls, or infer undisclosed contact details.

### Troubleshooting

#### Why did a valid profile produce no row?

The profile may not display an email in its current public bio, or it may not satisfy `minFollowers`, `verifiedOnly`, or `emailDomains`. Check the run log for filtered, unavailable, and no-email counts.

#### Why is a profile unavailable?

Confirm the current username in a normal browser. The profile may have been renamed, removed, made unavailable in the run region, or temporarily challenged by TikTok. Retry later before changing a large saved list.

#### Why did input validation fail?

Use a plain username, `@handle`, or a full `https://www.tiktok.com/@handle` URL. Video URLs, search URLs, shortened URLs, and other domains are intentionally rejected.

#### Is the email verified?

The Actor verifies only that the exact address is displayed in the public bio at scrape time. It does not test mailbox deliverability or ownership.

### Related Automation Lab Actors

- [TikTok Profile Scraper](https://apify.com/automation-lab/tiktok-profile-scraper) for public profile metrics whether or not a bio contains an email.
- [TikTok Search Scraper](https://apify.com/automation-lab/tiktok-search-scraper) for discovering TikTok users or videos by keyword before profile enrichment.
- [TikTok Creator Profile Search Scraper](https://apify.com/automation-lab/tiktok-creator-profile-search-scraper) for creator discovery workflows.

### FAQ

#### Does it find private or hidden emails?

No. It returns only addresses that appear in the public TikTok profile bio.

#### Can I submit both usernames and URLs?

Yes. You can mix usernames, `@handles`, and canonical TikTok profile URLs in one run.

#### Does it charge for profiles without emails?

No per-item event is charged for a profile that does not produce a public email record. A valid run still has the one-time start event.

#### Can one profile create multiple rows?

Yes. If a public bio displays multiple distinct emails, the Actor returns one row for each address with the same profile context.

#### Can I filter Gmail or agency contacts?

Yes. Put exact domains such as `gmail.com` or `wmeagency.com` in `emailDomains`.

#### Does the Actor send outreach messages?

No. It creates a structured dataset. Connect that dataset to your compliant review and messaging workflow.

#### Does it require a TikTok login?

No login is required for the supported public-profile workflow.

# Actor input Schema

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

TikTok usernames, @handles, or full profile URLs. Up to 1,000 profiles per run.

## `maxItems` (type: `integer`):

Stop after saving this many public email records.

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

Only return contacts from profiles with at least this many followers.

## `verifiedOnly` (type: `boolean`):

Return email records only for TikTok-verified profiles.

## `emailDomains` (type: `array`):

Optional domains such as gmail.com or wmeagency.com. Leave empty to accept every publicly displayed email domain.

## Actor input object example

```json
{
  "profiles": [
    "@jamescharles",
    "@spencerx",
    "https://www.tiktok.com/@lexibrookerivera"
  ],
  "maxItems": 10,
  "minFollowers": 0,
  "verifiedOnly": false,
  "emailDomains": []
}
```

# Actor output Schema

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

Dataset containing one row per publicly displayed profile email.

# 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 = {
    "profiles": [
        "@jamescharles",
        "@spencerx",
        "https://www.tiktok.com/@lexibrookerivera"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/tiktok-profile-email-scraper").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 = {
    "profiles": [
        "@jamescharles",
        "@spencerx",
        "https://www.tiktok.com/@lexibrookerivera",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/tiktok-profile-email-scraper").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 '{
  "profiles": [
    "@jamescharles",
    "@spencerx",
    "https://www.tiktok.com/@lexibrookerivera"
  ],
  "maxItems": 10
}' |
apify call automation-lab/tiktok-profile-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/tiktok-profile-email-scraper"
        }
    }
}

```

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/Z91lFeibY7kZb8eR5/builds/FpYloK24VOFv4qxYq/openapi.json
