# Douyin 抖音 Profile Scraper - 博主 Followers, Posts & Hashtags (`data_wiki/douyin-profile-scraper-followers-posts-hashtags`) Actor

Scrape public Douyin (抖音) creator profiles without login or cookies. Get followers, bio, verification, posts, hashtags, music and engagement from profile links, share links or IDs. Bulk 25 creators, date filters, clean JSON for analytics, influencer research and AI.

- **URL**: https://apify.com/data_wiki/douyin-profile-scraper-followers-posts-hashtags.md
- **Developed by:** [Data WiKi](https://apify.com/data_wiki) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 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/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

### 🚀 What is Douyin Profile Scraper?

**Douyin Profile Scraper** is a Douyin profile scraper that reads public Douyin (抖音) creator pages and returns followers, bio, verification, posts, hashtags, music and engagement as clean, structured data. Just **paste creator profile links, app share links or user IDs** and get one row per post, or one row per creator, in JSON, CSV or Excel, without copying anything by hand and without a Douyin account.

- 🎯 **Creator research in minutes:** paste one 抖音博主 (Douyin blogger) or a list of up to 25 creators and read each page as a Douyin creator scraper would.
- 📈 **Followers, posts and hashtags together:** one run returns a creator's numbers, posts and tags, so you do not need a separate tool for each.
- 🧰 **Runs on Apify:** an Apify Douyin scraper you start from the Store, call by API or schedule, with no setup on your side.
- 🔍 **Public data only, no login:** it reads what any visitor can see, so there are no cookies or accounts to manage.

> 💡 Need to find creators first? Try the [keyword video search Actor](https://apify.com/data_wiki/douyin-search-scraper) to look up videos by keyword or hashtag, then paste the creator links here.

### ✨ What can this Douyin Profile Scraper do?

- 🔗 **Accept many input formats:** profile links, short share links (or the whole share text copied from the app), share-page links, secUid values and numeric user IDs, mixed in one run.
- 👥 **Run in bulk:** up to 25 creators per run, which makes it a practical Douyin profile data extractor for lists. As a Douyin user scraper it accepts any mix of link and ID formats.
- 👥 **Collect followers:** works as a Douyin followers scraper that returns follower and following counts for every creator.
- 📝 **Collect posts:** a Douyin posts scraper and Douyin profile posts scraper that returns each creator's posts with captions and statistics.
- \#️⃣ **Collect hashtags:** a Douyin hashtag scraper that lists the hashtags and mentions of each post, much like a Douyin hashtag extractor.
- 🗂️ **Work in two modes:** one row per post with the creator inside, or one profile row per creator when you set posts per profile to 0. In that mode it also acts as a Douyin bio scraper and Douyin follower count checker.
- 📅 **Filter posts:** keep only the last N days, or posts since a date, and skip pinned posts.
- 📚 **Add posts from collections:** optionally read the creator's public collections (合集) when Douyin shows only part of the posts.
- ⚡ **Show live results:** rows appear in the Output tab while the run is still going, split into separate tables.
- 🔁 **Retry automatically:** failed or blocked requests are retried, and the Actor switches to a proxy when a connection is refused. You can also set your own proxy.
- 📥 **Export** the data in **JSON, CSV, Excel, XML or HTML**.
- 🔌 **Use the API**, schedules, webhooks and **integrations with other apps** on the Apify platform.

### 📊 What data can this Douyin Profile Scraper extract?

| | | |
|---|---|---|
| 👤 Name and Douyin username | 🆔 Creator ID and secUid | ✅ Verification fields |
| 📝 Bio (signature) | 📊 Followers and following | ❤️ Total likes received |
| 🎬 Post count | 📍 IP location | 🖼️ Avatar links |
| 📝 Post text and title | 📅 Post date | 🔗 Post link |
| 📌 Pinned and ad flags | 💬 Comment count | 🔁 Share and save counts |
| 📊 Likes and play counts | #️⃣ Hashtags and mentions | 🎵 Music (sound) details |
| 🎬 Video cover, size and format | 🖼️ Photo post slides | ✅ Permissions (duet, stitch, download) |

> ⚠️ **Note:** Fields are filled only when Douyin provides them. `location` is filled only when the post has a tagged place, `playCount` is not always returned, and `videoPlayCount` and `videoShareCount` in the creator fields are reserved and currently always `null`. Media links expire, so use the post `url` as the permanent link.

#### Data Douyin Profile Scraper can't extract

- 🚫 **Video files and transcripts:** it returns post data and media links, not downloaded files, so it is not a Douyin video downloader or a Douyin profile downloader for files. For videos found by keyword or hashtag, use this [search results scraper](https://apify.com/data_wiki/douyin-search-scraper).
- 🚫 **Comment text:** it returns comment counts, not the comments themselves, so it is not a Douyin comment scraper or a Douyin transcripts scraper.
- 🚫 **Audience data:** gender, age and IP location describe the creator, not the audience, so audience demographics (Douyin user demographics) are not returned.
- 🚫 **Private content:** nothing behind a login is read.

### 💰 How much does it cost to scrape Douyin profiles?

Douyin Profile Scraper uses **pay-per-event pricing**: you pay for the results it saves, with no subscription to the Actor. Each saved result (one post, or one creator when posts per profile is 0) is one result event. A profile that cannot be read produces no row and is not charged. The price per result depends on your Apify plan tier.

#### Base pricing

- **Results** (`main_result`): charged for each result saved to the dataset.
- **Actor Start** (`apify-actor-start`): $0.00005 per GB of memory, charged once when a run starts. The Actor is configured with 4096 MB (4 GB), so this is 4 x $0.00005 = $0.0002 per run.

#### Pricing by plan tier

| Plan tier | Results (per 1,000) | Arithmetic |
|---|---|---|
| 🆓 Free | $4.00 | 1,000 x $0.004 |
| 🥉 Bronze | $3.60 | 1,000 x $0.0036 |
| 🥈 Silver | $3.20 | 1,000 x $0.0032 |
| 🥇 Gold and above | $2.80 | 1,000 x $0.0028 |

For example, 1,000 posts on the Gold tier cost 1,000 x $0.0028 = $2.80, plus $0.0002 for the start event, which is $2.8002 in total. Profile-only runs for 25 creators on the Free tier cost 25 x $0.004 = $0.10, plus $0.0002.

You can set a maximum spend per run in Apify. When that limit is reached, the run ends cleanly and keeps the results saved so far.

#### Why pay-per-event?

- 💡 **Transparent:** you pay for what you use.
- 📈 **Predictable:** you can estimate the cost before you start.
- ⏸️ **No idle charges:** waiting time is not billed.

### 🛠️ How do I use Douyin Profile Scraper to scrape Douyin profiles?

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **Douyin Profile Scraper** in the Apify Store.
3. Paste one or more creator links, share links or IDs into **Creator profile links or IDs**.
4. Set **Posts per profile**, or 0 for profile data only, and add a date filter if you want recent posts.
5. Click **Start** and wait for the run to finish.
6. Open the **Output** tab and download the data as JSON, CSV or Excel, or fetch it by API.

### ⬇️ Input

The only required field is `urls`, a list of up to 25 creator links or IDs (one per line, mixed formats are fine, extra entries beyond 25 are ignored with a warning in the log). Everything else is optional and has a default.

Here is a simple example input (the last 30 days of posts, up to 10 per creator):

```json
{
    "urls": [
        "https://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS"
    ],
    "maxPostsPerProfile": 10,
    "recentDays": 30,
    "excludePinnedPosts": false,
    "includeCollections": true,
    "maxRetries": 3
}
```

Open the **Input** tab for a full explanation of every field.

#### Creator profile links or IDs (`urls`)

Accepted: profile links (`www.douyin.com/user/...`), short share links or the whole share text copied from the app, share-page links, bare secUid values (starting with `MS4wLj`) and bare numeric user IDs. A good entry opens a creator page in a normal browser tab. An entry that is not a valid profile link, ID or share link is skipped and the log says so.

#### Posts per profile (`maxPostsPerProfile`)

The most posts to collect from each creator, from 0 to 10000 (default 10). Set **0** to get only the creator's profile data, one row per creator. Douyin may show visitors only part of a creator's posts, so a creator can return fewer rows than you asked for.

#### Date filters (`recentDays`, `oldestPostDate`)

Use `recentDays` (1 to 3650) to keep only recent posts, or `oldestPostDate` (YYYY-MM-DD, China time) to keep posts on or after a date. If both are set, `recentDays` wins. Write the date as `2026-01-31`.

#### Collections and pinned posts (`includeCollections`, `excludePinnedPosts`)

`includeCollections` (default on) adds posts from the creator's public collections when Douyin shows only the newest posts. Posts already found are not repeated. `excludePinnedPosts` (default off) leaves out the posts a creator pinned to the top.

#### Retries and proxy (`maxRetries`, `proxyConfiguration`)

`maxRetries` (1 to 10, default 3) sets how often a failed or blocked request is retried. By default no proxy is set and the Actor switches to another connection automatically if a request is blocked. Pick your own proxy only if you need a specific one.

### ⬆️ Output

Results appear in the **Output** tab while the run is going. The tables are Overview, Content and flags, Creator, Engagement, Video details, Photo posts, Music, Hashtags and mentions, Permissions, and Profile-only rows. A `SUMMARY` file in the key-value store holds the counts of the run. Export the dataset as **JSON, CSV, Excel, XML or HTML**, and pick or leave out fields before exporting. In post mode a row is one post with the creator under `authorMeta`. Within one input, the same post is saved only once.

#### Example output (illustrative)

The values below are made up to show the structure. They are not from a real run.

```json
{
    "id": "7000000000000000001",
    "type": "video",
    "text": "Example caption #example #demo",
    "createDate": "2026-10-09",
    "url": "https://www.douyin.com/video/7000000000000000001",
    "isPinned": false,
    "isAd": false,
    "authorMeta": {
        "name": "Example creator",
        "verified": false,
        "followersCount": 12345,
        "followersCountStr": "1.2万",
        "awemeCount": 80
    },
    "musicMeta": {
        "name": "Example sound",
        "isOriginal": true
    },
    "statistics": {
        "diggCount": 100,
        "commentCount": 5,
        "shareCount": 3,
        "collectCount": 20,
        "playCount": 2500
    },
    "hashtags": [
        { "id": "1000000000000001", "name": "example" },
        { "id": "1000000000000002", "name": "demo" }
    ],
    "inputUrl": "https://www.douyin.com/user/MS4wLj..."
}
```

#### Output fields explained

| Field | Meaning |
|---|---|
| 📝 `id`, `type`, `text`, `title`, `createDate`, `url` | The post itself. `type` is video, photo post or story, and `createDate` uses China time. |
| 👤 `authorMeta` | The creator behind the post: name, username, verification, bio (`signature`), followers, following, total likes and post count. |
| 📊 `statistics` | `diggCount` (likes), `commentCount`, `shareCount`, `collectCount` (saves), `playCount`, `forwardCount` and `downloadCount`, as Douyin returns them. |
| 🎵 `musicMeta` | The sound used in the post. |
| 🎬 `videoMeta`, `images` | Cover, size, format and media links, plus slides of photo posts. |
| #️⃣ `hashtags`, `mentions`, `videoTags` | Hashtags with their IDs, mentions and topic tags. |
| ✅ `permissions` | Whether duet, stitch, download, share and comment are allowed. |
| 🔗 `inputUrl` | The link or ID you entered that led to this row. |

### 🎯 Use cases

- 🎯 **Douyin influencer research:** compare followers, likes and posting rhythm of a Douyin influencer or Douyin KOL shortlist before a campaign.
- 📈 **Douyin influencer marketing:** build a creator list with verification, bio and follower numbers, and ground your Douyin marketing strategy in real figures.
- 📊 **Douyin analytics:** schedule runs and track follower and engagement numbers over time to build your own Douyin analytics tool and a Douyin engagement rate per post.
- \#️⃣ **Hashtag and sound tracking:** collect the hashtags and sounds creators use to spot popular Douyin hashtags in your niche. The Actor reads creator posts only; it does not return platform-wide rankings, so Douyin trending and Douyin trending songs lists are out of scope.
- 👀 **Douyin competitor monitoring:** run it on a schedule with `recentDays` to see what rival accounts post and how their numbers change.
- 🧪 **Research and datasets:** export posts with captions and statistics to build a dataset, or export Douyin data to CSV for a spreadsheet.
- 🤖 **Douyin data for AI:** feed the structured JSON into your own scripts or models.

### 🔗 What are other tools for Douyin and social media data?

- [Douyin search scraper](https://apify.com/data_wiki/douyin-search-scraper): finds Douyin videos by keyword, hashtag or link, so you can discover creators first and then read their profiles here.
- [Instagram hashtag scraper](https://apify.com/data_wiki/instagram-hashtag-scraper): collects public Instagram reels by hashtag or keyword to compare creator trends across platforms.
- [Facebook group scraper](https://apify.com/data_wiki/facebook-group-scraper): reads public Facebook groups for community research.
- [Facebook comment scraper](https://apify.com/data_wiki/facebook-comment-scraper): collects comments and replies from public Facebook posts.
- The data comes from [Douyin](https://www.douyin.com). To learn how Actors run, see the [Apify documentation](https://docs.apify.com/platform/actors).

### ❓ Frequently asked questions

#### How does Douyin Profile Scraper work?

You give it creator links or IDs. It looks up each public profile, collects the posts that match your settings and saves each result to the dataset as soon as it is ready. You then export the data or read it through the API.

#### Can I use a Douyin profile scraper without a login?

Yes. Douyin Profile Scraper needs no Douyin account or cookies. It reads public profile and post data that any visitor can see. Private accounts and login-only content are not supported.

#### Can I scrape many Douyin creators at once?

Yes, up to 25 creators per run, in any mix of link and ID formats. Two creators are processed at a time. If you pass more than 25, the first 25 are used and the log says so.

#### What are the limits of Douyin Profile Scraper?

Up to 25 creators per run and 0 to 10000 posts per creator. Douyin may show visitors only part of a creator's posts. The Actor is configured with 4096 MB of memory. If a spend limit is reached, the run ends cleanly and keeps the saved results.

#### Why am I getting fewer results than expected?

Douyin may show visitors only part of a creator's posts, so a creator can return fewer rows than `maxPostsPerProfile`. Keep **Add posts from collections** on, loosen date filters, and check the log, which shows how many posts were saved against the post count on the profile.

#### Why was a profile not read?

The link may be wrong, or the profile may be deleted, banned or private. The log names the input that failed. Check that the profile opens in a normal browser tab and try again. Unread profiles are not charged.

#### Is this a Douyin API alternative?

It gives you structured data like a Douyin scraper API would, but you run it as an Apify Actor and receive JSON through the Apify dataset or API. It is not an official Douyin API.

#### How do I find a Douyin user ID or username?

Paste the creator's profile link or the app share text into `urls`. Each row returns `secUid`, `username` and the numeric `id`, so it works as a Douyin account finder and a Douyin profile viewer in table form when you start from a share link.

#### How is Douyin different from TikTok, and does this work for other platforms?

Douyin is the version of TikTok used in mainland China, so Douyin vs TikTok matters here. This Actor works only on Douyin. It is not a TikTok profile scraper, a Xiaohongshu scraper, a Weibo scraper or a Bilibili scraper. If you searched for a Chinese TikTok scraper or TikTok China scraper and mean Douyin, this fits, for example for 抖音数据采集 (Douyin data collection). It does not replace the Douyin Creator Center, because it does not log in.

#### Can I integrate Douyin Profile Scraper with other apps?

Yes. Through the Apify platform you can connect it with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets and more, or use webhooks to react when a run finishes. Schedules let you collect new posts daily or weekly.

#### Can I use Douyin Profile Scraper as its own API?

Yes, with the Apify API and the `apify-client` packages for Node.js and Python. Open the Actor's API tab at `https://apify.com/data_wiki/douyin-profile-scraper-followers-posts-hashtags/api` for ready-to-copy code, or see the [Apify API documentation](https://docs.apify.com/api/v2).

#### 🤖 Can I use Douyin Profile Scraper through MCP?

Yes. The hosted Apify MCP server (`https://mcp.apify.com`) lets AI agents find an Actor with `search-actors`, check it with `fetch-actor-details` and run it with `call-actor`. See the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

#### Is it legal to scrape Douyin data?

The Actor reads only public data that any visitor can see, but the rules depend on your country and how you use the data. You are responsible for following Douyin's terms and privacy laws such as GDPR and CCPA, and for keeping run sizes reasonable. This is not legal advice.

#### 💬 Your feedback and custom solutions

Found a bug or need another field? Open an issue on the Actor's **Issues** tab. Need a custom solution? Contact hello.datawiki@gmail.com.

# Actor input Schema

## `urls` (type: `array`):

One entry per line, up to 25. Accepted: www.douyin.com/user/<secUid> links, v.douyin.com share links (or the whole share text copied from the app), www.iesdouyin.com/share/user links, bare secUid values (MS4wLj...) and bare numeric user IDs. Mixed formats are fine.

## `maxPostsPerProfile` (type: `integer`):

Most posts to collect from each creator (0 to 10000). Set 0 to get only the creator's profile data, one row per creator. Douyin may show visitors only part of a creator's posts.

## `recentDays` (type: `integer`):

Keep only posts published in the last N days (1 to 3650). Leave empty for no limit. If you also set an oldest post date, this one wins.

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

Keep only posts published on or after this date (YYYY-MM-DD, China time). Leave empty for no limit.

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

Leave out the posts a creator pinned to the top of their profile.

## `includeCollections` (type: `boolean`):

When Douyin shows only the newest posts, also read the creator's public collections (合集) to find more posts. Posts already found are not repeated.

## `maxRetries` (type: `integer`):

How often a failed or blocked request is retried before giving up (1 to 10). Also the number of tries with a new connection when requests keep failing.

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

Choose how requests are routed. If a request is blocked, the Actor switches to another connection automatically.

## Actor input object example

```json
{
  "urls": [
    "https://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS"
  ],
  "maxPostsPerProfile": 10,
  "excludePinnedPosts": false,
  "includeCollections": true,
  "maxRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One line per post: cover, text, creator and headline numbers.

## `content` (type: `string`):

Text, timing, place and yes/no flags.

## `author` (type: `string`):

Name, handles, verification, followers, totals and avatar of the creator.

## `engagement` (type: `string`):

Likes, comments, shares, saves and plays.

## `video` (type: `string`):

Cover, size, format and media links.

## `images` (type: `string`):

Slides of photo posts.

## `music` (type: `string`):

The sound used in each post.

## `tags` (type: `string`):

Hashtags, topic tags, mentions, chapters, collection and place.

## `access` (type: `string`):

What viewers may do with each post.

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

One row per creator when posts per profile is 0.

## `summaryFile` (type: `string`):

SUMMARY file with the counts of this run.

# 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 = {
    "urls": [
        "https://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_wiki/douyin-profile-scraper-followers-posts-hashtags").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 = {
    "urls": ["https://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_wiki/douyin-profile-scraper-followers-posts-hashtags").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 '{
  "urls": [
    "https://www.douyin.com/user/MS4wLjABAAAAk1tZ-L085zZf2yW_H5dnVFZWyk8Rt8v4RAvf9KhTyPoVdMDxTs7Q_rvgTJGWXezS"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_wiki/douyin-profile-scraper-followers-posts-hashtags --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_wiki/douyin-profile-scraper-followers-posts-hashtags"
        }
    }
}
```

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/Qy0MzKLSGlomhpcjq/builds/tBo6czzuXMYiPVGfk/openapi.json
