# Douyin Xingtu 巨量星图 KOL Scraper - Rates, CPM & Rankings (`clover_folktale/xingtu-scraper`) Actor

Get Douyin KOL data from Xingtu (巨量星图) for influencer marketing: search creators by keyword, category, gender and followers; pull video quotes, expected CPM/CPE, MCN and audience breakdown; read Xingtu ranking lists. No login or cookies needed. Export to JSON, CSV or Excel.

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

## Pricing

from $7.50 / 1,000 creator rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

Douyin Xingtu 巨量星图 KOL Scraper collects Douyin KOL data from Xingtu (巨量星图), Douyin's official creator marketplace. Find any Douyin influencer by keyword, category, gender and follower range, pull a creator's full profile with video quotes, expected CPM and CPE, agency (MCN) and audience breakdown, run a deep analytics report per creator, list a creator's videos, find similar creators, streamers, Toutiao creators and MCN agencies, get a report for one video, and read Xingtu's commercial rankings (including short-drama actors), all as clean, flat JSON. It is made for brands, agencies and analysts who plan influencer marketing and brand deals on Douyin. No Douyin account, API keys, proxies or cookies needed.

### What is Xingtu?

Xingtu (巨量星图, often just called 星图) is Douyin's official marketplace where brands find creators and book sponsored videos. Creators set quotes for different video lengths, and Xingtu shows performance figures, audience statistics and weekly or monthly rankings of creators by commercial results or growth. This Actor reads the data Xingtu publishes about creators; it is not affiliated with Douyin or Xingtu.

### What data can you get?

The Actor has fifteen modes. Each record has a `type` field that tells you which kind of record it is.

| Mode | Give it | You get | Record `type` |
|---|---|---|---|
| `search` | optional keyword; optional category, gender, follower range, creator region, audience age, gender and crowds, sort | creators with followers, quotes, expected plays, CPM/CPE, indexes and recent videos | `creator` |
| `creator` | Xingtu creator IDs or creator page links, `douyinUids` or `douyinIds` | one full profile per creator: base data, performance, expected CPM/CPE, agency and audience breakdown | `creatorDetail` |
| `ranking` | a ranking list, period and category (optional date) | the ranked creators with rank, previous rank and the list's own figures. List `playlet-actors` ranks short-drama actors instead | `rankedCreator`, `rankedActor` |
| `creatorAnalytics` | Xingtu creator IDs, creator page links or Douyin profile links, `douyinUids` or `douyinIds` | one analytics record per creator: audience breakdown, location, content and comment keywords, content mix, CPM/CPE, conversion ability, connection indexes, daily followers | `creatorAnalytics` |
| `creatorVideos` | creator IDs or links, `douyinUids` or `douyinIds`; `videoType` | the creator's videos with plays, likes, comments and rates | `creatorVideo` |
| `similarCreators` | creator IDs or links, `douyinUids` or `douyinIds` | creators Xingtu suggests as similar | `similarCreator` |
| `anchorSearch` | keyword | live-stream hosts (streamers) found on Xingtu | `anchor` |
| `toutiaoSearch` | keyword | Toutiao creators found on Xingtu | `toutiaoCreator` |
| `mcnSearch` | optional agency name | MCN agencies with creator count, followers and scores | `mcn` |
| `videoReport` | Douyin video IDs or links | one report per video: plays and engagement, daily trend, retention curve, top comments | `videoReport` |
| `rateCard` | Xingtu creator IDs, creator page links or Douyin profile links, `douyinUids` or `douyinIds` | one price card per creator with every price tier (video types, settlement, prices) | `rateCard` |
| `contentTrendGuide` | nothing | Xingtu's content trend guide: marketing trend reports and hot topics per industry | `contentTrendGuide` |
| `ipCalendar` | optional `startDate` and `endDate` | Xingtu's IP marketing calendar: the IP activities running in the window | `ipActivity` |
| `ipActivityDetail` | IP activity IDs from `ipCalendar` | the full record of each IP activity, with plan link and incentives | `ipActivity` |
| `marketingCases` | nothing | Xingtu's published marketing cases | `marketingCase` |

#### Shared fields

| Field | What it is |
|---|---|
| `userId` | Xingtu creator ID (use it as input for mode `creator`) |
| `nickname` | Creator name |
| `followers` | Follower count |
| `categories` | Creator categories |
| `subCategories` | Creator sub-categories |
| `contentThemes` | Content themes (last 180 days in search and ranking rows) |
| `url` | Xingtu page of the creator |
| `avatar` | Avatar image link |
| `douyinUserId` | The creator's Douyin user ID |
| `gender` | `male` or `female` |
| `city`, `province` | City and province shown on the creator's profile |

#### Xingtu creator search results (`creator`)

| Field | What it is |
|---|---|
| `price20To60s` | Quote in CNY for a 21-60 second video |
| `price60sPlus` | Quote in CNY for a video over 60 seconds |
| `expectedPlays` | Expected plays per video |
| `expectedCpm20To60s`, `expectedCpm60sPlus` | Expected cost per thousand plays (CNY) for each video length |
| `expectedCpe20To60s`, `expectedCpe60sPlus` | Expected cost per engagement (CNY) for each video length |
| `medianPlays30d` | Median plays of the last 30 days |
| `medianInteractions30d` | Median interactions (likes, comments, shares) of the last 30 days |
| `interactionRate30d` | Interaction rate of the last 30 days, as a fraction |
| `playCompletionRate30d` | Share of plays watched to the end in the last 30 days, as a fraction |
| `followersGrowth30d` | Followers gained in the last 30 days |
| `followersGrowthRate15d` | Follower growth over the last 15 days, as a fraction (0.01 = 1%) |
| `starIndex`, `spreadIndex`, `conversionIndex`, `shoppingIndex` | Xingtu star, spread, conversion and shopping indexes |
| `ecommerceEnabled` | Whether the creator sells products |
| `ecommerceLevel` | E-commerce level, for example `L1` |
| `ecommerceGmv30dRange` | Sales range of the last 30 days, as Xingtu shows it |
| `recentVideos` | The creator's last videos with plays, likes, comments, shares and publish time |

#### Xingtu creator profiles (`creatorDetail`)

| Field | What it is |
|---|---|
| `price20To60s`, `price60sPlus` | Video quotes in CNY |
| `expectedCpm20To60s`, `expectedCpe20To60s`, `expectedCpm60sPlus`, `expectedCpe60sPlus` | Expected CPM and CPE (CNY) per video length |
| `salesExpectedCpm20To60s`, `salesExpectedCpm60sPlus` | Expected CPM (CNY) in sales campaigns per video length |
| `audience` | Audience breakdown by kind: `gender`, `age`, `province`, `city`, `cityTier`, `deviceBrand`, `interest`, `crowd`. Each is a list of `{label, count, share}` with share in percent |
| `mcnName`, `mcnId`, `mcnLogo`, `mcnIntroduction` | Agency (MCN) the creator belongs to, its ID, logo link and introduction |
| `medianPlays` | Median plays per video |
| `averageLikes`, `averageComments`, `averageShares` | Averages per video |
| `averageVideoSeconds` | Average video length in seconds |
| `interactionRate`, `playCompletionRate` | Interaction and play completion rates, as fractions |
| `ecommerceEnabled` | Whether the creator sells products |
| `selfIntroduction` | The creator's own pitch to brands |
| `creditScore` | Xingtu credit score |
| `cooperationBrands` | Brands the creator lists as past partners |
| `email`, `wechat`, `hasWechat` | Business e-mail and WeChat ID the creator published for brands, and whether a WeChat contact is on file |
| `douyinSecUid` | Douyin sec_uid, usable for Douyin profile lookups |
| `douyinShortId`, `douyinUniqueId` | Douyin short ID and Douyin ID (the public handle) |
| `joinedAt`, `updatedAt` | When the creator joined Xingtu and when the profile was last updated (ISO 8601) |

The base profile decides whether a creator record exists. If a later section (reach, audience, business card, quotes) is empty for this creator, its fields are empty and the record is still delivered and charged as one `detail`.

#### Xingtu creator analytics (`creatorAnalytics`)

| Field | What it is |
|---|---|
| `residentCity`, `residentProvince` | Where the creator lives, as Xingtu states it |
| `audience` | Audience breakdown by kind, same shape as in `creatorDetail` |
| `contentKeywords` | Keywords of the creator's recent videos, `[{keyword, count}]` |
| `commentKeywords` | Hot words in the comments, `[{keyword, heat}]` |
| `contentDistribution` | Share of videos per content type, `[{name, videoCount, share}]` |
| `costEffectiveness` | Expected plays and CPM/CPE (CNY), also for sales content, with the creator's CPM rank percentile |
| `cooperation` | Expected plays and CPM/CPE (CNY) for brand cooperation |
| `conversion` | E-commerce conversion ability: sales, component click and GPM ranges (`null` when Xingtu shows none), related video count, median plays |
| `connectionIndex` | Xingtu connection indexes `star`, `spread`, `conversion`, `shopping`, `cooperation`, `costEffectiveness`, each `{value, average, rank, rankPercent}` |
| `dailyFollowers` | Followers per day for about four weeks, `[{date, followers, change}]` |

The record is built from ten requests. If one of them fails, only its fields stay empty (`null` or an empty list) and the record is still delivered and charged.

#### Xingtu creator videos (`creatorVideo`)

| Field | What it is |
|---|---|
| `userId` | Xingtu ID of the creator the video belongs to |
| `source` | Which list: `homepage`, `spread`, `masterpiece` or `converting` |
| `videoId`, `url`, `title`, `publishedAt`, `durationSeconds` | The video |
| `plays`, `likes`, `comments`, `interactionRate`, `completionRate` | Figures. `shares` and `favorites` are filled for `spread` and `converting` only; `masterpiece` carries only ID, publish time and plays |

#### Xingtu similar creators (`similarCreator`), streamers (`anchor`), Toutiao creators (`toutiaoCreator`)

These rows carry the shared creator fields plus quotes and expected plays where Xingtu publishes them. `similarCreator` adds `similarTo` (the creator you asked about) and `similarityReasons`; `toutiaoCreator` adds `toutiaoCategory` and `verification`.

#### Xingtu MCN agencies (`mcn`)

| Field | What it is |
|---|---|
| `mcnId`, `name`, `avatar`, `introduction` | The agency |
| `creatorCount`, `totalFollowers` | Signed creators and their followers together |
| `compositeScore`, `growthScore` | Xingtu scores |
| `tags`, `isPartnerPlan`, `topCreators` | Focus categories, partner-plan flag, and top creators as `[{userId, nickname}]` |

#### Xingtu video report (`videoReport`)

| Field | What it is |
|---|---|
| `videoId`, `url`, `title`, `publishedAt`, `durationSeconds`, `musicTitle` | The video |
| `plays`, `likes`, `comments`, `shares`, `collects`, `interactions`, `interactionRate`, `completionRate` | Total figures |
| `authorId`, `authorNickname`, `authorFollowers` | The video's creator |
| `dailyTrend` | Per day: `plays`, `validPlays`, `likes`, `comments`, `shares`, `collects`, `interactions`, `hotScore`, `interactionRate`, `completionRate` |
| `retentionCurve` | Per time bucket (seconds from the start): `likes` and `playsLost` |
| `topComments` | Up to 50 top comments `{commentId, text, likes, replies}` |

The record is built from five requests; a failed one leaves only its fields empty.

#### Xingtu creator rate card (`rateCard`)

| Field | What it is |
|---|---|
| `userId`, `url` | The creator and the creator's Xingtu page |
| `industryTags` | Advertiser industries the creator sells to |
| `priceTiers` | Every price tier `[{name, videoType, taskCategory, settlement, price, originPrice, hasDiscount, isOpen, floorPrice, ceilingPrice}]`. Prices are in CNY as Xingtu publishes them; for play-based settlement `price` is the unit rate and `floorPrice`/`ceilingPrice` bound the order |

A creator Xingtu has no card for returns nothing and is not charged.

#### Xingtu content trend guide (`contentTrendGuide`)

| Field | What it is |
|---|---|
| `guideId`, `title`, `description`, `kind` | The entry; `kind` is `content` (trend report) or `hot` |
| `industryId`, `industry` | The industry the entry is for |
| `url`, `linkSource`, `thumbnail` | Where the entry leads (a web page or a Feishu document) and its thumbnail |
| `startDate`, `endDate` | The days the entry applies to |

The mode returns the whole guide (about 70 entries) in one request.

#### Xingtu IP calendar and IP activities (`ipActivity`)

| Field | What it is |
|---|---|
| `activityId`, `title`, `description`, `heroImage`, `industryId` | The activity |
| `category`, `status` | IP type and status codes as Xingtu publishes them |
| `startsAt`, `endsAt`, `investStartsAt`, `investEndsAt` | Activity period and sign-up period (UTC) |
| `createdAt`, `highlights`, `planUrl`, `incentives` | Only in mode `ipActivityDetail`: creation time, highlights, link to the plan document, incentive tiers |

`ipCalendar` lists the activities that run in the window, `startDate` to `endDate` (YYYY-MM-DD, UTC; default: today and the next 90 days); use the `activityId` as input of `ipActivityDetail`. An unknown activity ID returns nothing and is not charged.

#### Xingtu marketing cases (`marketingCase`)

| Field | What it is |
|---|---|
| `caseId`, `title`, `slogan`, `url` | The case and its article link |
| `coverUrl`, `image` | Images |
| `industryIds`, `createdAt` | Industries and publication time (UTC) |

The mode returns the cases Xingtu lists (about 25) in one request.

#### Xingtu short-drama actor ranking rows (`rankedActor`)

`rank`, `previousRank` (empty for an actor new on the list; `isNew` is then true), `nickname`, `gender`, `followers`, `compositeScore`, `performanceScore`, `commercialConversionScore`, `viralityScore`, `playletName`, `playletTheme`, `userId` (empty when the actor has no Xingtu account) and `url`. The list is published monthly; without `rankingDate` the latest edition available is read.

#### Xingtu creator ranking rows (`rankedCreator`)

| Field | What it is |
|---|---|
| `rank` | Position in the ranking (also in `rankedActor`) |
| `previousRank` | Position in the previous edition |
| `isNew` | Whether the creator is new in this edition |
| `score` | Ranking score |
| `primaryCategory` | Main content category |
| `averagePlays` | Average plays per video |
| `cpm` | Cost per thousand plays |
| `followersGained`, `videoCount` | Followers gained and videos published in the period (rising-stars list) |
| `completedOrders` | Completed Xingtu orders as a band, for example `> 20` (brand lists) |
| `repurchaseRate` | Advertiser repurchase rate as a band, for example `> 0.75` (brand lists) |
| `orderRate` | Share of the creator's videos that are paid orders (brand lists) |

The dataset has table views for Creators, Creator profiles, Rankings, Creator videos, Creator analytics, MCN agencies and Short-drama actor ranking.

### How to use Douyin Xingtu KOL Scraper

1. Open the Actor in Apify Console.
2. Choose a mode, for example Find creators (`search`), Creator profiles (`creator`), Creator analytics (`creatorAnalytics`), Creator videos (`creatorVideos`), Video report (`videoReport`) or Ranking lists (`ranking`).
3. Fill in the inputs for that mode, for example a keyword and a follower range, a list of creator IDs, or a ranking list and category.
4. Set Max results. You are charged per item returned, never for more than this number.
5. Click Start and wait for the run to finish.
6. Open the dataset and export it as JSON, CSV or Excel, or read it through the API.

An empty input `{}` also works: it browses the top creators.

### Input

| Field | Type | Required | What it does | Default |
|---|---|---|---|---|
| `mode` | string | required | `search`, `creator`, `ranking`, `creatorAnalytics`, `creatorVideos`, `similarCreators`, `anchorSearch`, `toutiaoSearch`, `mcnSearch`, `videoReport`, `rateCard`, `contentTrendGuide`, `ipCalendar`, `ipActivityDetail` or `marketingCases` | `search` |
| `keyword` | string | optional | Mode search: creator nickname, or with `searchBy` = `content` a topic found in the creators' videos. Leave empty to browse with filters only. Modes anchorSearch and toutiaoSearch: required search word. Mode mcnSearch: optional agency name | none |
| `searchBy` | string | optional | Mode search: match the keyword against `nickname` or `content` | `nickname` |
| `category` | string | optional | Mode search: only creators in this category | `any` |
| `gender` | string | optional | Mode search: `any`, `male` or `female` | `any` |
| `minFollowers` | integer | optional | Mode search: only creators with at least this many followers | none |
| `maxFollowers` | integer | optional | Mode search: only creators with at most this many followers | none |
| `province` | string | optional | Mode search: only creators based in this province (a dropdown of all 34), as shown on their profile | `any` |
| `city` | string | optional | Mode search: only creators based in this city, the Chinese city name such as `杭州` or `杭州市`; can be combined with `province`, which then must be the province this city belongs to. Beijing, Shanghai, Tianjin and Chongqing are provinces here: set `province` instead, or a district name as `city`. | none |
| `audienceGender` | string | optional | Mode search: `any`, `male` or `female`; only creators whose video audience is at least `audienceGenderShare` percent of that gender | `any` |
| `audienceGenderShare` | integer | optional | Mode search: the least share of the audience, 50 to 100, used with `audienceGender` | `60` |
| `audienceAges` | array of strings | optional | Mode search: only creators whose video audience is mostly in one of these age groups: `under-18`, `18-23`, `24-30`, `31-40`, `41-50`, `over-50` | none |
| `audienceCrowds` | array of strings | optional | Mode search: only creators whose video audience is mostly one of these crowds: `gen-z`, `small-town-youth`, `new-white-collar`, `young-moms`, `urban-blue-collar`, `small-town-seniors`, `senior-middle-class`, `urban-silver-haired` | none |
| `fansCrowds` | array of strings | optional | Mode search: same crowds, matched against the creator's followers instead of the video audience | none |
| `sort` | string | optional | Mode search: `relevance`, `followers-desc` or `followers-asc` | `relevance` |
| `creators` | array of strings | optional | Modes creator, creatorAnalytics, creatorVideos, similarCreators and rateCard: Xingtu creator IDs (the `userId` returned by search), Xingtu creator page links, or Douyin profile links (`https://www.douyin.com/user/...`). A Douyin account that is not on Xingtu returns nothing and costs nothing | none |
| `douyinUids` | array of strings | optional | Same modes as `creators`: numeric Douyin user IDs (digits only). Each is looked up on Xingtu first; an account that is not on Xingtu returns nothing; only the $0.00005 run start can be charged. A Douyin user ID put into `creators` is not converted, use this field | none |
| `douyinIds` | array of strings | optional | Same modes as `creators`: Douyin account names (抖音号, an `@` in front is ignored). Looked up on Xingtu like `douyinUids`; an occasional lookup returns nothing, then the account counts as not found and a second run finds it | none |
| `videoType` | string | optional | Mode creatorVideos: `homepage`, `spread`, `masterpiece` or `converting` | `homepage` |
| `videos` | array of strings | optional | Mode videoReport: Douyin video IDs or video links (`https://www.douyin.com/video/...`); short `v.douyin.com` links are not supported | none |
| `activities` | array of strings | optional | Mode ipActivityDetail: IP activity IDs, the `activityId` of `ipCalendar` records | none |
| `startDate`, `endDate` | string | optional | Mode ipCalendar: window as YYYY-MM-DD (UTC), end included | today, and 90 days after the start |
| `rankingList` | string | optional | Mode ranking: which ranking list to read; `playlet-actors` ranks short-drama actors | `brand-preferred` |
| `rankingPeriod` | string | optional | Mode ranking: `weekly` or `monthly` edition (`playlet-actors` is monthly only) | `monthly` |
| `rankingCategory` | string | optional | Mode ranking: industry or content category. Leave unset for the default of the chosen list | default of the list |
| `rankingDate` | string | optional | Mode ranking: edition to read as YYYYMMDD, the last day of the period (e.g. `20260930` for the September 2026 monthly edition). Empty reads the latest edition | none |
| `maxResults` | integer | optional | Maximum number of items in total for this run (1 to 5000) | `20` |

#### Option values

- `category` (search): `any`, `beauty`, `fashion`, `pets`, `reviews`, `games`, `anime`, `travel`, `cars`, `lifestyle`, `music`, `dance`, `food`, `parenting`, `fitness`, `tech`, `education`, `looks`, `home`, `talent`, `film-tv`, `art-culture`, `finance`, `rural`, `comedy-drama`, `relationships`, `gardening`, `real-estate`, `street-snaps`, `media`.
- `rankingList`: `brand-preferred` (brand seeding), `a3-seeding`, `search-after-view`, `ecommerce` (sales), `ad-traffic`, `high-potential`, `rising-stars` (follower growth), `top-picks` (head creators), `playlet-actors` (short-drama actors).
- `videoType` (creatorVideos): `homepage` (the creator's video list, newest first, paged), `spread` (best spread-performance videos), `masterpiece` (masterpieces), `converting` (e-commerce converting videos).
- `rankingCategory`, industry categories for the lists brand-preferred, a3-seeding, search-after-view, ecommerce, ad-traffic and high-potential: `electronics`, `daily-chemicals`, `apparel`, `mom-baby-pet`, `auto`, `beauty`, `food-beverage`.
- `rankingCategory`, content categories for the lists rising-stars and top-picks: `all`, `drama`, `anime`, `parenting`, `entertainment`, `sports`, `animals`, `emotion`, `photography`, `education`, `travel`, `fashion`, `games`, `home-life`, `life-records`, `movies`, `tv-series`, `tech`, `science`, `variety`, `food`, `workplace`, `dance`, `art`, `finance`, `music`, `looks`, `rural`, `cars`, `law`.

#### Example: find Douyin food creators with 100k-500k followers

```json
{
  "mode": "search",
  "keyword": "美食",
  "category": "food",
  "minFollowers": 100000,
  "maxFollowers": 500000,
  "sort": "followers-desc",
  "maxResults": 100
}
```

#### Example: find Douyin creators by what their videos are about

```json
{
  "mode": "search",
  "keyword": "露营",
  "searchBy": "content",
  "category": "travel",
  "gender": "female",
  "maxResults": 40
}
```

#### Example: full Xingtu creator profiles

```json
{
  "mode": "creator",
  "creators": ["6839869628747874312"]
}
```

You can also paste a creator page link such as `https://www.xingtu.cn/ad/creator/author-homepage/douyin-video/6839869628747874312`, or a Douyin profile link such as `https://www.douyin.com/user/MS4wLjABAAAA...`.

#### Example: deep analytics of a Douyin creator

```json
{
  "mode": "creatorAnalytics",
  "creators": ["6839869628747874312"]
}
```

#### Example: the latest 40 videos of a Douyin creator

```json
{
  "mode": "creatorVideos",
  "creators": ["6839869628747874312"],
  "videoType": "homepage",
  "maxResults": 40
}
```

#### Example: a Xingtu report for one video

```json
{
  "mode": "videoReport",
  "videos": ["https://www.douyin.com/video/7695225845299957035"]
}
```

#### Example: Xingtu short-drama actor ranking

```json
{
  "mode": "ranking",
  "rankingList": "playlet-actors",
  "maxResults": 100
}
```

#### Example: Xingtu weekly rising-stars ranking for food

```json
{
  "mode": "ranking",
  "rankingList": "rising-stars",
  "rankingPeriod": "weekly",
  "rankingCategory": "food",
  "maxResults": 100
}
```

#### Example: Xingtu monthly brand-preferred ranking for beauty

```json
{
  "mode": "ranking",
  "rankingList": "brand-preferred",
  "rankingPeriod": "monthly",
  "rankingCategory": "beauty",
  "rankingDate": "20260930",
  "maxResults": 100
}
```

### Output example

All values below are illustrative samples.

#### Xingtu search result (`creator`)

```json
{
  "type": "creator",
  "userId": "6800000000000000001",
  "url": "https://www.xingtu.cn/ad/creator/author-homepage/douyin-video/6800000000000000001",
  "nickname": "示例美食达人",
  "avatar": "https://p3.douyinpic.com/aweme/1080x1080/aweme-avatar/sample.jpeg",
  "douyinUserId": "10000000001",
  "gender": "male",
  "city": "杭州市",
  "province": "浙江省",
  "followers": 2150000,
  "followersGrowth30d": 18400,
  "followersGrowthRate15d": 0.0042,
  "categories": ["美食"],
  "subCategories": ["美食教程"],
  "contentThemes": ["家常菜"],
  "price20To60s": 13000,
  "price60sPlus": 15000,
  "expectedPlays": 390000,
  "medianPlays30d": 305000,
  "medianInteractions30d": 5300,
  "interactionRate30d": 0.0174,
  "playCompletionRate30d": 0.21,
  "expectedCpm20To60s": 33.33,
  "expectedCpe20To60s": 1.88,
  "expectedCpm60sPlus": 38.46,
  "expectedCpe60sPlus": 2.17,
  "starIndex": 78.5,
  "spreadIndex": 72.1,
  "conversionIndex": 65.3,
  "shoppingIndex": 60.2,
  "ecommerceEnabled": false,
  "ecommerceLevel": null,
  "ecommerceGmv30dRange": null,
  "recentVideos": [
    {"videoId": "7600000000000000001", "title": "...", "plays": 335000, "likes": 4900, "comments": 116, "shares": 1230, "publishedAt": "2026-10-01T09:30:00Z"}
  ]
}
```

#### Xingtu creator profile (`creatorDetail`)

```json
{
  "type": "creatorDetail",
  "userId": "6800000000000000001",
  "nickname": "示例美食达人",
  "followers": 2150000,
  "douyinSecUid": "MS4wLjABAAAAsample",
  "douyinShortId": "100000001",
  "douyinUniqueId": "sample_food",
  "mcnName": "示例MCN机构",
  "mcnId": "7000000000000000001",
  "joinedAt": "2021-05-12T00:00:00Z",
  "updatedAt": "2026-10-10T00:00:00Z",
  "price20To60s": 13000,
  "price60sPlus": 15000,
  "medianPlays": 310000,
  "averageLikes": 4800,
  "averageComments": 120,
  "averageShares": 1100,
  "averageVideoSeconds": 48.5,
  "interactionRate": 0.0168,
  "playCompletionRate": 0.2,
  "expectedCpm20To60s": 33.33,
  "expectedCpe20To60s": 1.88,
  "salesExpectedCpm20To60s": 30.1,
  "selfIntroduction": "...",
  "creditScore": 95,
  "cooperationBrands": null,
  "email": null,
  "wechat": null,
  "hasWechat": false,
  "audience": {
    "age": [{"label": "41-50", "count": 116000, "share": 6.43}],
    "gender": [{"label": "female", "count": 1050000, "share": 58.2}],
    "province": [], "city": [], "cityTier": [], "deviceBrand": [], "interest": [], "crowd": []
  }
}
```

#### Xingtu ranking row (`rankedCreator`)

```json
{
  "type": "rankedCreator",
  "userId": "6800000000000000002",
  "url": "https://www.xingtu.cn/ad/creator/author-homepage/douyin-video/6800000000000000002",
  "nickname": "示例美妆达人",
  "followers": 860000,
  "rank": 3,
  "previousRank": 7,
  "isNew": false,
  "score": 91.2,
  "primaryCategory": "美妆",
  "averagePlays": 420000,
  "cpm": 28.5,
  "completedOrders": "> 20",
  "repurchaseRate": "> 0.75",
  "orderRate": 0.32,
  "followersGained": null,
  "videoCount": null,
  "price20To60s": null,
  "recentVideos": []
}
```

#### Xingtu creator analytics (`creatorAnalytics`, shortened)

```json
{
  "type": "creatorAnalytics",
  "userId": "6800000000000000001",
  "url": "https://www.xingtu.cn/ad/creator/author-homepage/douyin-video/6800000000000000001",
  "residentCity": "杭州",
  "residentProvince": "浙江",
  "audience": {"age": [{"label": "24-30", "count": 1866000, "share": 32.7}]},
  "contentKeywords": [{"keyword": "美食", "count": 5}],
  "commentKeywords": [{"keyword": "好吃", "heat": 1172}],
  "contentDistribution": [{"name": "美食", "videoCount": 9, "share": 1.0}],
  "costEffectiveness": {"expectedPlays": 6300000, "expectedCpm20To60s": 63.46, "cpmRankPercent": 0.0196},
  "conversion": {"gpmRange": null, "relatedVideoCount": 2, "medianPlays": 10960465},
  "connectionIndex": {"star": {"value": 88.38, "average": 56.19, "rank": 82, "rankPercent": 0}},
  "dailyFollowers": [{"date": "2026-09-21", "followers": 7080847, "change": -222}]
}
```

#### Xingtu creator video (`creatorVideo`)

```json
{
  "type": "creatorVideo",
  "source": "homepage",
  "userId": "6800000000000000001",
  "videoId": "7600000000000000001",
  "url": "https://www.douyin.com/video/7600000000000000001",
  "title": "...",
  "publishedAt": "2026-10-01T09:30:00Z",
  "durationSeconds": 10.5,
  "plays": 19648804,
  "likes": 371509,
  "comments": 12343,
  "shares": null,
  "favorites": null,
  "interactionRate": 0.0208,
  "completionRate": 0.3813
}
```

### How much does it cost?

The Actor uses pay-per-event pricing. These are the current prices:

| Event | Price | When it is charged |
|---|---|---|
| Run start | $0.00005 | Once per run, when the first request succeeds, even if that request returns nothing. These modes pay several at that moment: `creator` 6, `creatorAnalytics` 7, `rateCard` 7, `videoReport` 5, `mcnSearch` 2. Not charged when the run fails from the start or rejects the IDs, or when your spending limit cannot cover it |
| Result | $0.0092 | Per creator from a search, per ranking row, and per row of the modes `similarCreators`, `anchorSearch`, `toutiaoSearch`, `mcnSearch`, `contentTrendGuide`, `ipCalendar`, `ipActivityDetail` and `marketingCases` |
| Detail | $0.0368 | Per full creator profile (mode `creator`) and per video report (mode `videoReport`) |
| Analytics | $0.08 | Per creator analytics record (mode `creatorAnalytics`) and per creator rate card (mode `rateCard`) |
| Video | $0.005 | Per video (mode `creatorVideos`) |

Worked examples:

- 100 creators from a search: $0.00005 + 100 x $0.0092 = $0.92005.
- One ranking with 100 rows: $0.00005 + 100 x $0.0092 = $0.92005.
- 10 full creator profiles: 6 x $0.00005 + 10 x $0.0368 = $0.3683.
- 5 creator analytics records: 7 x $0.00005 + 5 x $0.08 = $0.40035.
- 100 videos of a creator: $0.00005 + 100 x $0.005 = $0.50005.
- 3 video reports: 5 x $0.00005 + 3 x $0.0368 = $0.11065.

You never pay for more than `maxResults` items, items that were not delivered are never charged, and the run stops by itself if your spending limit is reached. Before each creator analytics record the run checks that your limit still covers its $0.08, and stops without fetching it if not; sections that cannot be delivered stay empty and do not change the price.

On the free Apify plan, every run returns a sample dataset: a real result of this Actor's prefilled input, captured on the date shown in the run status, so you can see exactly what the output looks like. Your own input is not used and nothing is charged. To run your own searches, use any paid Apify plan.

### Use cases

- Influencer sourcing: shortlist Douyin creators in a category within a follower range and budget, with their video quotes (`price20To60s`, `price60sPlus`).
- Campaign planning: compare expected CPM and CPE across creators and video lengths before you book a brand deal.
- Audience checks: confirm that a creator's audience matches your target by age, gender, province, city tier, device brand and interests.
- Market monitoring: follow the weekly and monthly rankings of your industry and spot rising creators early with `rank`, `previousRank` and `isNew`.
- Agency and sales research: see which agency (MCN) a creator belongs to and which brands they list as past partners.
- E-commerce partner search: find creators who sell products using `ecommerceEnabled`, `ecommerceLevel` and `ecommerceGmv30dRange`.

### Integrations and API

You can start runs through the Apify API, schedule them (for example every Monday to catch the new weekly ranking), and connect the results to Apify integrations such as webhooks, Google Sheets or Make. Here is a Python example with the `apify-client` package:

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("clover_folktale/xingtu-scraper").call(run_input={
    "mode": "ranking",
    "rankingList": "rising-stars",
    "rankingPeriod": "weekly",
    "rankingCategory": "food",
    "maxResults": 100
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

A common workflow is to run a search or ranking first, then pass the `userId` values to mode `creator` to get full profiles with audience data.

### Tips and limits

- `maxResults` is the total across all creators in the run; a run stops as soon as it is reached.
- A search page holds up to 20 creators; a ranking request returns up to 100.
- Use `searchBy: "content"` to find creators by what their videos are about instead of by name.
- The `userId` of a search or ranking row is the ID to give mode `creator`.
- Rankings read the latest published edition; set `rankingDate` (YYYYMMDD, the last day of the period) for an earlier one.
- Industry rankings (brand preferred, A3 seeding, search after view, e-commerce, ad traffic, high potential) take an industry category such as `electronics` or `beauty`; rising stars and top picks take a content category such as `food` or `travel`.
- A ranking category a list does not publish (for example an auto ranking for the e-commerce list) returns no results; only the $0.00005 run start is charged.
- The ranking `playlet-actors` is published monthly and may lag behind the other lists; check `rankingDate` and the actors' scores before relying on it.
- Creator IDs and video IDs that do not exist are skipped and not charged.
- The Actor retries transient errors and empty pages on its own and stops cleanly instead of failing half-way.
- Quotes are in Chinese yuan (CNY). Rates such as `interactionRate30d` are fractions (0.0174 = 1.74%). Audience `share` values are in percent.
- Figures are what Xingtu shows at the time of the run; rankings update weekly or monthly.
- **Free plan.** Every run on the free Apify plan returns a stored sample dataset (a real result of the prefilled input); your own input is not used and nothing is charged. Use any paid Apify plan to run your own searches.

#### Fields that are often empty

- `price20To60s` and `price60sPlus` are `null` when a creator does not sell that video length.
- `email`, `wechat` and `cooperationBrands` are empty unless the creator filled them in.
- Ranking rows carry fewer fields than search rows: no quotes, expected plays, CPM/CPE, indexes, e-commerce figures or recent videos (those are `null` or empty). Take them from a search or a profile.
- The figures a list adds (average plays, CPM, follower gain, order figures) depend on the list.
- `ecommerceLevel` and `ecommerceGmv30dRange` are `null` for creators who do not sell products.
- `recentVideos` can be empty for new creators.
- Single `audience` kinds can be missing for creators with few followers.

### FAQ

#### Do I need a Douyin or Xingtu account?

No. You do not need a Douyin account, API keys, proxies or cookies.

#### Is it legal to scrape Xingtu?

The Actor returns only data that Xingtu itself publishes about creators: creator IDs, names, avatars, location, quotes, performance figures, audience statistics and the business contact details a creator chose to publish for brands. Phone numbers are masked by the platform and not returned, and no private messages are collected. You are responsible for how you use the data, including compliance with data-protection laws in your country.

#### How fresh is the data?

Every run reads the figures Xingtu shows at that moment. Rankings are published weekly or monthly; use `rankingDate` to read an earlier edition.

#### Why are some fields empty?

Some data only exists for some creators (for example quotes for one video length, e-commerce figures, or contact details), and ranking rows carry fewer fields than search rows. See Fields that are often empty above.

#### How many results can I get?

Up to 5,000 items per run with `maxResults`. A search page holds up to 20 creators and a ranking request returns up to 100.

#### Can I schedule runs and export the data?

Yes. You can schedule runs in Apify Console or start them through the API, and export every dataset as JSON, CSV or Excel.

#### A field or mode I need is missing. What can I do?

Open an issue from the Actor page and it will be looked at.

### Other tools by Silkline

Every tool below charges per result and needs no login or cookies.

#### Marketing and creator data

- [Xiaohongshu Pugongying 蒲公英 KOL Scraper - Rates & Stats](https://apify.com/clover_folktale/pugongying-scraper)
- [Bilibili Huahuo 花火 KOL Scraper - Creator Rates & Audience](https://apify.com/clover_folktale/huahuo-scraper)
- [Douyin Analytics 抖音数据分析 - Audience, Trends & Keywords](https://apify.com/clover_folktale/douyin-analytics-scraper)
- [WeChat Index 微信指数 Scraper - China Keyword Trend Data](https://apify.com/clover_folktale/wechat-index-scraper)
- [TikTok Creative Center Scraper - Top Ads, Hashtags & Trends](https://apify.com/clover_folktale/tiktok-creative-center-scraper)

#### More from Silkline

- [Xiaohongshu 小红书 RedNote Scraper - Notes, Comments & Replies](https://apify.com/clover_folktale/xiaohongshu-scraper) (Chinese social media and content)
- [Taobao Tmall 淘宝 Product Scraper - Prices, Sales & Shops](https://apify.com/clover_folktale/taobao-scraper) (E-commerce)
- [TikTok Scraper - Video Search, Hashtags, Profiles & Sounds](https://apify.com/clover_folktale/tiktok-scraper) (Global platforms)

# Actor input Schema

## `mode` (type: `string`):

What to scrape: creators matching a search, full profiles or deep analytics of given creators, a creator's videos, similar creators, streamers, Toutiao creators, MCN agencies, a video report, or an official ranking list, a creator's rate card, Xingtu's content trend guide, the IP marketing calendar and the details of one IP activity, or Xingtu's marketing cases.

## `keyword` (type: `string`):

Creator nickname or, with searchBy = content, a topic found in the creators' videos. Optional: leave empty to browse creators with the filters below only. For anchorSearch and toutiaoSearch the keyword is required; for mcnSearch it is an optional agency name (empty lists agencies).

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

Match the keyword against creator nicknames or against the content of their videos.

## `category` (type: `string`):

Only creators in this category.

## `gender` (type: `string`):

Only male or female creators.

## `minFollowers` (type: `integer`):

Only creators with at least this many followers.

## `maxFollowers` (type: `integer`):

Only creators with at most this many followers.

## `province` (type: `string`):

Only creators based in this province, as shown on their profile.

## `city` (type: `string`):

Only creators based in this city, written as the Chinese city name, for example 杭州 or 杭州市. Can be combined with a province.

## `audienceGender` (type: `string`):

Only creators whose video audience is mostly male or mostly female. The share is set by Audience gender share.

## `audienceGenderShare` (type: `integer`):

With Audience gender set: the least share of the audience that must be of that gender, 50 to 100.

## `audienceAges` (type: `array`):

Only creators whose video audience is mostly in one of these age groups. Several groups match any of them.

## `audienceCrowds` (type: `array`):

Only creators whose video audience is mostly one of these crowds. Several crowds match any of them.

## `fansCrowds` (type: `array`):

Only creators whose followers are mostly one of these crowds. Several crowds match any of them.

## `sort` (type: `string`):

Best match first, or by follower count.

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

Xingtu creator IDs (the long number returned as userId by the search), Xingtu creator page links, e.g. https://www.xingtu.cn/ad/creator/author-homepage/douyin-video/6839869628747874312, or Douyin profile links (https://www.douyin.com/user/...), which are looked up on Xingtu first. A Douyin account that is not on Xingtu returns nothing and costs nothing.

## `douyinUids` (type: `array`):

Numeric Douyin user IDs (digits only, for example 95419543465). Each is looked up on Xingtu first and then handled like an entry of 'creators'. Use it together with or instead of 'creators'. A Douyin account that is not on Xingtu returns nothing; only the $0.00005 run start can be charged.

## `douyinIds` (type: `array`):

Douyin account names (抖音号, for example 851097441 or an @name). Each is looked up on Xingtu first and then handled like an entry of 'creators'. Use it together with or instead of 'creators'. An account that is not on Xingtu returns nothing; only the $0.00005 run start can be charged.

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

Which videos of each creator: the homepage list (all videos, newest first), the creator's best spread-performance videos, masterpieces (ID, date and plays only) or e-commerce converting videos.

## `videos` (type: `array`):

Douyin video IDs or video links, e.g. https://www.douyin.com/video/7695225845299957035. Short links (v.douyin.com) are not supported.

## `activities` (type: `array`):

IP activity IDs: the activityId of the records of the ipCalendar mode, e.g. 499.

## `startDate` (type: `string`):

First day of the window as YYYY-MM-DD (UTC). Empty starts today.

## `endDate` (type: `string`):

Last day of the window as YYYY-MM-DD (UTC), included. Empty ends 90 days after the start.

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

Which official ranking to read. The list ranks creators by their commercial results or growth; the short-drama actor ranking is monthly and takes no category.

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

Weekly or monthly edition (the short-drama actor ranking is monthly only). The latest published edition is read unless you give a date.

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

Advertiser industry (lists brand-preferred, a3-seeding, search-after-view, ecommerce, ad-traffic, high-potential) or content category (rising-stars, top-picks). Leave unset for the default of the chosen list. A category a list does not publish returns no results.

## `rankingDate` (type: `string`):

Optional edition to read, as YYYYMMDD: the last day of the period, e.g. 20260930 for the September 2026 monthly edition. Empty reads the latest edition.

## `maxResults` (type: `integer`):

Maximum number of items to return in total for this run. You are charged per item returned.

## Actor input object example

```json
{
  "mode": "search",
  "searchBy": "nickname",
  "category": "any",
  "gender": "any",
  "province": "any",
  "audienceGender": "any",
  "audienceGenderShare": 60,
  "sort": "relevance",
  "creators": [
    "6839869628747874312"
  ],
  "videoType": "homepage",
  "rankingList": "brand-preferred",
  "rankingPeriod": "monthly",
  "maxResults": 20
}
```

# Actor output Schema

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

All scraped items (JSON, CSV, Excel via the dataset API).

# 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 = {
    "creators": [
        "6839869628747874312"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("clover_folktale/xingtu-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 = { "creators": ["6839869628747874312"] }

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

```

## MCP server setup

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