# TikTok Profile Scraper: Creator Stats, Bio, Emails & Posts (`church_of_loujess/tiktok-profile-scraper`) Actor

Fast 256MB TikTok Profile Scraper. Extract follower count, total likes, bio, bioLink, verified badge, TikTok Shop seller status, extracted business emails, and latest posts by username or URL. Works with public & private profiles. Zero proxies needed.

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

## Pricing

from $5.00 / 1,000 extracted tiktok profile / post items

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

## TikTok Profile & Creator Lead Scraper (2026) — Zero-Proxy, 256MB & MCP Ready

Scrape **TikTok creator profiles, follower counts, total likes, bio text, clickable `bioLink`, TikTok Shop seller status (`ttSeller`), extracted business emails (from bio + external `bioLink` landing pages), and latest posts with decoded spoken transcripts (`transcriptText`)** — without residential proxies or heavy browser automation.

Engineered as a drop-in, zero-limit upgrade to `clockworks/tiktok-profile-scraper` and `abe/tiktok-profile-scraper`, running in a **256 MB RAM** Node.js container with 3-tier fallback (`/@{handle}` hydration → `/embed/@{handle}` feed → `X-Bogus` signed search recovery).

***

### Why Choose This TikTok Profile Scraper?

| Capability | Legacy Profile Scrapers (`clockworks` / `abe`) | `church_of_loujess/tiktok-profile-scraper` |
| :--- | :--- | :--- |
| **Proxy Requirement** | Residential proxies or strict free-plan caps | **Zero Proxies Required** (Direct HTTP + `X-Bogus` signing) |
| **Memory Footprint** | 1,024 MB – 4,096 MB | **256 MB RAM** (`got-scraping` + universal hydration) |
| **Schema Compatibility** | Nested `authorMeta` OR flat fields | **Both!** Full `clockworks` (`authorMeta`, `videoMeta`, `musicMeta`) + flat `abe` fields (`username`, `followers`, `likes`, `bio`, `bioLink`) |
| **BioLink Email Crawler** | Raw bio string only | **Crawls external `bioLink` landing pages for business inquiry emails (`extractedEmails`)** |
| **Spoken Transcripts** | Subtitle URLs only | **Auto-decoded plain-text `transcriptText` for AI / RAG pipelines** |
| **3-Tier Recovery** | Fails on regional / login-gated profiles | **Automatically recovers restricted handles via signed TikTok Search API** |

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `profiles` | `string[]` | `["nasa", "khaby.lame"]` | TikTok usernames (`nasa`), `@handle`, or full URLs (`https://www.tiktok.com/@nasa`). Duplicates are removed automatically. |
| `usernames` | `string[]` | `[]` | Optional alias for `profiles` (100% compatible with `abe/tiktok-profile-scraper` payloads). |
| `resultsPerPage` | `integer` | `1` | Latest posts to return per profile. Set to **`0` for profile-only mode** (1 compact item per handle with creator stats & emails), or `1+` to include newest posts. |
| `oldestPostDate` | `string` | `""` | Optional ISO date filter (e.g. `2025-01-01`). Only posts created on/after this date are returned. |
| `excludePinnedPosts` | `boolean` | `false` | Filter out pinned posts when fetching a creator's latest videos. |
| `crawlBioLinkForEmails` | `boolean` | `true` | If the creator has an external `bioLink` (website, Linktree, Beacons, etc.), fetches the landing page to extract business inquiry emails. |
| `includeTranscriptText` | `boolean` | `true` | Automatically fetches and decodes WebVTT subtitle tracks into clean `transcriptText`. |
| `proxyConfiguration` | `object` | `{"useApifyProxy": false}` | Optional proxy settings. Works out-of-the-box with zero proxies. |

***

### Usage Examples

#### 1. Creator Profile + Latest Posts + BioLink Email Discovery

```json
{
  "profiles": [
    "https://www.tiktok.com/@khaby.lame",
    "@nasa",
    "zachking"
  ],
  "resultsPerPage": 3,
  "crawlBioLinkForEmails": true,
  "includeTranscriptText": true
}
```

#### 2. Fast Profile-Only Lead Enrichment (`resultsPerPage: 0`)

Returns exactly one record per creator with follower counts, total heart counts, verification, TikTok Shop status, and extracted emails:

```json
{
  "profiles": ["khaby.lame", "nasa", "charlidamelio"],
  "resultsPerPage": 0,
  "crawlBioLinkForEmails": true
}
```

***

### Sample Output

```json
{
  "id": "7694335322922044703",
  "text": "Was the ball out, or was it just my imagination? 🤨#learnfromkhaby #comedy",
  "createTime": 1791477076,
  "createTimeISO": "2026-10-08T16:31:16.000Z",
  "username": "khaby.lame",
  "displayName": "Khabane lame",
  "bio": "Se vuoi ridere sei nel posto giusto😎 If u wanna laugh u r in the right place😎",
  "bioLink": null,
  "profileUrl": "https://www.tiktok.com/@khaby.lame",
  "avatarUrl": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/...",
  "verified": true,
  "privateAccount": false,
  "ttSeller": false,
  "commerceCategory": null,
  "followers": 163013261,
  "following": 81,
  "likes": 2688271644,
  "videos": 1356,
  "extractedEmails": [],
  "diggCount": 635600,
  "shareCount": 19700,
  "playCount": 5800000,
  "collectCount": 37081,
  "commentCount": 11700,
  "webVideoUrl": "https://www.tiktok.com/@khaby.lame/video/7694335322922044703",
  "transcriptText": null,
  "authorMeta": {
    "id": "127905465618821121",
    "secUid": "MS4wLjABAAAAwAg0rSzO65WQfz4RzQgGv2Xdv108BgPXhRrrmNVIHQZ9PO8-flwwRtEppYTS0OjA",
    "name": "khaby.lame",
    "nickName": "Khabane lame",
    "verified": true,
    "fans": 163013261,
    "heart": 2688271644,
    "video": 1356
  }
}
```

# Actor input Schema

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

TikTok usernames to scrape: bare handles (<code>nasa</code>), <code>@handle</code>, or full profile URLs (<code>https://www.tiktok.com/@nasa</code>). Duplicates are automatically removed.

## `usernames` (type: `array`):

Optional alias for <code>profiles</code> (compatible with legacy <code>abe/tiktok-profile-scraper</code> inputs). Merged automatically with <code>profiles</code>.

## `resultsPerPage` (type: `integer`):

How many latest posts to return per profile. Set to <strong>0 for profile-only mode</strong> (one compact item per handle with full creator metadata & emails). Set to 1 or more to include the creator's newest posts.

## `oldestPostDate` (type: `string`):

Only return posts created on/after this date (ISO format, e.g. <code>2024-01-01</code>). Leave empty for no date filter.

## `excludePinnedPosts` (type: `boolean`):

If enabled, pinned posts are filtered out when fetching a profile's latest posts.

## `crawlBioLinkForEmails` (type: `boolean`):

When enabled, if a creator has an external <code>bioLink</code> (website, Linktree, Beacons, etc.), fetches the landing page to extract business inquiry emails and social links.

## `includeTranscriptText` (type: `boolean`):

When fetching posts (<code>resultsPerPage >= 1</code>), automatically decode WebVTT subtitle tracks into plain spoken text (<code>transcriptText</code>).

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

Optional proxy settings. Works out-of-the-box with zero proxy configuration required.

## Actor input object example

```json
{
  "profiles": [
    "khaby.lame",
    "nasa",
    "zachking",
    "charlidamelio"
  ],
  "usernames": [],
  "resultsPerPage": 5,
  "excludePinnedPosts": false,
  "crawlBioLinkForEmails": true,
  "includeTranscriptText": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "profiles": [
        "khaby.lame",
        "nasa",
        "zachking",
        "charlidamelio"
    ],
    "resultsPerPage": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("church_of_loujess/tiktok-profile-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": [
        "khaby.lame",
        "nasa",
        "zachking",
        "charlidamelio",
    ],
    "resultsPerPage": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("church_of_loujess/tiktok-profile-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": [
    "khaby.lame",
    "nasa",
    "zachking",
    "charlidamelio"
  ],
  "resultsPerPage": 5
}' |
apify call church_of_loujess/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

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