# Bilibili Huahuo 花火 KOL Scraper - Creator Rates & Audience (`clover_folktale/huahuo-scraper`) Actor

Find Bilibili KOLs (UP主) on the Huahuo (花火) creator marketplace by keyword, category and follower range, with commercial quotes, median plays and CPM. Get full profiles with audience breakdown and top videos. No login or cookies needed. Export to JSON, CSV or Excel.

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

## Pricing

from $7.50 / 1,000 up host 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

Bilibili Huahuo 花火 KOL Scraper collects data on Bilibili (哔哩哔哩 / B站) creators, known as UP hosts (UP主), from Huahuo (花火), Bilibili's official creator marketplace. Search UP hosts by keyword, content category and follower range and get their commercial quotes, median plays, CPM and publishing activity, or pull a UP host's full profile with engagement averages, top videos and audience breakdown. It is made for influencer marketing teams, agencies and brands who research Bilibili KOLs. Results come as clean, flat JSON, and you need no Bilibili account, API keys, proxies or cookies.

### What is Bilibili Huahuo?

Huahuo (花火) is Bilibili's creator marketplace, where brands and agencies find UP hosts for sponsored videos. For each UP host it shows the prices they quote per cooperation type, performance figures such as median plays and interaction rate, and statistics about their followers and viewers. This Actor turns that information into structured records you can filter, compare and export. It is an independent tool and is not affiliated with Bilibili.

### What data can you get?

The Actor has two modes and returns two record types:

- `search` mode returns one `creator` record per UP host, with quotes, plays, CPM and activity counts.
- `creator` mode returns one `creatorDetail` record per UP host: a full profile with engagement averages, top videos and audience lists.

Quotes are in Chinese yuan (CNY). Rates are fractions (0.02 = 2%). Fields ending in `Pct` are percentages.

#### Fields in both record types

| Field | Description |
|---|---|
| `quotes` | Commercial quotes in CNY, one `{type, price, discountPrice}` entry per cooperation type, e.g. custom video |
| `medianPlays` | Median plays per video (profiles: last 30 days) |
| `averagePlays` | Average plays per video |
| `interactionRate` | Interaction rate as a fraction |
| `followers` | Follower count |
| `userId` | Bilibili UID (use it as input for `creator` mode) |
| `url` | Bilibili space link |
| `nickname` | UP host name |
| `category` / `subCategory` | Main content category and content sub-category |
| `accountType` | `independent` or `agency` |
| `agencyName` | Agency (MCN) the UP host works with |
| `tags` | Content tags |
| `gender` | `male` or `female` |
| `region` | Province and city |
| `avatar` | Avatar image link |
| `type` | Record type: `creator` (search) or `creatorDetail` (profile) |

#### Search-only fields (`creator`)

| Field | Description |
|---|---|
| `cpm` | Cost per thousand plays (CNY) |
| `cpc` | Cost per click (CNY) |
| `followersGrowth` | Followers gained recently |
| `followersGrowthPct` | Recent follower growth in percent |
| `videos30d`, `videos90d`, `videos180d` | Videos published in 30, 90 and 180 days |
| `hotVideos180d` | Hit videos in 180 days |
| `sponsoredVideos` | Sponsored videos so far |
| `cooperationModes` | Cooperation formats the UP host offers |
| `commerceEnabled` | Whether the UP host may sell products |
| `isLive` | Whether the UP host streams live |

#### Profile-only fields (`creatorDetail`)

| Field | Description |
|---|---|
| `fansGender`, `fansAge`, `fansDevice`, `fansRegion`, `fansCityTier` | Share of followers by gender, age, device, region and city tier, each `{label, sharePct}` |
| `viewersGender`, `viewersAge`, `viewersDevice`, `viewersRegion` | Share of recent viewers by gender, age, device and region, each `{label, sharePct}` |
| `fansInterestTags`, `viewersInterestTags` | Interest tags of followers and of recent viewers, each `{label, count}` |
| `seedingCpm` | CPM for seeding campaigns (CNY) |
| `medianInteractionRate` | Median interaction rate as a fraction |
| `averageLikes`, `averageComments`, `averageSaves`, `averageDanmaku` | Average likes, comments, saves and danmaku per video |
| `topPlayedVideo` | Most played video: `{videoId, url, title, plays, ...}` |
| `topInteractionVideo` | Video with the best interaction rate |
| `totalLikes` | Total likes received |
| `videoCount` | Videos published |
| `appPlayShare` | Share of plays on the mobile app as a fraction |
| `contentCategories` | Industries of past collaborations |
| `videoLengthShare` | Share of the UP host's videos by length, `{label, sharePct}` |
| `videoCategoryShare` | Share of the UP host's videos by Bilibili category, `{label, sharePct}` |
| `cooperationFormats` | Cooperation formats the UP host listed on the brand card |
| `wechat`, `qq` | WeChat ID and QQ number the UP host filled in for brands |
| `pet`, `maritalStatus`, `children`, `futurePlan`, `education`, `isStudying` | Card details the UP host filled in for brands |
| `isTimelyResponder` | Marked as replying to briefs promptly |
| `agencyId` | Agency ID |
| `signature` | Profile text |
| `dataDate` | Date of the statistics |

### How to use Bilibili Huahuo 花火 KOL Scraper

1. Open the Actor on Apify and go to the Input tab.
2. Choose a mode: **Find UP hosts** (`search`) or **UP host profiles** (`creator`).
3. For `search`, enter an optional keyword and set the category, follower range and sort. For `creator`, paste Bilibili UIDs or space.bilibili.com links.
4. Set **Max results** to cap the number of items, and with it your cost.
5. Click **Start** and wait for the run to finish.
6. Open the dataset (views "UP hosts" and "UP host profiles") and export it as JSON, CSV, Excel or another format.

### Input

| Field | Type | Required | What it does | Default |
|---|---|---|---|---|
| `mode` | string | Required | `search` (find UP hosts) or `creator` (UP host profiles) | `search` |
| `keyword` | string | Optional | Search term for `search` mode. Leave empty to browse UP hosts with the filters only | none |
| `searchBy` | string | Optional | `content` matches the keyword against what UP hosts publish; `nickname` matches their names | `content` |
| `category` | string | Optional | Only UP hosts in this Bilibili content category (values below) | `any` |
| `minFollowers` | integer | Optional | Only UP hosts with at least this many followers (minimum 0) | none |
| `maxFollowers` | integer | Optional | Only UP hosts with at most this many followers (minimum 0) | none |
| `sort` | string | Optional | Order of results: `relevance`, `followers`, `median-plays` or `interaction-rate` | `relevance` |
| `sortOrder` | string | Optional | `desc` (highest first) or `asc` (lowest first); ignored for `relevance` | `desc` |
| `creators` | array of strings | Needed for `creator` mode | Bilibili UIDs (the `userId` of a search result) or space.bilibili.com links, e.g. https://space.bilibili.com/647398719 | none |
| `maxResults` | integer | Optional | Maximum number of items in total for this run (1 to 5,000). You are charged per item returned | `20` |

Values for `category`: `any`, `entertainment`, `knowledge`, `film-tv`, `music`, `news`, `kichiku`, `documentary`, `games`, `lifestyle`, `chinese-animation`, `animation`, `sports`, `premium-content`, `tech`, `dance`, `cars`, `anime-series`, `animals`, `fashion`, `food`, `tv-series`.

`maxResults` is the total across all inputs in the run; a run stops as soon as it is reached. The `userId` of a search row is the UID to use in `creator` mode. An empty input `{}` runs in seconds and lists UP hosts with the default settings.

#### Example: food UP hosts with 100,000 to 300,000 followers

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

#### Example: look up UP hosts by nickname

```json
{
  "mode": "search",
  "keyword": "科技",
  "searchBy": "nickname",
  "maxResults": 20
}
```

#### Example: tech UP hosts with the highest interaction rate

```json
{
  "mode": "search",
  "category": "tech",
  "sort": "interaction-rate",
  "sortOrder": "desc",
  "maxResults": 40
}
```

#### Example: full profiles

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

### Output example

The values below are illustrative sample values, not a real UP host.

#### Search result (`creator`)

```json
{
  "type": "creator",
  "userId": "123456789",
  "url": "https://space.bilibili.com/123456789",
  "nickname": "示例美食UP主",
  "avatar": "https://example.com/avatar.jpg",
  "gender": "female",
  "region": "四川 成都",
  "category": "美食",
  "subCategory": "美食记录",
  "accountType": "agency",
  "agencyName": "示例MCN",
  "followers": 185000,
  "tags": ["美食", "探店"],
  "averagePlays": 120000,
  "medianPlays": 95000,
  "interactionRate": 0.035,
  "quotes": [{"type": "定制视频", "price": 12000.0, "discountPrice": 10800.0}],
  "followersGrowth": 3200,
  "followersGrowthPct": 1.76,
  "cpm": 113.68,
  "cpc": 2.4,
  "videos30d": 6,
  "videos90d": 17,
  "videos180d": 33,
  "hotVideos180d": 2,
  "sponsoredVideos": 14,
  "cooperationModes": ["定制视频"],
  "commerceEnabled": true,
  "isLive": false
}
```

#### Full profile (`creatorDetail`)

Audience lists are shortened here; real records hold one entry per label.

```json
{
  "type": "creatorDetail",
  "userId": "123456789",
  "url": "https://space.bilibili.com/123456789",
  "nickname": "示例美食UP主",
  "avatar": "https://example.com/avatar.jpg",
  "gender": "female",
  "region": "四川 成都",
  "category": "美食",
  "subCategory": "美食记录",
  "accountType": "agency",
  "agencyName": "示例MCN",
  "followers": 185000,
  "tags": ["美食", "探店"],
  "averagePlays": 120000,
  "medianPlays": 95000,
  "interactionRate": 0.035,
  "quotes": [{"type": "定制视频", "price": 12000.0, "discountPrice": 10800.0}],
  "signature": "记录日常美食",
  "totalLikes": 2400000,
  "videoCount": 260,
  "contentCategories": ["食品饮料"],
  "averageComments": 450,
  "averageSaves": 1800,
  "averageLikes": 5200,
  "averageDanmaku": 600,
  "appPlayShare": 0.86,
  "seedingCpm": 95.2,
  "medianInteractionRate": 0.031,
  "agencyId": 1001,
  "isTimelyResponder": true,
  "topPlayedVideo": {"videoId": "BV1xx411c7mD", "url": "https://www.bilibili.com/video/BV1xx411c7mD", "title": "示例视频标题", "plays": 980000},
  "topInteractionVideo": {"videoId": "BV1yy411c7mE", "url": "https://www.bilibili.com/video/BV1yy411c7mE", "title": "示例视频标题二", "plays": 310000},
  "dataDate": "2026-10-13",
  "wechat": null,
  "qq": null,
  "cooperationFormats": ["定制视频"],
  "pet": null,
  "maritalStatus": null,
  "children": null,
  "futurePlan": null,
  "education": null,
  "isStudying": null,
  "videoLengthShare": [{"label": "3-5分钟", "sharePct": 45.0}],
  "videoCategoryShare": [{"label": "美食", "sharePct": 88.5}],
  "fansInterestTags": [{"label": "美食", "count": 1200}],
  "viewersInterestTags": [{"label": "旅行", "count": 800}],
  "fansGender": [{"label": "女", "sharePct": 58.2}, {"label": "男", "sharePct": 41.8}],
  "fansAge": [{"label": "18-24", "sharePct": 41.0}],
  "fansDevice": [{"label": "iPhone", "sharePct": 38.0}],
  "fansRegion": [{"label": "广东", "sharePct": 12.4}],
  "fansCityTier": [{"label": "新一线", "sharePct": 27.1}],
  "viewersGender": [{"label": "女", "sharePct": 55.0}, {"label": "男", "sharePct": 45.0}],
  "viewersAge": [{"label": "18-24", "sharePct": 39.5}],
  "viewersDevice": [{"label": "Android", "sharePct": 52.0}],
  "viewersRegion": [{"label": "浙江", "sharePct": 9.8}]
}
```

### How much does it cost?

The Actor uses pay-per-event pricing. You pay only for these events:

| Event | When it is charged | Price (USD) |
|---|---|---|
| Run start (`run-start`) | Once per run, when the first request to the data source succeeds | $0.01 |
| UP host in a search (`result`) | Each `creator` record returned | $0.01 |
| Full profile (`detail`) | Each `creatorDetail` record returned | $0.04 |

Worked examples:

- 100 UP hosts from a search cost $0.01 + 100 x $0.01 = **$1.01**.
- 20 full profiles cost $0.01 + 20 x $0.04 = **$0.81**.
- A default search run (20 UP hosts) costs $0.01 + 20 x $0.01 = **$0.21**.

The start fee is charged once per run, when the first request to the data source succeeds, even if that request returns nothing. It is not charged when the data source fails from the start or rejects the IDs, or when your spending limit cannot cover it. 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.

On the free Apify plan, a run can make one data request: one page of search results or one creator profile. A search page holds 20 UP hosts, so a free-plan run returns at most 20 results in total. Any paid Apify plan removes the limit. On the free Apify plan each account can run this Actor up to 3 times per 24 hours and 10 times per 7 days, within a small lifetime free allowance shared across all our Actors, and all free accounts share a daily free budget. When any of these limits is reached, the run stops before fetching anything and nothing is charged.

### Use cases

- **Influencer sourcing**: shortlist UP hosts in a category and follower range with their price per video from `quotes`.
- **Campaign planning**: compare `medianPlays`, `cpm`, `cpc` and `interactionRate` across candidates before you book.
- **Audience matching**: check `fansAge`, `fansRegion`, `fansCityTier` and `viewersGender` against your target customers.
- **Rate benchmarking**: collect quotes for a category and follower band to see typical prices for custom videos and other formats.
- **Market research**: see who works with agencies (`accountType`, `agencyName`), which cooperation formats they offer and how many sponsored videos they have done.
- **Tracking creators over time**: schedule runs to follow `followersGrowth`, publishing activity and quote changes.

### Integrations and API

You can start runs through the Apify API, schedule them in Apify Console, and connect the results to webhooks and other Apify integrations. Each run writes its results to a dataset that you can read through the API or export.

Example with the Python `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("clover_folktale/huahuo-scraper").call(run_input={
    "mode": "search",
    "keyword": "美食",
    "category": "food",
    "minFollowers": 100000,
    "maxFollowers": 300000,
    "sort": "followers",
    "maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

A common workflow is to run `search` first, then pass the `userId` values of the UP hosts you like to a second run in `creator` mode to get their full profiles.

### Tips and limits

- A search page holds 20 UP hosts.
- Keyword search by content matches what the UP hosts publish; the result is the UP host, not the video. Use `searchBy: "nickname"` to look a UP host up by name.
- UP hosts without Huahuo access are skipped and not charged. If too many inputs return nothing, the run stops to protect your budget.
- The Actor retries empty pages on its own and stops cleanly instead of failing half-way.
- Quotes are in Chinese yuan (CNY); rates are fractions; fields ending in `Pct` are percentages.
- **Often empty fields:** `quotes` is empty for UP hosts who set no price. In search rows `medianPlays` can be 0 and `cpm`, `cpc` empty for new UP hosts. `agencyName` is a generic label for independent UP hosts. `wechat`, `qq` and the card fields (`pet`, `maritalStatus`, `children`, `futurePlan`, `education`) are empty unless the UP host filled them in.
- Profiles lack `followersGrowth`, `cpm`, `cpc` and the activity counts, which are search-only; search rows lack the audience lists.
- On the free Apify plan a run makes one data request (one search page or one profile). Any paid Apify plan removes the limit.
- Missing a field or a mode? Open an issue from the Actor page and it will be looked at.

### FAQ

#### Do I need a Bilibili account or login?

No. You need no Bilibili account, API keys, proxies or cookies. You only need an Apify account to run the Actor.

#### Is it legal to scrape Huahuo?

The Actor returns only what the marketplace shows about UP hosts: UID, name, avatar, region, quotes, performance figures and audience statistics, plus the contact handles and card details the UP hosts filled in themselves for brands. Nothing is collected from private accounts or messages. You are responsible for how you use the data, including contact details, and for following the laws and platform terms that apply to you.

#### How fresh is the data?

The data is requested when your run starts. Profiles include `dataDate`, the date of the statistics, so you can see how current the figures are.

#### Why are some fields empty?

Some fields depend on the UP host: `quotes` is empty if they set no price, and `wechat`, `qq` and the card fields are empty unless they filled them in. New UP hosts may have `medianPlays` of 0 and no `cpm` or `cpc`. Some fields exist only in search rows or only in profiles.

#### How many results can I get?

Up to 5,000 items per run, set with `maxResults`. On the free Apify plan a run returns at most 20 results (one search page or one profile).

#### Can I search without a keyword?

Yes. Leave `keyword` empty to browse UP hosts with the category, follower range and sort filters only.

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

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

#### What currency are the prices in?

UP host quotes, `cpm`, `cpc` and `seedingCpm` are in Chinese yuan (CNY). The Actor's own charges are in USD.

### More tools from the same developer

- [Bilibili B站 Scraper - Videos, Comments, Subtitles & User IDs](https://apify.com/clover_folktale/bilibili-scraper)
- [Xiaohongshu Pugongying 蒲公英 Scraper - KOL Search](https://apify.com/clover_folktale/pugongying-scraper)
- [Douyin Xingtu 巨量星图 Scraper - KOL Search & Rankings](https://apify.com/clover_folktale/xingtu-scraper)
- [Xiaohongshu 小红书 RedNote Scraper - Notes, Comments & User IP](https://apify.com/clover_folktale/xiaohongshu-scraper)
- [Douyin 抖音 Scraper - Videos, Comments, User IDs & IP Location](https://apify.com/clover_folktale/douyin-scraper)
- [Weibo 微博 Scraper - Posts, Comments, User IDs & IP Location](https://apify.com/clover_folktale/weibo-scraper)

# Actor input Schema

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

What to scrape: UP hosts matching a search, or full profiles of given UP hosts.

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

Search term. Optional: leave empty to browse UP hosts with the filters below only.

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

Match the keyword against what the UP hosts publish, or against their nicknames.

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

Only UP hosts in this Bilibili content category.

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

Only UP hosts with at least this many followers.

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

Only UP hosts with at most this many followers.

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

Order of the results.

## `sortOrder` (type: `string`):

Highest first or lowest first. Ignored for best match.

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

Bilibili UIDs (the userId of a search result) or space.bilibili.com links, e.g. https://space.bilibili.com/647398719.

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

Maximum number of items to return in total for this run. You are charged per item returned. On the free Apify plan a run returns at most 20 results in total; any paid Apify plan removes the limit.

## Actor input object example

```json
{
  "mode": "search",
  "searchBy": "content",
  "category": "any",
  "sort": "relevance",
  "sortOrder": "desc",
  "creators": [
    "647398719"
  ],
  "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": [
        "647398719"
    ]
};

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

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

```

## MCP server setup

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