# Douyin KOL Scraper - 星图 Influencer Rates & Audience (`vulnv/douyin-kol-scraper`) Actor

Scrape Douyin's 星图 (Xingtu) influencer marketplace: search creators by niche with follower and price filters, browse Xingtu leaderboards, find similar creators, and pull quoted ad rates, CPM/CPE, audience demographics and sponsored videos. Export to JSON/CSV/Excel. No login, cookies or proxy needed.

- **URL**: https://apify.com/vulnv/douyin-kol-scraper.md
- **Developed by:** [VulnV](https://apify.com/vulnv) (community)
- **Categories:** Social media, 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 creators

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/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

## Douyin KOL Scraper - 星图 Influencer Rates & Audience

**Scrape Douyin's 星图 (Xingtu) influencer marketplace and export creators, quoted ad rates, CPM/CPE, audience demographics and sponsored videos to JSON, CSV or Excel.** Search KOLs by niche with follower and price filters, browse the official Xingtu leaderboards, find creators similar to one you already work with, then pull a creator's full rate card, expected views, cost per 1,000 views, marketplace indices, fan portrait and sponsored-video history - all from one Actor. Each result is one clean, flat row.

Built for brands, agencies and analysts planning Douyin influencer campaigns. No login, no brand account, no cookies, no proxies and no China IP to configure - just pick an operation, add your input and press **Start**.

> **Unofficial notice:** This is an independent tool and is **not** affiliated with, endorsed by, or connected to Douyin, 抖音, 巨量星图 (Xingtu), ByteDance or Beijing Douyin Information Service Co., Ltd. "Douyin", "抖音", "星图" and "Xingtu" are trademarks of their respective owners, used here only to describe what the Actor scrapes.

### What is Douyin Xingtu (星图)?

Douyin (抖音) is China's version of TikTok, with over 750 million daily users. 巨量星图 (Xingtu, "Star Map") is Douyin's official influencer marketplace, where brands book sponsored videos from vetted creators at published prices. For every creator it shows quoted rates per video length, expected views, CPM and CPE estimates, follower demographics and performance indices. This scraper gives you that marketplace data programmatically, so you can shortlist and price KOLs (达人) at scale without a Xingtu brand account.

### Operations

Pick one **Operation** and fill in the matching field:

| Operation | Input field | What you get |
|-----------|-------------|--------------|
| **Search creators by keyword** | `keywords` | Creators matching each keyword, with quoted rates, expected views, CPM/CPE, 30-day performance, marketplace indices and their latest videos. Optional follower, price and gender filters. |
| **Leaderboards (星图热榜)** | leaderboard settings | Up to 100 creators from an official Xingtu leaderboard (top creators, fastest growth, brand preferred, sales and more), with rank and quoted rates. |
| **Similar creators** | `creators` | Creators the marketplace recommends as similar by overall fit, content, audience or commercial performance, with rates. |
| **Creator profile & ad rates** | `creators` | One full profile per creator: quoted rates, expected views, CPM, CPE, link / spread / seeding / conversion / cost-performance indices, location and category. |
| **Audience portrait** | `creators` | Follower (or fan club, loyal fan, viewer) demographics: gender, age, provinces, cities, city tiers, phone brands, interests, consumer segments and purchase habits. |
| **Creator's videos** | `creators` | A creator's videos with views, likes, comments, completion and interaction rate - all videos, organic only, or **sponsored (Xingtu) videos only**. |

`creators` accept a Douyin ID (抖音号, e.g. `m6640150`), a Douyin profile URL (`douyin.com/user/MS4w...`), a Xingtu creator URL, or a Xingtu creator ID (the `star_id` of any result row) - one per line. The creator must be listed on Xingtu.

### How to use it (step by step)

1. Choose an **Operation**.
2. Fill in the matching input:
   - Search creators -> add one or more **Search keywords** (a niche like 美妆, 健身, 数码, or a creator name), and optionally set follower, price and gender filters.
   - Leaderboards -> pick a **Leaderboard**, a **Leaderboard category** and a **period** (monthly or weekly).
   - Similar creators / Creator profile / Audience portrait / Creator's videos -> paste **Creators**.
3. Set **Maximum results per input** (default 100, or 0 for all available).
4. Press **Start**. Export the dataset as JSON, CSV, Excel, XML or via the API.

A typical workflow: search a niche or open a leaderboard, pick the most interesting `star_id`s, then run **Creator profile** and **Audience portrait** on them.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `operation` | string | **Required.** `search_creators`, `rankings`, `similar_creators`, `creator_profile`, `audience_portrait`, or `creator_videos`. |
| `keywords` | array | Search keywords (for `search_creators`). |
| `creators` | array | Douyin IDs, Douyin profile URLs, Xingtu URLs or Xingtu creator IDs (for the creator operations). |
| `maxItems` | integer | Max results per keyword / creator, and max leaderboard rows. `0` = all available. Default `100`. |
| `searchBy` | string | `nickname` or `content` - what the search keyword is matched against. |
| `followersMin`, `followersMax` | integer | Follower range filter (search only). |
| `priceTier`, `priceMin`, `priceMax` | string, integer | Quoted-rate range filter in CNY, for `1_20s`, `21_60s` or `60s_plus` videos (search only). |
| `creatorGender` | string | `any`, `female` or `male` (search only). |
| `rankingList` | string | `top_creators`, `rising_creators`, `brand_preferred`, `seeding`, `search_after_view`, `sales`, `ad_boost` or `high_potential`. |
| `rankingCategory` | string | Leaderboard category in Chinese, e.g. `不限` (all), `美食`, `游戏` for the content lists, or `美妆`, `3C及电器`, `食品饮料` for the brand lists. |
| `rankingPeriod` | string | `30` (monthly) or `7` (weekly). |
| `similarBy` | string | `comprehensive`, `content`, `audience` or `commercial`. |
| `audienceType` | string | `followers`, `fan_club`, `loyal_fans` or `viewers`. |
| `videoType` | string | `all`, `personal` (organic) or `sponsored`. |

### Output

Every row carries a `record_type` of `creator`, `creator_profile`, `audience_portrait` or `video`. Rates, CPM and CPE are in **CNY**. Common creator fields:

| Field | Description |
|-------|-------------|
| `star_id`, `douyin_user_id`, `nickname`, `xingtu_url` | Creator identity and marketplace page. |
| `followers`, `category`, `tags`, `gender`, `province`, `city` | Profile basics. |
| `price_1_20s`, `price_21_60s`, `price_60s_plus`, `rate_card` | Quoted rates per video length, plus every order type the creator offers. |
| `expected_views`, `cpm_21_60s`, `cpm_60s_plus`, `cpe_21_60s`, `cpe_60s_plus` | Expected views per sponsored video and cost per 1,000 views / per engagement. |
| `interaction_rate_30d`, `completion_rate_30d`, `median_views_30d`, `follower_growth_30d` | 30-day performance (search). |
| `star_index`, `link_star_index`, `link_spread_index`, `link_shopping_index`, `link_convert_index` | Xingtu marketplace indices (0-100). |
| `ecommerce_level`, `ecommerce_gmv_30d` | E-commerce capability (search). |
| `rank`, `previous_rank`, `ranking_name`, `ranking_date`, `avg_views` | Leaderboard position and list data (leaderboards). |

Profile (`creator_profile`) rows add `douyin_id`, `sec_uid`, `douyin_url`, `resident_province`, `resident_city`, `mcn_name`, `cost_performance_index`, `cooperation_index` and `link_star_index_top_pct`. Audience (`audience_portrait`) rows add `female_pct`, `male_pct`, `age_18_23_pct` ... `age_50_plus_pct`, `iphone_pct`, `top_province`, `top_city`, `top_city_tier`, `top_crowd_segment` and full `[{name, share}]` splits for ages, provinces, cities, city tiers, phone brands, interests, consumer segments and purchase habits. Video (`video`) rows add `video_id`, `video_url`, `title`, `create_time`, `duration_seconds`, `views`, `likes`, `comments`, `completion_rate` and `interaction_rate`.

Example creator row (search):

```json
{
  "record_type": "creator",
  "operation": "search_creators",
  "input": "美妆",
  "star_id": "6629664248723144708",
  "nickname": "…",
  "xingtu_url": "https://www.xingtu.cn/ad/creator/author-homepage/douyin-video/6629664248723144708",
  "followers": 1944486,
  "category": "时尚",
  "price_21_60s": 180000,
  "price_60s_plus": 180000,
  "expected_views": 18758,
  "cpm_21_60s": 9595.91,
  "cpe_21_60s": 2368.42,
  "interaction_rate_30d": 0.0023,
  "median_views_30d": 11786,
  "star_index": 67.55,
  "link_convert_index": 88.56,
  "ecommerce_level": "L4"
}
```

### Common use cases

- **KOL shortlisting** - search a niche with follower and price filters and get a ranked shortlist with rates and expected CPM in one table.
- **Campaign budgeting** - compare quoted rates, expected views and CPM/CPE across candidates before you book.
- **Audience fit checks** - verify a creator's followers match your target gender, age, region and spending power.
- **Competitor research** - list a creator's sponsored (Xingtu) videos to see which brands work with them and how those videos performed.
- **Market mapping** - track Xingtu leaderboards by industry each week or month, or expand from one good creator to similar ones.

### Notes on reliability

- Every creator operation needs the creator to be listed on Xingtu. Douyin accounts that never joined the marketplace are reported in the log and skipped.
- The marketplace search occasionally needs a few attempts to answer; the Actor retries automatically, so a search may take a little longer than other operations.
- Creator profiles are assembled from several marketplace sections. If one section is briefly unavailable, the row is still returned with the rates and metrics that did load, and `details_complete` is `false` (Douyin ID, MCN and content themes may then be empty).
- Rates are the creator's published Xingtu prices; final deal prices can differ. CPM, CPE and expected views are the marketplace's own estimates.
- Leaderboard categories are the marketplace's Chinese names; if you pick one a list does not offer, the log shows the valid categories and the run stops without charges.
- Fields a creator has not filled in, or a list does not report, are left empty rather than guessed.

### FAQ

**Do I need a Xingtu brand account, cookies or a proxy?** No. Just add your input and press Start.

**Which creator references work?** A Douyin ID (抖音号), a `douyin.com/user/...` profile URL, a Xingtu creator page URL, or the `star_id` from any result row. Short `v.douyin.com` share links are not resolved; open them and copy the profile URL instead.

**What currency are the rates in?** Chinese yuan (CNY), as quoted on Xingtu.

**Can I get only sponsored videos?** Yes. Run **Creator's videos** with **Videos to return** set to **Sponsored (Xingtu) videos only**.

**Can I run several keywords or creators at once?** Yes - add multiple lines. Duplicate creators and videos across inputs are removed automatically.

**Can I try it for free?** Yes. Users on the free Apify plan can fetch up to 10 results in total to try the Actor. Upgrade to a paid Apify plan to run it without that limit.

**What export formats are supported?** JSON, CSV, Excel, XML and HTML, plus the Apify API and integrations such as Google Sheets, Zapier, Make and webhooks.

### Pricing

This Actor is **pay per result**: you are charged for each record it returns (creators from search, leaderboards or similar-creator lists, creator profiles, audience portraits and videos), plus standard Apify platform usage. Different record types have different prices; see the **Pricing** tab for current rates. You are never charged for inputs that return nothing.

### Related scrapers

- **[Douyin Scraper](https://apify.com/vulnv/douyin-search-scraper)** - 抖音 videos by keyword, with creators and downloads.
- **[Xiaohongshu Scraper](https://apify.com/vulnv/xiaohongshu-scraper)** - 小红书 / RedNote notes, users and comments.
- **[Kuaishou Scraper](https://apify.com/vulnv/kuaishou-scraper)** - 快手 videos, creators and comments.

# Actor input Schema

## `operation` (type: `string`):

What to scrape. Each operation uses a different input field below:

• Search creators → Keywords (+ optional filters)
• Leaderboards → Leaderboard settings
• Similar creators → Creators
• Creator profile & rates → Creators
• Audience portrait → Creators
• Creator's videos → Creators

## `keywords` (type: `array`):

For the "Search creators" operation. Add one or more keywords, e.g. a niche (美妆, 健身, 数码) or a creator name. Each keyword is searched independently and cross-keyword duplicates are removed.

## `creators` (type: `array`):

For "Similar creators", "Creator profile", "Audience portrait" and "Creator's videos". One per line: a Douyin ID (抖音号, e.g. m6640150), a Douyin profile URL (douyin.com/user/MS4w...), a Xingtu creator URL, or a Xingtu creator ID (the star_id of any result row). The creator must be listed on the Xingtu marketplace.

## `maxItems` (type: `integer`):

Upper bound on results per keyword / creator (search, similar creators, videos) and on leaderboard rows. Cost scales linearly. Set 0 to fetch all available.

## `searchBy` (type: `string`):

For "Search creators" only. Match the keyword against creator nicknames, or against the content creators publish.

## `followersMin` (type: `integer`):

For "Search creators" only. Only return creators with at least this many followers. Leave empty for no limit.

## `followersMax` (type: `integer`):

For "Search creators" only. Only return creators with at most this many followers. Leave empty for no limit.

## `priceTier` (type: `string`):

For "Search creators" only. Which quoted rate the price range below filters on.

## `priceMin` (type: `integer`):

For "Search creators" only. Only return creators whose quoted rate is at least this much, in CNY. Leave empty for no limit.

## `priceMax` (type: `integer`):

For "Search creators" only. Only return creators whose quoted rate is at most this much, in CNY. Leave empty for no limit.

## `creatorGender` (type: `string`):

For "Search creators" only.

## `rankingList` (type: `string`):

For "Leaderboards" only. Which Xingtu creator leaderboard to fetch (up to 100 creators each).

## `rankingCategory` (type: `string`):

For "Leaderboards" only, in Chinese as the marketplace names it. Top must-pick and Fastest growth use content categories (不限 = all, 美食, 游戏, 科技, 时尚, 旅行 ...). The brand leaderboards use industries: 美妆, 日化, 3C及电器, 服装配饰, 母婴宠物, 食品饮料, 汽车 (not every list has every industry). If the category does not exist for the chosen list, the run log shows the valid ones.

## `rankingPeriod` (type: `string`):

For "Leaderboards" only. Weekly or monthly ranking; the latest published edition is used.

## `similarBy` (type: `string`):

For "Similar creators" only. What "similar" means.

## `audienceType` (type: `string`):

For "Audience portrait" only. Whose demographics to return.

## `videoType` (type: `string`):

For "Creator's videos" only. All videos, only the creator's own (organic) videos, or only sponsored videos ordered through Xingtu.

## Actor input object example

```json
{
  "operation": "search_creators",
  "keywords": [
    "美妆"
  ],
  "maxItems": 100,
  "searchBy": "nickname",
  "priceTier": "21_60s",
  "creatorGender": "any",
  "rankingList": "top_creators",
  "rankingCategory": "不限",
  "rankingPeriod": "30",
  "similarBy": "comprehensive",
  "audienceType": "followers",
  "videoType": "all"
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped Douyin KOL results in the default dataset.

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

Overview table of the scraped results.

# 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 = {
    "keywords": [
        "美妆"
    ]
};

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

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

```

## MCP server setup

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