# Douyin Profile Scraper (`burbn/douyin-profile-scraper`) Actor

Scrape Douyin (Chinese TikTok) user profile details by URL or sec\_user\_id. Extract follower count, total likes, video count, bio, avatar, IP location, and verification status in bulk with zero setup.

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

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Douyin Profile Scraper – Chinese TikTok User Data Extractor

**Scrape Douyin (Chinese TikTok) user profile details by profile URL or sec\_user\_id. Extract nickname, bio, followers, following, total likes, video count, avatar, cover image, IP location, verification status, live status, and more. Supports bulk profile lookups. Built with Apify best practices for reliability and speed.**

***

### Table of Contents

- [Features](#features)
- [Use Cases](#use-cases)
- [Quick Start](#quick-start)
- [Input Parameters](#input-parameters)
- [Output Format](#output-format)
- [Performance & Limits](#performance--limits)
- [FAQ](#faq)
- [Troubleshooting](#troubleshooting)
- [Tags](#tags)

***

### Features

- **Profile Lookup by URL or ID** – Fetch detailed Douyin user profiles using profile URLs or sec\_user\_id values.
- **Bulk Lookup** – Scrape multiple Douyin profiles in a single run.
- **User Stats** – Extract follower count, following count, total likes received, likes given, and video count.
- **Profile Details** – Get nickname, username, bio/signature, avatar, cover image, and gender.
- **Location Data** – Extract IP location (e.g. `IP属地：河南`), city, province, country, and store region.
- **Verification Status** – Identify verified accounts, star accounts, and government media VIPs.
- **Live Status** – Check if the user is currently live streaming.
- **Musician Data** – Extract original musician info (digg count, music count, music used count).
- **Commerce Info** – Detect commerce-enabled accounts with shop entries.

***

### Use Cases

| Use Case | Description | Key Benefits |
|----------|-------------|--------------|
| Influencer Research | Analyze Douyin influencer profiles for marketing campaigns. | Get follower counts, engagement metrics, and verification status. |
| Competitor Analysis | Monitor competitor Douyin accounts and their growth. | Track followers, video count, and likes over time. |
| KOL Discovery | Find Key Opinion Leaders on Douyin for brand partnerships. | Identify verified accounts with high engagement. |
| Market Research | Analyze user profiles in specific regions or niches. | IP location and cross-platform data for market insights. |
| Social Media Analytics | Build dashboards with Douyin profile data. | Comprehensive stats exported as JSON, CSV, or Excel. |
| Brand Monitoring | Track brand-related Douyin accounts and their metrics. | Bulk lookup with detailed profile data. |

***

### Quick Start

#### 1. Basic – Single Profile by sec\_user\_id

```json
{
  "profiles": ["MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw"]
}
```

#### 2. Basic – Single Profile by URL

```json
{
  "profiles": ["https://www.douyin.com/user/MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw"]
}
```

#### 3. Bulk – Multiple Profiles

```json
{
  "profiles": [
    "MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw",
    "https://www.douyin.com/user/MS4wLjABAAAAanotherUserIdHere",
    "MS4wLjABAAAAyetAnotherUserId"
  ]
}
```

***

### Input Parameters

| Parameter | Type | Required | Description | Default | Example |
|-----------|------|----------|-------------|---------|---------|
| `profiles` | Array of Strings | Yes | One or more Douyin profile URLs or sec\_user\_id values. | - | `["MS4wLjABAAAA..."]` or `["https://www.douyin.com/user/MS4wLjABAAAA..."]` |

#### Supported Input Formats

| Format | Example |
|--------|---------|
| sec\_user\_id (direct) | `MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw` |
| Douyin profile URL | `https://www.douyin.com/user/MS4wLjABAAAA...` |
| Douyin share URL | `https://www.iesdouyin.com/share/user/MS4wLjABAAAA...` |

***

### Output Format

#### Profile Result Data Structure

```json
{
  "source": "douyin_profile",
  "position": 1,

  "uid": "91565952866",
  "sec_uid": "MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw",
  "unique_id": "nnvdmdt",
  "short_id": "0",

  "nickname": "十六.",
  "signature": "平安喜樂 如願自在",
  "signature_language": "zh",
  "gender": 0,
  "birthday": "",
  "user_age": -1,

  "avatar_url": "https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/...",
  "cover_url": "https://p3-sign.douyinpic.com/obj/douyin-user-image-file/...",
  "profile_cover_url": "https://p3-sign.douyinpic.com/obj/douyin-user-image-file/...",

  "ip_location": "IP属地：河南",
  "city": "",
  "province": "",
  "district": "",
  "country": "",
  "location": "",
  "store_region": "cn-ha",

  "follower_count": 4797,
  "following_count": 49,
  "total_favorited": 29697,
  "favoriting_count": 17420,
  "aweme_count": 73,
  "dongtai_count": 0,
  "max_follower_count": 5594,
  "mplatform_followers_count": 4797,
  "forward_count": 19,
  "public_collects_count": 0,

  "verification_type": 0,
  "custom_verify": "",
  "enterprise_verify_reason": "",
  "is_verified": false,
  "is_star": false,
  "is_ban": false,
  "is_gov_media_vip": false,

  "live_status": 0,
  "room_id": 0,
  "live_commerce": false,
  "with_commerce_entry": false,
  "with_fusion_shop_entry": false,

  "original_musician": {
    "digg_count": 0,
    "music_count": 0,
    "music_used_count": 0
  },

  "cross_platform_followers": [
    { "app_name": "aweme", "name": "抖音", "fans_count": 4797, "icon": "https://..." },
    { "app_name": "news_article", "name": "头条", "fans_count": 0, "icon": "https://..." },
    { "app_name": "live_stream", "name": "抖音火山版", "fans_count": 0, "icon": "https://..." }
  ],

  "share_url": "www.iesdouyin.com/share/user/MS4wLjABAAAA...",

  "scraped_at": "2026-08-05T12:00:00.000Z"
}
```

#### Output Fields Explained

| Field | Type | Description |
|-------|------|-------------|
| `source` | String | Source indicator, always `douyin_profile` |
| `position` | Integer | Position in the scraper batch (1-based) |
| `uid` | String | Douyin internal user ID |
| `sec_uid` | String | Secure user ID (used as input identifier) |
| `unique_id` | String | Username / handle |
| `short_id` | String | Short user ID |
| `nickname` | String | Display name |
| `signature` | String | Bio / description |
| `signature_language` | String | Language code of the bio |
| `gender` | Number | 0 = unknown, 1 = male, 2 = female |
| `birthday` | String | Birthday (if available) |
| `user_age` | Number | User age (-1 if not set) |
| `avatar_url` | String | Profile picture URL (highest quality) |
| `cover_url` | String | Profile cover image URL |
| `profile_cover_url` | String | Profile cover from cover\_and\_head\_image\_info |
| `ip_location` | String | IP-based location (e.g., "IP属地：河南") |
| `city` | String | City |
| `province` | String | Province |
| `district` | String | District |
| `country` | String | Country |
| `location` | String | Location string (app endpoint) |
| `store_region` | String | Store region code (e.g., "cn-ha") |
| `follower_count` | Number | Number of followers |
| `following_count` | Number | Number of accounts followed |
| `total_favorited` | Number | Total likes received on all videos |
| `favoriting_count` | Number | Total likes the user has given |
| `aweme_count` | Number | Number of published videos |
| `dongtai_count` | Number | Number of dynamic posts |
| `max_follower_count` | Number | Historical peak follower count |
| `mplatform_followers_count` | Number | Multi-platform follower count |
| `forward_count` | Number | Number of shares/forwards |
| `public_collects_count` | Number | Number of public collections |
| `verification_type` | Number | Account verification type (0 = none) |
| `custom_verify` | String | Custom verification label |
| `enterprise_verify_reason` | String | Enterprise verification reason |
| `is_verified` | Boolean | Whether the account is verified |
| `is_star` | Boolean | Celebrity/star account |
| `is_ban` | Boolean | Whether the account is banned |
| `is_gov_media_vip` | Boolean | Government media VIP account |
| `live_status` | Number | 0 = not live, 1+ = currently live |
| `room_id` | Number | Live room ID (if live) |
| `live_commerce` | Boolean | Live commerce enabled |
| `with_commerce_entry` | Boolean | Has commerce store entry |
| `with_fusion_shop_entry` | Boolean | Has fusion shop entry |
| `original_musician` | Object | Musician stats (digg\_count, music\_count, music\_used\_count) |
| `cross_platform_followers` | Array | Follower breakdown across Douyin, Toutiao, Huoshan |
| `share_url` | String | Profile share URL |
| `scraped_at` | String | ISO timestamp of when the data was extracted |

***

### Performance & Limits

- **Bulk Lookups** – Scrape hundreds of Douyin profiles in a single run.
- **Batching** – Data is saved in batches of 10 items to prevent loss during unexpected errors.
- **Rate Limiting** – Built-in 1.5-second delay between profile requests for optimal throughput.
- **Key Rotation** – Automatic key rotation and retry logic for smooth, uninterrupted performance.
- **Deduplication** – Duplicate profile inputs are automatically removed before processing.

***

### FAQ

- **Q: Where do I find sec\_user\_id?**
  - You can find the `sec_user_id` in any Douyin profile URL. It's the string after `/user/` in the URL (e.g., `https://www.douyin.com/user/MS4wLjABAAAA...`). You can also paste the full URL directly.
- **Q: Can I use profile URLs instead of sec\_user\_id?**
  - Yes! The actor automatically extracts `sec_user_id` from Douyin profile URLs (`douyin.com/user/...`) and share URLs (`iesdouyin.com/share/user/...`).
- **Q: Can I look up multiple profiles at once?**
  - Yes! Simply add multiple profile URLs or sec\_user\_ids to the `profiles` array. Each one will be queried individually with automatic rate limiting.
- **Q: What if a profile doesn't exist?**
  - Invalid profiles will return an error record with details. The scraper will continue processing remaining profiles.
- **Q: What does gender = 0 mean?**
  - Gender values: `0` = not set/unknown, `1` = male, `2` = female.
- **Q: What is ip\_location?**
  - The `ip_location` field shows the user's IP-based location as displayed on Douyin (e.g., "IP属地：河南" means "IP Location: Henan").
- **Q: What data formats can I export?**
  - Apify supports exporting results as JSON, CSV, Excel (XLSX), XML, HTML, and RSS.
- **Q: What is cross\_platform\_followers?**
  - This shows the user's follower count across ByteDance platforms: Douyin (抖音), Toutiao (头条), and Huoshan/Douyin Volcano (抖音火山版).

***

### Troubleshooting

| Issue | Cause | Solution |
|-------|-------|----------|
| "No profiles provided" | Empty or missing `profiles` array | Enter at least one profile URL or sec\_user\_id |
| Profile not found | Invalid or outdated sec\_user\_id | Verify the profile exists on Douyin |
| Both endpoints failed | Network issues or API downtime | Wait a few minutes and try again |
| Rate limit exceeded | Too many concurrent requests | Wait a few minutes and try again |
| Partial results | Some profiles failed while others succeeded | Check error records in the output for details |
| Missing cross\_platform\_followers | App endpoint didn't return this data | This is normal for some profiles |

***

### Why Choose This Actor?

- Comprehensive Douyin user profile data
- Follower, following, likes, and video counts
- IP location and regional data
- Verification and celebrity status
- Live streaming status detection
- Cross-platform follower breakdown (Douyin, Toutiao, Huoshan)
- Original musician info
- Commerce and shop detection
- Bulk profile lookup support
- Downloadable as CSV, Excel, JSON, XML, or HTML

***

### Tags

`douyin scraper`, `douyin profile data`, `chinese tiktok scraper`, `douyin user scraper`, `douyin follower count`, `douyin analytics`, `social media scraper`, `douyin api`, `tiktok china scraper`, `influencer research`, `kol discovery`, `douyin data extraction`, `apify actor`

***

### Get Started Now

1. Enter one or more **Douyin profile URLs** or **sec\_user\_id** values
2. Click **Start** to run the scraper
3. Export your data in JSON, CSV, or Excel format
4. Click ["Try for free"](https://apify.com?fpr=free-credits) to test the actor

***

*Built using Apify Platform | Optimized for Performance & Reliability*

# Actor input Schema

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

📋 Enter one or more Douyin profile URLs or sec\_user\_id values. Supported formats:

• Profile URL: `https://www.douyin.com/user/MS4wLjABAAAA...`
• sec\_user\_id: `MS4wLjABAAAA...`

Each profile will be queried individually.

## Actor input object example

```json
{
  "profiles": [
    "MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw"
  ]
}
```

# Actor output Schema

## `profiles_overview` (type: `string`):

Open the dataset view with an overview of all scraped Douyin profiles including nickname, followers, likes, videos, and location.

# 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": [
        "MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("burbn/douyin-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": ["MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw"] }

# Run the Actor and wait for it to finish
run = client.actor("burbn/douyin-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": [
    "MS4wLjABAAAAJWCE1eEOJA1Y5I9BbkObqqVz_M1EEAQumOVCMfy8ctw"
  ]
}' |
apify call burbn/douyin-profile-scraper --silent --output-dataset

```

## MCP server setup

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