# How do I shortlist creators by follower range and price on Douyin and Xiaohongshu?

> Build a Douyin and Xiaohongshu creator shortlist that fits a follower band and a per-post budget, from Xingtu and PGY rates in yuan. Steps, cost and code.

Canonical page: https://okdata.online/answers/creator-shortlist-followers-price/

**Short answer: **Search the two official creator marketplaces with a follower range: Xingtu for Douyin and PGY (蒲公英) for Xiaohongshu both return each creator's rates in yuan, so you drop everyone over budget and rank the rest by price per thousand median views. A page of 20 creators costs $0.004 on Xingtu and $0.04 on PGY; 200 candidates from each cost $0.44.

An outdoor brand has ¥60,000 for a launch and wants 10 to 12 creators with 50,000 to 300,000 followers, paying at most ¥8,000 for a Douyin video and ¥5,000 for a Xiaohongshu note. Its agency will send a list with prices next week. The brand wants its own list first, ranked by what each yuan buys, so it knows what a fair offer looks like.

## Douyin: search Xingtu with the band

[Douyin Xingtu creator search](/apis/douyin/xingtu/creators/search/) matches what creators post (`query`), and takes `followers_min`, `followers_max`, `engagement_min` (in percent, so 3 means 3%) and `gender`. Every result carries followers, 30-day engagement rate, median views and the integrated and custom video prices. There is no price filter, so fetch several pages and filter in code. For finalists, the [Xingtu rate card](/apis/douyin/xingtu/creators/rates/get/) lists every kind of work and whether it is open.

## Xiaohongshu: search PGY with the band

[Xiaohongshu PGY creator search](/apis/xiaohongshu/pgy/creators/search/) takes the same follower bounds, a `type` (mostly image or mostly video notes) and can sort by `lowest_rate`. Results carry median reads of everyday notes and the image and video note prices.

## Rank by what each yuan buys

Divide the price by median views and multiply by 1,000. A ¥6,000 creator whose videos get 120,000 views at the median costs ¥50 per thousand views; a ¥3,000 creator at 30,000 views costs ¥100. Compare like with like: integrated video with integrated video, image note with image note.

| Job | Calls | Cost |
|---|---|---|
| Xingtu, 10 pages (20 creators each) | 10 | $0.04 |
| PGY, 10 pages (20 creators each) | 10 | $0.40 |
| Full rate cards for 12 Douyin finalists | 12 | $0.48 |
| Total | 32 | $0.92 |

## Code

```python
import os, requests

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def pages(path, n, **params):
    out, cursor = [], None
    for _ in range(n):
        query = {**params, "cursor": cursor} if cursor else params
        body = requests.get(API + path, headers=H, params=query, timeout=60).json()
        if body["code"] != "ok":
            raise RuntimeError(f"{body['code']}: {body['message']}")
        out += body["data"]["items"]
        cursor = body["page"]["next_cursor"]
        if not cursor:
            break
    return out

def rate(creator, kind):
    return next((r["price"] for r in creator["rates"] or [] if r["type"] == kind and r["price"]), None)

band = {"followers_min": 50000, "followers_max": 300000}
douyin = pages("/v1/douyin/xingtu/creators/search", 10, query="露营", engagement_min=3, **band)
xhs = pages("/v1/xiaohongshu/pgy/creators/search", 10, query="露营", sort="lowest_rate", **band)

shortlist = []
for platform, found, kind, budget in [("douyin", douyin, "integrated_video", 8000),
                                       ("xiaohongshu", xhs, "image_note", 5000)]:
    for c in found:
        price = rate(c, kind)
        if price and price <= budget and c["median_views"]:
            shortlist.append({"platform": platform, "name": c["name"], "followers": c["followers"],
                              "price_cny": price, "per_1k_views": round(price / c["median_views"] * 1000)})
shortlist.sort(key=lambda x: x["per_1k_views"])
print(shortlist[:12])
```

## Watch for

- **Listed prices.** Both marketplaces show what creators list; fees and discounts are settled when you order there.
- **Medians are not promises.** PGY's figures describe everyday notes, and sponsored notes often reach fewer people, so leave a margin.
- **Followers are not fit.** Audience age, gender and city split are only in the Xingtu and PGY consoles.
- **Only marketplace creators.** Someone not on Xingtu or PGY will not appear; find them through [note search](/apis/xiaohongshu/notes/search/) or video search instead.
- **Every page is its own call;** failed calls are free.

## Other ways

With an advertiser account, the Xingtu and PGY consoles run the same filters plus audience profiles, and that is where you book. Agencies bring negotiated prices and handle contracts. 蝉妈妈 and 千瓜 rank creators by category without code. This route gives you an independent baseline in minutes, and an agent can run it over [MCP](/mcp/). Pricing a list you already have is covered in [checking Xingtu rates in bulk](/answers/xingtu-creator-rates-bulk/); the broader job is [creator discovery](/solutions/creator-discovery/).

## Endpoints used

- [Douyin Xingtu creator search](https://okdata.online/apis/douyin/xingtu/creators/search/) `douyin.xingtu.creators.search`: $0.004 per call · about 20 creators per page
- [Xiaohongshu PGY creator search](https://okdata.online/apis/xiaohongshu/pgy/creators/search/) `xiaohongshu.pgy.creators.search`: $0.04 per call · about 20 creators per page
- [Douyin Xingtu creator rate card](https://okdata.online/apis/douyin/xingtu/creators/rates/get/) `douyin.xingtu.creators.rates.get`: $0.04 per call

Updated 2026-11-12
