# Bilibili Scraper 📺 (videos, creators, trending) (`tagadanar/bilibili-scraper`) Actor

Bilibili (哔哩哔哩) videos by keyword with plays, danmaku, likes, favorites, comments, tags and author; creator profiles with followers and their full upload list; the Popular and Ranking lists. Filters by sort, length, category and date. Only-new monitor mode. No login.

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

## Pricing

from $2.80 / 1,000 video or creators

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 Scraper: videos, creators (UP主) and trending lists to JSON

Get **Bilibili (哔哩哔哩, B站)** data as clean rows: videos for any search term with plays, danmaku, likes, favorites, comments, length, publish date, tags and the author; creator (UP主) profiles with followers, uploads, total likes, level and verification; a creator's complete upload list, newest first; and the site's **Popular now (热门)** and **Ranking (排行榜)** lists by category.

Filter searches the way the site does: most played, newest, most danmaku or most favorites, video length, category (分区) and a published date range. Run it on a schedule in **only-new mode** and each run returns just the videos you have not seen before.

$4.00 per 1,000 rows on the Free plan (less on paid plans), platform usage included. Full video details cost nothing extra. No login, no cookies or API key to supply.

### What you can collect

| You give | You get |
| --- | --- |
| Search terms (原神, 美食, minecraft, iPhone) | Videos matching each term, up to 1,000 per search, sorted and filtered as you choose |
| Search terms with Search for = Creators | Creator accounts matching each term, with followers, uploads, level and their latest videos |
| Creator UIDs or space links | One profile row per creator, and with the uploads option, every public video they posted |
| Video links, b23.tv short links, BV or av IDs | One full row per video |
| Trending list = Popular now or Ranking | The 热门 feed, or the top 100 for a category |

#### How it compares

| | This actor | Typical Bilibili scraper on the Store |
| --- | --- | --- |
| Price per 1,000 rows | $4.00, details included | $4.50 to $20 |
| Creator uploads | the full upload list (937 of 951 for one large creator in our test), newest first, date range applied | often the ~20 newest, found through a name search |
| Search filters | sort, length, category, published date range | usually sort and dates |
| Trending | Popular now and the Ranking top 100 per category | varies |
| Monitor mode (only new) | yes | varies |

### Output

Every row has a `type`: `video` or `creator`. Fields a source does not carry are `null`, never guessed.

#### Video rows

| Field | Description |
| --- | --- |
| `bvid`, `aid`, `url` | The BV ID, the older av ID and the video page |
| `title`, `description` | Title (search highlighting removed) and description |
| `authorName`, `authorMid`, `authorUrl` | The uploader (UP主), their UID and space page |
| `authorFollowers` | The uploader's follower count (with details on, for video links and for creator uploads) |
| `viewCount`, `danmakuCount`, `likeCount`, `favoriteCount`, `commentCount` | Plays (播放), danmaku (弹幕), likes (点赞), favorites (收藏), comments (评论) |
| `coinCount`, `shareCount` | Coins (投币) and shares (分享): Popular, Ranking, video links, or any row with details on |
| `durationSeconds`, `durationText` | Length, e.g. `482` and `8:02` |
| `publishedAt` | Publish time, ISO in UTC |
| `category`, `categoryId` | The zone (分区), e.g. `美食记录` and its tid |
| `tags` | The video's tags |
| `thumbnailUrl` | Cover image |
| `partsCount`, `isOriginal` | Number of parts (分P) and original (自制) or repost (转载), when the source says |
| `search`, `rank`, `scrapedAt` | Which of your searches or lists found it, its position there, and when |

Creator upload rows carry plays, length, date, description and cover; turn on details for likes, coins, comments and tags.

#### Creator rows

| Field | Description |
| --- | --- |
| `mid`, `url`, `name` | UID, space page and name |
| `followers`, `following` | Followers (粉丝) and accounts followed (关注; profile rows and creator searches with details on) |
| `videosCount`, `likesCount` | Uploads (投稿) and total likes received (获赞; profile rows and with details on) |
| `level`, `verified`, `verifiedType`, `verifiedTitle` | Account level 0 to 6 and Bilibili verification (personal or organization, with its title) |
| `sign`, `bioEmails` | The bio (签名), and any email address the creator published there for business (商务合作) |
| `isLive`, `liveRoomId` | Live right now, and the live room (creator search) |
| `avatarUrl`, `recentVideos` | Avatar, and the latest videos the creator search shows for them |

#### Example video row (real, 2026-10-21, details on)

```json
{
  "type": "video",
  "bvid": "BV1gorgBJEu4",
  "aid": 115868067430767,
  "url": "https://www.bilibili.com/video/BV1gorgBJEu4/",
  "title": "spizee吃我的世界食物3",
  "authorName": "大硕卢克儿",
  "authorMid": 197898030,
  "authorUrl": "https://space.bilibili.com/197898030",
  "authorFollowers": 5580,
  "viewCount": 38876,
  "danmakuCount": 52,
  "likeCount": 290,
  "coinCount": 31,
  "favoriteCount": 434,
  "shareCount": 4,
  "commentCount": 11,
  "durationSeconds": 482,
  "durationText": "8:02",
  "publishedAt": "2026-01-10T00:56:19.000Z",
  "category": "美食记录",
  "categoryId": 215,
  "tags": ["我的世界", "鸡蛋", "Vlog"],
  "thumbnailUrl": "https://i1.hdslb.com/bfs/archive/f23fce6fef91bd5bc200c3034fe4154e11ea39aa.jpg",
  "partsCount": 1,
  "isOriginal": false,
  "search": "videos \"minecraft\"",
  "rank": 3,
  "scrapedAt": "2026-10-21T12:55:44.989Z"
}
```

#### Example creator row (real, 2026-10-21, bio and some fields left out)

```json
{
  "type": "creator",
  "mid": 946974,
  "url": "https://space.bilibili.com/946974",
  "name": "影视飓风",
  "followers": 18674911,
  "following": 686,
  "videosCount": 951,
  "likesCount": 129621379,
  "level": 6,
  "verified": true,
  "verifiedType": "personal",
  "verifiedTitle": "2025百大UP主、2023年度最高人气奖UP主、课堂优质讲师",
  "avatarUrl": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg"
}
```

### Input

| Field | What it does |
| --- | --- |
| `searchQueries` | Search terms, one per line, Chinese or English. Each line is its own search |
| `searchType` | `videos` (default) or `creators` |
| `sort` | `relevance`, `views` (most played), `newest`, `danmaku`, `favorites`; for creator searches `relevance` or `followers` |
| `duration` | `any`, `under10`, `10to30`, `30to60`, `over60` (minutes) |
| `category` | A zone for video searches and for the Ranking list: `gaming`, `knowledge`, `tech`, `food`, `music`, `dance`, `animation`, `sports`, `cars`, `life`, `animals`, `kichiku`, `fashion`, `entertainment`, `film`, or `all` |
| `publishedAfter`, `publishedBefore` | A date range (`2026-10-01`) or a relative window (`7 days`, `3 months`), China time. Applies to video searches and creator uploads |
| `trending` | `off`, `popular` (热门) or `ranking` (top 100 for `category`) |
| `videoUrls` | Video pages, b23.tv short links, BV or av IDs |
| `creators` | Creator UIDs or space.bilibili.com links |
| `includeCreatorVideos` | Also list each creator's uploads, newest first |
| `maxResults` | Rows per search, list or creator (default 100, up to 1,000) |
| `includeDetails` | Open each row for coins, shares, all tags and follower counts |
| `onlyNew` | Skip anything an earlier run already delivered |

#### Examples

The newest food videos under 10 minutes from the last week:

```json
{ "searchQueries": ["美食", "探店"], "sort": "newest", "duration": "under10", "publishedAfter": "7 days", "maxResults": 200 }
```

The most played Genshin Impact videos in the gaming zone, with coins, shares and tags:

```json
{ "searchQueries": ["原神"], "sort": "views", "category": "gaming", "includeDetails": true, "maxResults": 100 }
```

Creators for an influencer list, biggest first:

```json
{ "searchQueries": ["数码测评", "科技"], "searchType": "creators", "sort": "followers", "maxResults": 50 }
```

A competitor's channel: profile plus everything posted since September, checked daily for new uploads:

```json
{ "creators": ["https://space.bilibili.com/946974"], "includeCreatorVideos": true, "publishedAfter": "2026-09-01", "onlyNew": true, "maxResults": 1000 }
```

Today's tech ranking and a few videos you already know:

```json
{ "trending": "ranking", "category": "tech", "videoUrls": ["https://www.bilibili.com/video/BV1xrnz6gEVD/", "https://b23.tv/BV1Lxnn6BEZK"] }
```

### Who uses it

- Brands and agencies entering China: find the UP主 who cover your category, size them by followers and engagement, and pick up the business email many creators publish in their bio.
- Market and trend research: what is trending in a zone today, which topics get the most danmaku, how a product launch played on Bilibili.
- Competitor tracking: a rival creator's full upload history with plays per video, then only the new uploads every day.
- Data and AI teams: Chinese video titles, descriptions and tags at scale, with engagement numbers.

### Pricing

$4.00 per 1,000 rows on the Free plan ($3.60 Bronze, $3.20 Silver, $2.80 Gold), plus $0.001 per run to start. A row is one video or one creator. Platform usage is included and full details cost nothing extra. Searches with no results and links that no longer exist cost nothing beyond the run start. You can cap spend with Apify's maximum charge per run: the run stops cleanly when it is reached.

### FAQ

**Do I need a Bilibili account, cookie or API key?** No. The actor reads the public data Bilibili shows to visitors who are not logged in.

**Why at most 1,000 videos per search?** Bilibili's own search stops at 50 pages of 20. To go further, split a topic by published date (one month per run, or several date ranges across runs), by category or by video length.

**Why does a sorted search over an old date range return so few videos?** That is how Bilibili's own search behaves: with Most played or Newest and a range such as "before 2017", the site returns a few dozen videos where Relevance returns hundreds (猫 before 2017, 10 to 30 minutes: 3 by most played, 498 by relevance on 2026-10-21). Keep the sort on Relevance for wide date-range pulls. Every row is checked against your date range and length before it is delivered.

**How do I get all videos of one creator?** Put the creator's UID or space link in `creators` and turn on `includeCreatorVideos`. You get their public uploads newest first; add `publishedAfter` to stop at a date.

**What is the difference between search rows and detail rows?** Search rows already carry plays, danmaku, likes, favorites, comments, length, date and tags. Details add coins, shares, the full tag list, the part count, original or repost, and the uploader's follower count. Turn on `includeDetails` when you need those; it is slower (one request per row) but the price is the same.

**Can I search in English?** Yes. Bilibili's search matches Chinese and Latin text; Chinese terms usually return far more.

**Does it get comments or danmaku text?** Not in this version. You get the comment and danmaku counts for every video.

**Why fewer rows than I asked for?** The run's status message names the reason: the list ended, Bilibili's 1,000-result cap, your date range, links that no longer exist, or the run time limit.

**How does only-new mode work?** The actor keeps the IDs it has delivered in a key-value store named `bilibili-scraper-seen` in your account. Schedule the same input and each run returns only videos and creators it has not delivered before. Delete the store to start over.

### Related actors

- [YouTube Search Scraper](https://apify.com/tagadanar/youtube-search-scraper): YouTube videos for any search, with views, length, channel and upload date.
- [Dailymotion Scraper](https://apify.com/tagadanar/dailymotion-scraper): Dailymotion videos and channels by keyword, with views, likes and followers.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/bilibili-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

What you would type in Bilibili's search box, in Chinese or English (for example 原神, 美食, minecraft, iPhone 18). One per line; each line is its own search. Leave empty if you only want video links, creators or a trending list.

## `searchType` (type: `string`):

Videos (视频) or creators (UP主, user accounts) matching your search terms.

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

Bilibili's own search orders. Video searches: relevance, most played, newest, most danmaku or most favorites. Creator searches: relevance or most followers.

## `duration` (type: `string`):

Only videos of this length (Bilibili's search filter).

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

Narrows video searches to one Bilibili zone, and picks the zone for the Ranking list.

## `publishedAfter` (type: `string`):

Only videos published on or after this date: 2026-10-01, or a relative window like 7 days, 2 weeks, 3 months. Applies to video searches and creator uploads. China time (UTC+8), as on the site.

## `publishedBefore` (type: `string`):

Only videos published on or before this date (2026-10-15). Combine with Published after to walk a big topic one period at a time past the 1,000-result search limit.

## `trending` (type: `string`):

Also collect one of Bilibili's trending lists. Popular now is the site's 热门 feed; Ranking is the site's top 100 (排行榜) for the category chosen above.

## `videoUrls` (type: `array`):

Bilibili video pages (https://www.bilibili.com/video/BV1xDnw6zEaJ/), b23.tv short links, or bare BV / av IDs. Each returns one full row: plays, likes, coins, favorites, shares, comments, danmaku, tags and the author's follower count.

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

Creator IDs (UID, the number in https://space.bilibili.com/946974) or their space links. Each returns a creator row: name, followers, following, uploads, total likes, level, verification and bio.

## `includeCreatorVideos` (type: `boolean`):

List the videos uploaded by each creator above, newest first, up to Max results per creator (the published date range applies). Upload rows carry plays, length, date and description; turn on details for likes, coins, comments and tags.

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

Stop each search, trending list or creator's uploads after this many rows. You only pay for rows delivered. Bilibili shows at most 1,000 results per search.

## `includeDetails` (type: `boolean`):

Open every video for coins, shares, the full tag list, part count, original or repost, and the author's follower count (search rows already carry plays, danmaku, likes, favorites and comments). For creator searches, adds following count and total likes. One extra request per row, so slower; same price per row.

## `onlyNew` (type: `boolean`):

Skip any video or creator an earlier run of this scraper already delivered to your account, so a scheduled run returns only new uploads. The memory is a key-value store named bilibili-scraper-seen in your account; delete it to start over.

## Actor input object example

```json
{
  "searchQueries": [
    "minecraft"
  ],
  "searchType": "videos",
  "sort": "relevance",
  "duration": "any",
  "category": "all",
  "trending": "off",
  "includeCreatorVideos": false,
  "maxResults": 20,
  "includeDetails": false,
  "onlyNew": false
}
```

# Actor output Schema

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

One item per Bilibili video or creator in the default dataset.

# 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 = {
    "searchQueries": [
        "minecraft"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/bilibili-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 = {
    "searchQueries": ["minecraft"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/bilibili-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 '{
  "searchQueries": [
    "minecraft"
  ],
  "maxResults": 20
}' |
apify call tagadanar/bilibili-scraper --silent --output-dataset

```

## MCP server setup

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