# TikTok Profile Scraper + Contacts & Analytics (`pro100chok/tiktok-profile-pro`) Actor

Scrape TikTok profiles at scale — bio, stats, full video catalog with views/likes/comments, bio contacts (emails,
phones, Instagram, YouTube, Telegram), engagement analytics and sponsored post detection. Unlimited videos per
creator. First 10 videos free. No browser needed.

- **URL**: https://apify.com/pro100chok/tiktok-profile-pro.md
- **Developed by:** [Raven](https://apify.com/pro100chok) (community)
- **Categories:** Lead generation, Social media, Videos
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 profile scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Profile Scraper + Analytics & Contacts | First 10 Videos Free

**Scrape any public TikTok profile at scale — full bio, stats, verification, business category, complete video catalog with views/likes/comments/shares, bio-link contacts (emails, phones, Instagram, YouTube, Telegram, WhatsApp), and engagement analytics. Pure HTTP, no browser. First 10 videos per profile free.**

---

### Why this actor

- **Unlimited videos per profile** — paginates the full creator catalog via TikTok's author-videos feed. Tested up to 120+ videos per creator.
- **Works for every public profile** — including creators without playlists where other scrapers return only a handful of videos.
- **No headless browser** — pure HTTP requests with Chrome TLS impersonation. Runs 5–10× faster and cheaper than Playwright/Puppeteer-based scrapers.
- **Bio contact extraction** — emails (incl. `hello [at] domain [dot] com`), phone numbers, Instagram / YouTube / Twitter / Telegram / WhatsApp / Snapchat handles, websites — parsed from bio and bio-link.
- **Engagement analytics in-actor** — no post-processing needed. Avg/median views, engagement rate, viral ratio, sponsored-content ratio, top hashtags and sounds, posting frequency, best posting hour and weekday.
- **Separate tabs, separate arrays** — `videos`, `reposts`, `likedVideos` as distinct fields with independent on/off toggles and caps.

---

### Key Features

- **Full profile data** — ID, username, nickname, bio, bio-link, avatar (3 resolutions), verified / private / seller / commerce flags, business category, region, language, follower / following / heart / video / friend counts, account creation time
- **Complete video catalog** — own videos via the creator-feed endpoint with cursor pagination; falls back to playlists + embed if needed
- **Reposts tab (optional)** — toggle `includeReposts`, separate `reposts[]` array
- **Liked videos tab (optional)** — toggle `includeLikedVideos`; auto-skipped when the profile has private likes
- **Contact enrichment** — 9 contact types parsed from bio + bio-link
- **Sponsored-post detection** — flags `#ad`, `#sponsored`, `#partner`, `#paidpartnership`, `#ambassador`, `gifted`, `paid partnership`, and related markers
- **Engagement analytics** — avg/median views, avg likes/comments/shares, engagement rate by followers and by views, viral ratio, sponsored ratio, original-audio ratio, posts per week, best posting hour/weekday, top hashtags and sounds
- **Profile-level analytics** — account age, follower-to-following ratio, avg likes per video, hearts per follower (computable without fetching videos)
- **Parallel processing** — up to 20 concurrent profiles with isolated proxy sessions
- **Auto-retry with backoff** — 5 attempts on 403 / 429 / 5xx / network errors
- **Residential proxy support** — Apify Residential built-in; bring-your-own also supported
- **Clean JSON output** — dataset exportable as JSON, CSV, Excel, XML, HTML

---

### Pricing

Only **two events**, both pay-per-event:

| Event | Price | When it fires |
|---|---|---|
| **Profile scraped** | **$0.004** | Once per successfully scraped profile |
| **Video scraped (over 10)** | **$0.0003** | Per video beyond the **first 10 per profile** — counts own videos + reposts + liked combined |

**First 10 videos per profile are free.** You're never charged unless you ask for more than 10 videos total across `videos + reposts + likedVideos` for a given profile.

---

### What Data You Get

#### Profile fields (always returned)

`id`, `secUid`, `username`, `nickname`, `signature` (bio), `bioLink`, `verified`, `private`, `region`, `language`, `category` (business), `avatar.thumb / medium / large`, `followerCount`, `followingCount`, `heartCount`, `videoCount`, `friendCount`, `diggCount`, `createTime`, `ttSeller`, `commerceUser`, `openFavorite`, `profileUrl`

#### Video item (videos / reposts / likedVideos)

`id`, `desc`, `createTime`, `duration`, `playUrl`, `downloadUrl`, `cover`, `dynamicCover`, `width`, `height`, `ratio`, `format`, `definition`, `isAd`, `isPinned`, `sponsored`, `source` (`creator_feed` | `playlist` | `embed` | `repost` | `liked`), `playlistId`, `playlistName`, `playCount`, `diggCount`, `commentCount`, `shareCount`, `collectCount`, `hashtags[]`, `mentions[]`, `authorUsername`, `webVideoUrl`, `music.{id, title, authorName, album, duration, original, coverLarge, playUrl}`

#### Contacts (when `extractContacts=true`)

`emails[]`, `phones[]`, `websites[]`, `instagram[]`, `youtube[]`, `twitter[]`, `telegram[]`, `whatsapp[]`, `snapchat[]`

#### Analytics (when `computeAnalytics=true`)

- **Profile-level** — `accountAgeDays`, `followerToFollowingRatio`, `avgLikesPerVideo`, `followersPerVideo`, `totalHeartsPerFollower`
- **Video-level** — `videosAnalyzed`, `avgViews`, `medianViews`, `avgLikes`, `avgComments`, `avgShares`, `engagementRate`, `engagementRateByViews`, `viralRatio`, `sponsoredCount`, `sponsoredRatio`, `originalAudioRatio`, `topHashtags[{tag,count}]`, `topSounds[{id,title,count}]`, `postsPerWeek`, `bestHourUtc`, `bestWeekday`, `lastPostAt`, `firstPostAt`

---

### How It Works

1. **Input profiles** — TikTok usernames (`nike`, `@khaby.lame`) or profile URLs (`https://www.tiktok.com/@mrbeast`)
2. **Profile HTML** — fetched via proxy with Chrome TLS impersonation, parsed from the embedded rehydration JSON — gives full profile metadata instantly
3. **Video catalog** — paginated through TikTok's author-videos feed (the same endpoint that powers the "Videos by this creator" panel on every video page). Walks the full back-catalog via timestamp cursor
4. **Optional tabs** — reposts and liked-videos fetched from dedicated endpoints when their toggles are on
5. **Enrichment** — bio parsed for contact info, videos scanned for sponsored markers, analytics computed over the user's own videos
6. **Output** — structured JSON pushed to Apify dataset; export as JSON / CSV / Excel / XML / HTML

---

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `profiles` | Array | — | TikTok usernames or profile URLs (**required**) |
| `maxVideosPerProfile` | Integer | `30` | User's own videos |
| `includeReposts` | Boolean | `false` | Scrape the Reposts tab into `reposts[]` |
| `maxRepostsPerProfile` | Integer | `30` | Cap when `includeReposts=true` |
| `includeLikedVideos` | Boolean | `false` | Scrape the Liked tab into `likedVideos[]` (requires public likes) |
| `maxLikedVideosPerProfile` | Integer | `30` | Cap when `includeLikedVideos=true` |
| `extractContacts` | Boolean | `true` | Parse bio + bio-link for contact info |
| `computeAnalytics` | Boolean | `true` | Compute engagement analytics |
| `detectSponsored` | Boolean | `true` | Flag sponsored posts |
| `maxConcurrency` | Integer | `3` | Parallel profiles |
| `proxyConfiguration` | Object | Residential | Proxy settings |

---

### Example Input

#### Standard: profile + 30 videos + analytics + contacts

```json
{
  "profiles": ["nike", "khaby.lame", "https://www.tiktok.com/@mrbeast"],
  "maxVideosPerProfile": 30,
  "extractContacts": true,
  "computeAnalytics": true
}
````

#### All tabs: own + reposts + liked

```json
{
  "profiles": ["psiho.kisa"],
  "maxVideosPerProfile": 100,
  "includeReposts": true,
  "maxRepostsPerProfile": 20,
  "includeLikedVideos": true,
  "maxLikedVideosPerProfile": 20
}
```

#### Cheapest: profile-only lead generation (only emails/socials from bio)

```json
{
  "profiles": ["influencer1", "influencer2", "influencer3"],
  "maxVideosPerProfile": 0,
  "extractContacts": true,
  "computeAnalytics": false
}
```

***

### Output Example

#### Creator with full video catalog

```json
{
  "input": "psiho.kisa",
  "success": true,
  "scrapedAt": "2026-04-17T13:15:42.108Z",
  "id": "7500221045031306273",
  "secUid": "MS4wLjABAAAAC2PPjB3_...",
  "username": "psiho.kisa",
  "nickname": "Кисы",
  "signature": "ДРУГ КИСА · 4-5",
  "bioLink": null,
  "verified": false,
  "region": "RU",
  "followerCount": 326901,
  "followingCount": 3,
  "heartCount": 16800000,
  "videoCount": 121,

  "videos": [
    {
      "id": "7625229188693232918",
      "desc": "Признаки, что у тебя Мифомания? Кисы объясняют!",
      "createTime": 1775387026,
      "duration": 76,
      "playCount": 2000000,
      "diggCount": 156500,
      "commentCount": 612,
      "shareCount": 10700,
      "collectCount": 13818,
      "cover": "https://...",
      "playUrl": "https://...",
      "hashtags": [],
      "music": { "title": "original sound", "authorName": "ДРУГ КИСА", "original": true },
      "source": "creator_feed",
      "sponsored": false,
      "authorUsername": "psiho.kisa",
      "webVideoUrl": "https://www.tiktok.com/@psiho.kisa/video/7625229188693232918"
    }
  ],

  "videosSourceCounts": { "creator_feed": 50, "playlists": 0, "embed": 0 },
  "reposts": null,
  "likedVideos": null,

  "contacts": {
    "emails": [], "phones": [], "websites": [],
    "instagram": [], "youtube": [], "twitter": [],
    "telegram": [], "whatsapp": [], "snapchat": []
  },

  "analytics": {
    "accountAgeDays": 512,
    "followerToFollowingRatio": 108967.0,
    "avgLikesPerVideo": 138843.0,
    "followersPerVideo": 2701.66,
    "totalHeartsPerFollower": 51.39,
    "videosAnalyzed": 50,
    "avgViews": 1520000,
    "medianViews": 1100000,
    "avgLikes": 98200,
    "avgComments": 540,
    "avgShares": 6100,
    "engagementRate": 32.5,
    "engagementRateByViews": 6.8,
    "viralRatio": 0.12,
    "sponsoredCount": 0,
    "sponsoredRatio": 0.0,
    "originalAudioRatio": 0.96,
    "topHashtags": [{ "tag": "shorts", "count": 14 }],
    "topSounds": [{ "id": "...", "title": "original sound", "count": 38 }],
    "postsPerWeek": 3.8,
    "bestHourUtc": 16,
    "bestWeekday": "Tuesday",
    "lastPostAt": 1775387026,
    "firstPostAt": 1748879546
  },
  "engagementRate": 32.5,
  "avgViews": 1520000
}
```

#### Bulk lead-generation (profile-only)

```json
{
  "input": "chef_smith",
  "success": true,
  "username": "chef_smith",
  "nickname": "Chef Smith",
  "followerCount": 82000,
  "category": "Food & Beverage",
  "contacts": {
    "emails": ["bookings@chefsmith.com"],
    "phones": ["+15551234567"],
    "websites": ["https://chefsmith.com"],
    "instagram": ["chef_smith_ig"],
    "youtube": [], "twitter": [],
    "telegram": [], "whatsapp": [], "snapchat": []
  }
}
```

#### Failed input

```json
{
  "input": "this_user_does_not_exist",
  "success": false,
  "error": "Profile @this_user_does_not_exist not found (404)"
}
```

***

### Proxy Requirements

**Residential proxy strongly recommended.** TikTok flags datacenter IPs aggressively.

- **Apify Residential Proxy** (default) — `RESIDENTIAL` group, works globally
- **Custom proxy** — any rotating residential HTTP proxy (IPRoyal, Smartproxy, Bright Data, Oxylabs)

Each profile runs on an isolated proxy session so warmup cookies (`ttwid`, `msToken`, `tt_chain_token`) stay consistent across playlist, video-feed, and detail calls.

***

### Limitations

- **Private accounts** — TikTok blocks all video endpoints for private profiles; only public metadata is returned
- **Private likes** — the Liked tab is fetchable only when the user enabled "Show liked videos" (`openFavorite=true`). Actor auto-detects and skips when closed
- **Catalog depth** — the creator feed typically paginates to 100–300 videos per creator; extremely old back-catalog (2+ years) may be inaccessible for some accounts
- **Dynamic view counts** — TikTok rounds and A/B-tests displayed counts; the scraper returns server-reported numbers at fetch time

***

### Use Cases

- **Influencer discovery** — filter by follower range, engagement rate, business category, posting frequency
- **Creator analytics** — engagement rate, viral ratio, sponsored-content cadence, best posting times, top hashtags
- **Lead generation from TikTok bios** — extract emails, phones, Instagram / YouTube handles, websites at scale into CSV
- **Competitor monitoring** — track follower growth, engagement trends, sponsored-post frequency
- **Brand-safety vetting** — detect sponsored markers, collaboration patterns before partnerships
- **Content research** — top sounds per niche, hashtag frequency, caption length and duration distribution
- **Audience quality signals** — follower-to-following ratio, hearts-per-follower, account age
- **Niche creator sourcing** — combine language + region + category for vertical influencer lists

***

### FAQ

**How many videos per profile can I get?**
Up to 100–300 depending on the creator, limited by `maxVideosPerProfile`. The actor paginates through TikTok's full author-videos feed.

**Does this work for profiles without playlists?**
Yes. The primary data source is TikTok's creator-feed endpoint, which is available for every public profile.

**What are the `videos`, `reposts`, and `likedVideos` arrays?**
Three separate tabs on TikTok, three separate arrays in output:

- `videos` — the user's own uploads
- `reposts` — content reposted from others (set `includeReposts=true`)
- `likedVideos` — videos the user liked, only when their likes are public (`includeLikedVideos=true`)

Each array is `null` when the feature is disabled — distinguishing "off" from "empty".

**How is the "first 10 free" pricing applied?**
The `video-scraped` event fires only for videos beyond the first 10 per profile. If you scrape 30 videos, 20 are billed. The count covers `videos + reposts + likedVideos` combined.

**Do I need to sign requests myself?**
No. The actor includes a Node.js request signer that generates all TikTok signatures (X-Bogus v2, X-Gnarly) locally. Zero external dependencies.

**Does it launch a browser?**
No. Pure HTTP requests with Chrome TLS fingerprint impersonation. The signer runs TikTok's signature SDK in Node's V8 — no Chromium, Puppeteer, or Playwright.

**Can I scrape private accounts?**
TikTok blocks all video endpoints for private accounts. The scraper returns public profile metadata (nickname, verified, counts) and marks the run successful, but `videos[]` will be empty.

**How do I extract emails from bios?**
Enable `extractContacts`. The parser handles standard emails (`hello@brand.com`) and obfuscated variants (`hello [at] brand [dot] com`, `hello(at)brand(dot)com`). Results appear in `contacts.emails[]`.

**Can I compute engagement rate without fetching videos?**
Yes — set `maxVideosPerProfile=0` and `computeAnalytics=true`. You get profile-level ratios (`avgLikesPerVideo`, `totalHeartsPerFollower`, `followerToFollowingRatio`) at the cheapest rate ($0.004 per profile, no video charges).

**Why do I get 403 or 429 errors?**
Proxy quality. Switch to Apify Residential or rotate to a cleaner pool. The scraper auto-retries 5× with exponential backoff before failing.

**Does the scraper work globally?**
Yes. All public profiles in any region and language (bio text, captions preserve Unicode — emoji, Cyrillic, CJK, Arabic, etc.). Contact extraction works across scripts.

**Can I run this on a schedule?**
Yes — use Apify's built-in scheduler for daily/weekly monitoring of creators or competitor accounts.

***

### Support

**Questions, bug reports, or feature requests:** afrcanec@gmail.com

***

### Tags / Keywords

TikTok Profile Scraper, TikTok User Scraper, TikTok Analytics, TikTok Engagement Rate Calculator, TikTok Email Extractor, TikTok Bio Scraper, TikTok Influencer Finder, TikTok Creator Analytics, TikTok Follower Counter, TikTok Video Scraper, TikTok Profile Data Extractor, TikTok Lead Generation, TikTok Contact Scraper, Extract TikTok Emails, TikTok Reposts Scraper, TikTok Liked Videos Scraper, TikTok Playlist Scraper, TikTok Hashtag Analyzer, TikTok Sponsored Post Detection, Creator Contact Finder, Social Media Analytics, Influencer Marketing Tool, TikTok Bio Link Parser, TikTok Avatar Downloader, TikTok Verified Account Checker, TikTok Business Account Finder, TikTok Seller Finder, TikTok Commerce Data, Creator Discovery Tool, Social Media Lead Extractor, TikTok Audience Analytics, TikTok Posting Frequency, TikTok Viral Score, TikTok Content Research, TikTok Music Scraper, TikTok Sound Analytics, Creator Intelligence, Brand Safety Audit TikTok, TikTok Partnership Research, Niche Creator Discovery, Influencer Outreach List Builder, TikTok Scraping API, TikTok Data Mining, Social Commerce Research

# Actor input Schema

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

List of TikTok usernames (with or without @) or full profile URLs, e.g. 'nike', '@nike', 'https://www.tiktok.com/@nike'. Minimum 10 profiles per run.

## `maxVideosPerProfile` (type: `integer`):

User's own videos. Fetched via playlists + embed fallback. 0 to disable.

## `includeReposts` (type: `boolean`):

Scrape the user's Reposts tab into a separate `reposts` array.

## `maxRepostsPerProfile` (type: `integer`):

Only used when Include reposts is on.

## `includeLikedVideos` (type: `boolean`):

Scrape the user's Liked tab into a separate `likedVideos` array. Only works if the user made their likes public (openFavorite=true).

## `maxLikedVideosPerProfile` (type: `integer`):

Only used when Include liked videos is on.

## `extractContacts` (type: `boolean`):

Parse bio + bio-link for emails, phones, Instagram / YouTube / Twitter / Telegram / WhatsApp handles and websites.

## `computeAnalytics` (type: `boolean`):

Avg/median views, engagement rate, posting frequency, top hashtags/sounds, sponsored-post detection.

## `detectSponsored` (type: `boolean`):

Flag videos with #ad, #sponsored, #partner, #paidpartnership and similar markers.

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

Parallel profiles fetched at once.

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

Residential US proxy strongly recommended. TikTok serves fewer block pages to US IPs.

## Actor input object example

```json
{
  "profiles": [
    "nike",
    "khaby.lame",
    "charlidamelio",
    "bellapoarch",
    "zachking",
    "mrbeast",
    "willsmith",
    "spencerx",
    "dominik.reselj",
    "therock"
  ],
  "maxVideosPerProfile": 30,
  "includeReposts": false,
  "maxRepostsPerProfile": 30,
  "includeLikedVideos": false,
  "maxLikedVideosPerProfile": 30,
  "extractContacts": true,
  "computeAnalytics": true,
  "detectSponsored": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `profiles` (type: `string`):

Full dataset — one row per TikTok profile with bio, stats, videos, reposts, liked videos, contacts and engagement analytics. Use the table/JSON toggle and the view tabs (Overview, Contacts, Analytics, Videos, etc.) to filter the columns.

## `input` (type: `string`):

JSON payload the actor was started with.

# 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": [
        "nike",
        "khaby.lame",
        "charlidamelio",
        "bellapoarch",
        "zachking",
        "mrbeast",
        "willsmith",
        "spencerx",
        "dominik.reselj",
        "therock"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pro100chok/tiktok-profile-pro").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": [
        "nike",
        "khaby.lame",
        "charlidamelio",
        "bellapoarch",
        "zachking",
        "mrbeast",
        "willsmith",
        "spencerx",
        "dominik.reselj",
        "therock",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pro100chok/tiktok-profile-pro").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 '{
  "profiles": [
    "nike",
    "khaby.lame",
    "charlidamelio",
    "bellapoarch",
    "zachking",
    "mrbeast",
    "willsmith",
    "spencerx",
    "dominik.reselj",
    "therock"
  ]
}' |
apify call pro100chok/tiktok-profile-pro --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Profile Scraper + Contacts & Analytics",
        "description": "Scrape TikTok profiles at scale — bio, stats, full video catalog with views/likes/comments, bio contacts (emails,\n  phones, Instagram, YouTube, Telegram), engagement analytics and sponsored post detection. Unlimited videos per\n  creator. First 10 videos free. No browser needed.",
        "version": "0.1",
        "x-build-id": "1Pucob14ijvueQkSC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/pro100chok~tiktok-profile-pro/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-pro100chok-tiktok-profile-pro",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/pro100chok~tiktok-profile-pro/runs": {
            "post": {
                "operationId": "runs-sync-pro100chok-tiktok-profile-pro",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/pro100chok~tiktok-profile-pro/run-sync": {
            "post": {
                "operationId": "run-sync-pro100chok-tiktok-profile-pro",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "profiles"
                ],
                "properties": {
                    "profiles": {
                        "title": "TikTok profiles",
                        "minItems": 10,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "List of TikTok usernames (with or without @) or full profile URLs, e.g. 'nike', '@nike', 'https://www.tiktok.com/@nike'. Minimum 10 profiles per run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxVideosPerProfile": {
                        "title": "Max videos per profile",
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "User's own videos. Fetched via playlists + embed fallback. 0 to disable.",
                        "default": 30
                    },
                    "includeReposts": {
                        "title": "Include reposts",
                        "type": "boolean",
                        "description": "Scrape the user's Reposts tab into a separate `reposts` array.",
                        "default": false
                    },
                    "maxRepostsPerProfile": {
                        "title": "Max reposts per profile",
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Only used when Include reposts is on.",
                        "default": 30
                    },
                    "includeLikedVideos": {
                        "title": "Include liked videos",
                        "type": "boolean",
                        "description": "Scrape the user's Liked tab into a separate `likedVideos` array. Only works if the user made their likes public (openFavorite=true).",
                        "default": false
                    },
                    "maxLikedVideosPerProfile": {
                        "title": "Max liked videos per profile",
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Only used when Include liked videos is on.",
                        "default": 30
                    },
                    "extractContacts": {
                        "title": "Extract contacts from bio",
                        "type": "boolean",
                        "description": "Parse bio + bio-link for emails, phones, Instagram / YouTube / Twitter / Telegram / WhatsApp handles and websites.",
                        "default": true
                    },
                    "computeAnalytics": {
                        "title": "Compute engagement analytics",
                        "type": "boolean",
                        "description": "Avg/median views, engagement rate, posting frequency, top hashtags/sounds, sponsored-post detection.",
                        "default": true
                    },
                    "detectSponsored": {
                        "title": "Detect sponsored posts",
                        "type": "boolean",
                        "description": "Flag videos with #ad, #sponsored, #partner, #paidpartnership and similar markers.",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Parallel profiles fetched at once.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential US proxy strongly recommended. TikTok serves fewer block pages to US IPs.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
