# TikTok Profile Scraper (`codenest/tiktok-profile-scraper`) Actor

Input profile URLs and enable the video extraction and output profile details and video details.

- **URL**: https://apify.com/codenest/tiktok-profile-scraper.md
- **Developed by:** [CodeNest](https://apify.com/codenest) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 profiles

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Scraper - Ultimate Profile & Video Data Extractor

**Effortlessly scrape TikTok profiles and videos with our powerful **TikTok Profile Scraper**! This Apify actor enables bulk extraction of profile metadata, follower statistics, video engagement metrics, and direct download URLs.**

***

### 📋 Overview

Need to analyze TikTok creators, track engagement metrics, or build influencer databases? This **TikTok Profile Scraper** delivers:

- 👤 **Complete Profile Data** - Username, nickname, signature, and avatar
- 📊 **Follower Statistics** - Followers, following, hearts, and video counts
- 🎬 **Video Extraction** - Latest videos with direct download URLs
- 📈 **Engagement Metrics** - Likes, comments, shares, saves, and play counts
- 🎵 **Music Data** - Track information and audio URLs
- 🌐 **Proxy Support** - Built-in Apify residential proxy integration

Perfect for influencer marketers 📈, content analysts 📊, social media managers 🎭, and researchers 🔬!

***

### ⭐ Core Capabilities of TikTok Profile Scraper

#### 👤 Profile Data Extraction

- **Complete Profile Info** - Username, nickname, and signature/bio
- **Follower Statistics** - Follower count, following count, and heart count
- **Video Statistics** - Total video count and digg count
- **Verification Status** - Detect verified accounts
- **Account Details** - Private account status and business flags
- **Account Age** - Creation timestamp and date

#### 🎬 Video Data Mastery

- **Latest Videos** - Scrape up to 50 videos per profile
- **Direct Download URLs** - Ready-to-use video download links
- **Engagement Metrics** - Likes, comments, shares, saves, and plays
- **Video Duration** - Length in seconds
- **Hashtag Detection** - Extracted hashtags from titles
- **Mention Detection** - Extracted @mentions from titles

#### 🎵 Music & Audio Data

- **Music Track Info** - Song title and author
- **Audio Play URLs** - Direct music stream URLs
- **Track Duration** - Music length in seconds
- **Music ID** - Unique track identifier

#### 🖼️ Media Assets

- **Profile Avatars** - Full-size and thumbnail versions
- **Video Thumbnails** - High-quality cover images
- **Direct Video URLs** - Multiple download sources

#### 🌐 Technical Features

- **Multi-Profile Support** - Scrape multiple profiles in one run
- **Residential Proxy** - Built-in Apify proxy rotation
- **Configurable Limits** - Control videos per profile
- **Video Scraping Toggle** - Enable/disable video extraction

***

### ⚙️ Input Configuration

Simply enter TikTok profile URLs, configure limits, and click "Start". Input looks like this:

```json
{
  "max_videos_per_profile": 50,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "scrape_profile_videos": true,
  "video_urls": [
    {
      "url": "https://www.tiktok.com/@hussnain_edits25",
      "method": "GET"
    },
    {
      "url": "https://www.tiktok.com/@roman.khan146"
    }
  ]
}
```

#### 📝 Input Specifications

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `video_urls` | Array | ✅ Yes | - | TikTok profile URLs to scrape |
| `url` | String | ✅ Yes | - | TikTok profile URL |
| `method` | String | ❌ No | "GET" | HTTP method |
| `max_videos_per_profile` | Integer | ❌ No | 50 | Maximum videos per profile |
| `scrape_profile_videos` | Boolean | ❌ No | true | Enable video extraction |
| `proxy.useApifyProxy` | Boolean | ❌ No | true | Enable Apify proxy |
| `proxy.apifyProxyGroups` | Array | ❌ No | \["RESIDENTIAL"] | Proxy groups |

***

### 📤 Output Structure

Your **TikTok Profile Scraper** produces two types of output - profile data and video data:

#### 👤 Profile Output

```json
{
  "type": "profile",
  "source_url": "https://www.tiktok.com/@hussnain_edits25",
  "id": "7649617579044504590",
  "username": "hussnain_edits25",
  "nickname": "hussnain_edits25",
  "signature": "ᵈʳᵃᵐᵃ ᵉᵈⁱᵗⁱⁿᵍ🔥...",
  "bio_link": "https://chat.whatsapp.com/...",
  "avatar": "https://p16-common-sign.tiktokcdn-eu.com/...",
  "avatar_thumb": "https://p16-common-sign.tiktokcdn-eu.com/...",
  "verified": false,
  "sec_uid": "MS4wLjABAAAAGydujNkX6NOyi7pva_Pa61tKsmTSHrTSjLjUpHA6rLBX2OCaFnreL9MLAgm9aJT1",
  "private_account": false,
  "follower_count": 77799,
  "following_count": 3,
  "heart_count": 1251061,
  "video_count": 206,
  "digg_count": 0,
  "friend_count": 0,
  "language": "en",
  "create_time": 1781065403,
  "created_at": "2026-06-10 04:23:23",
  "is_organization": false,
  "commerce_user": false,
  "tt_seller": false
}
```

#### 🎬 Video Output

```json
{
  "type": "video",
  "id": "7691923794100768030",
  "source_url": "https://www.tiktok.com/@hussnain_edits25/video/7691923794100768030",
  "download_url": "https://www.tikwm.com/video/media/play/7691923794100768030.mp4",
  "direct_url": "https://www.tikwm.com/video/media/play/7691923794100768030.mp4",
  "video_url": "https://www.tikwm.com/video/media/play/7691923794100768030.mp4",
  "title": "BEST DRAMA INDIAN ❤️🎧#growmyaccount✅ #foryoupage #bestscene #1millionviews",
  "duration": 120,
  "uploader": "hussnain_edits25",
  "like_count": 183,
  "comment_count": 7,
  "save_count": 27,
  "share_count": 6,
  "play_count": 2226,
  "thumbnail": "https://p16-common-sign.tiktokcdn-eu.com/...",
  "hashtags": ["growmyaccount✅", "foryoupage", "bestscene", "1millionviews"],
  "mentions": [],
  "author": {
    "id": "7649617579044504590",
    "username": "hussnain_edits25",
    "nickname": "hussnain_edits25",
    "avatar": "https://p16-common-sign.tiktokcdn-eu.com/...",
    "verified": false
  },
  "music": {
    "id": "7365114908622670597",
    "title": "original sound",
    "author": "H S ONLINE STORE 🛍️📲",
    "play_url": "https://v16-webapp-prime.tiktok.com/...",
    "duration": 186
  }
}
```

#### 📖 Output Field Documentation

**🔹 Profile Identification**
| Field | Description |
|-------|-------------|
| `type` | Output type ("profile") |
| `source_url` | Original profile URL |
| `id` | TikTok user ID |
| `username` | TikTok handle |
| `nickname` | Display name |
| `sec_uid` | Secure user identifier |

**🔹 Profile Details**
| Field | Description |
|-------|-------------|
| `signature` | Profile bio/description |
| `bio_link` | External link from bio |
| `avatar` | Full-size profile picture |
| `avatar_thumb` | Thumbnail profile picture |
| `verified` | Verification badge status |
| `private_account` | Private account flag |
| `language` | Account language |

**🔹 Profile Statistics**
| Field | Description |
|-------|-------------|
| `follower_count` | Total followers |
| `following_count` | Total following |
| `heart_count` | Total likes received |
| `video_count` | Total videos posted |
| `digg_count` | Total likes given |
| `friend_count` | Friend count |

**🔹 Account Metadata**
| Field | Description |
|-------|-------------|
| `create_time` | Account creation timestamp (Unix) |
| `created_at` | Account creation date (formatted) |
| `is_organization` | Organization account flag |
| `commerce_user` | Commerce account flag |
| `tt_seller` | TikTok seller flag |

**🔹 Video Data**
| Field | Description |
|-------|-------------|
| `type` | Output type ("video") |
| `id` | Video ID |
| `source_url` | Direct video page URL |
| `download_url` | Direct download URL |
| `direct_url` | Alternative download URL |
| `video_url` | Video stream URL |
| `title` | Video caption/title |
| `duration` | Video length in seconds |
| `uploader` | Uploader username |

**🔹 Video Engagement**
| Field | Description |
|-------|-------------|
| `like_count` | Like count |
| `comment_count` | Comment count |
| `save_count` | Save/bookmark count |
| `share_count` | Share count |
| `play_count` | View/play count |
| `thumbnail` | Video cover image URL |

**🔹 Content Analysis**
| Field | Description |
|-------|-------------|
| `hashtags` | Extracted hashtags |
| `mentions` | Extracted @mentions |
| `author` | Author object with profile data |
| `music` | Music/audio track details |
| `music.id` | Music track ID |
| `music.title` | Song title |
| `music.author` | Music author |
| `music.play_url` | Audio stream URL |
| `music.duration` | Music duration (seconds) |

***

### 🎨 Key Features of This TikTok Profile Scraper

#### 📊 Engagement Analytics

- **Follower Metrics** - Track audience size
- **Video Engagement** - Likes, comments, shares, saves
- **Play Counts** - Video view metrics
- **Cross-Profile Comparison** - Compare multiple creators

#### 🎬 Video Intelligence

- **Direct Download URLs** - Ready-to-use video links
- **Multiple URL Sources** - Redundant download options
- **Video Thumbnails** - High-quality previews
- **Duration Detection** - Precise video length

#### 🎵 Music & Audio Data

- **Track Identification** - Song title and author
- **Audio Stream URLs** - Direct music links
- **Track Duration** - Music length in seconds
- **Music ID** - Unique track identifier

#### 🚀 Performance Features

- **Multi-Profile Batch** - Scrape multiple profiles
- **Configurable Limits** - Control videos per profile
- **Residential Proxy** - Enhanced reliability
- **Video Toggle** - Enable/disable video extraction

***

### 💡 Use Cases for TikTok Profile Scraper

- **📈 Influencer Marketing** - Discover and analyze TikTok creators
- **📊 Competitor Analysis** - Track competitor profiles and content
- **🎬 Content Strategy** - Analyze top-performing videos
- **💰 Brand Partnerships** - Identify potential collaborators
- **🔬 Research** - Study TikTok trends and patterns
- **📱 Social Media Management** - Monitor client profiles
- **🎯 Audience Research** - Understand target demographics
- **📋 Database Building** - Create creator databases

***

### ✨ Why Choose Our TikTok Profile Scraper?

- **⚡ Fast & Efficient** - Quick profile and video extraction
- **🎯 100% Accurate** - Preserves all data without alteration
- **📦 Complete Data** - Everything from bio to video engagement
- **🔄 Regular Updates** - Adapts to TikTok changes
- **🛡️ Production Ready** - Reliable with thousands of profiles
- **💰 Cost Efficient** - Optimized for minimal compute time
- **🔒 Privacy Focused** - No personal data stored or shared

***

### ⚠️ Limitations

- Only works with public TikTok profiles
- Private accounts are not accessible
- Video download URLs may expire after time
- Rate limits may apply for high-volume scraping
- Some regional content may be geo-restricted

***

### 📧 Need Custom Features for Your TikTok Profile Scraper?

Want **additional profile fields**, **specific video filters**, **custom output formats**, **advanced analytics**, or **automated reporting**?

✉️ Email **<codenest2.0@gmail.com>** for tailored enterprise solutions!

***

# Actor input Schema

## `video_urls` (type: `array`):

List of TikTok profile URLs (e.g. https://www.tiktok.com/@hussnain_edits25) or video URLs (e.g. https://www.tiktok.com/@scout2015/video/6718335390845095173).

## `scrape_profile_videos` (type: `boolean`):

Turn ON to scrape videos from the given TikTok profiles (up to Max Videos per Profile). Turn OFF to scrape only complete profile metadata and statistics without videos.

## `max_videos_per_profile` (type: `integer`):

Maximum number of videos to scrape from each TikTok profile (e.g. 50, 100). Default is 100.

## `proxy` (type: `object`):

Apify Proxy configuration. US Residential proxies are used by default to bypass blocks and IP restrictions.

## Actor input object example

```json
{
  "video_urls": [
    {
      "url": "https://www.tiktok.com/@hussnain_edits25"
    }
  ],
  "scrape_profile_videos": true,
  "max_videos_per_profile": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Tabular overview of scraped TikTok videos with stats, direct links, and thumbnails.

## `profilesView` (type: `string`):

Scraped TikTok user profiles with follower count, heart count, video count, bio, and avatar.

## `allResults` (type: `string`):

Complete dataset containing all profile and video metadata, stats, and media links.

## `outputRecord` (type: `string`):

Consolidated JSON array of all scraped TikTok results stored in the default Key-Value Store.

# 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 = {
    "video_urls": [
        {
            "url": "https://www.tiktok.com/@hussnain_edits25"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("codenest/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 = { "video_urls": [{ "url": "https://www.tiktok.com/@hussnain_edits25" }] }

# Run the Actor and wait for it to finish
run = client.actor("codenest/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 '{
  "video_urls": [
    {
      "url": "https://www.tiktok.com/@hussnain_edits25"
    }
  ]
}' |
apify call codenest/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

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