Bilibili Scraper - Videos, Comments, Danmaku & Subtitles avatar

Bilibili Scraper - Videos, Comments, Danmaku & Subtitles

Pricing

from $3.80 / 1,000 result rows

Go to Apify Store
Bilibili Scraper - Videos, Comments, Danmaku & Subtitles

Bilibili Scraper - Videos, Comments, Danmaku & Subtitles

Bilibili scraper for videos, search, UP master profiles, comments, danmaku (弹幕) and subtitles. Clean English fields, ISO dates, full stats with coins and shares. Monitor new uploads. No login or cookies.

Pricing

from $3.80 / 1,000 result rows

Rating

0.0

(0)

Developer

Group Oject

Group Oject

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Bilibili Scraper

Bilibili Scraper pulls videos, search results, UP master (UP主) profiles, comments, danmaku (弹幕 bullet comments) and subtitles from Bilibili (哔哩哔哩, B站) as clean JSON. Every row has the same English field names, ISO 8601 dates, numeric counts and full URLs, so it drops straight into a spreadsheet, a database or an AI pipeline. No Bilibili account, cookies or login needed.

Bilibili Scraper output in Apify: video title, URL, uploader, views, likes, coins, favorites, shares, danmaku count and comment count

Real output from a default run of Bilibili Scraper in Apify Console.

What can it do?

  • Search Bilibili videos by keyword: sort by relevance, views, newest, danmaku or favorites; filter by length and publish date. Up to 1,000 videos per keyword (Bilibili's own limit).
  • Get full video details from a link or id: BV ids, av ids, desktop/mobile URLs, ?p= parts and b23.tv short links. You get views, likes, coins, favorites, shares, danmaku and comment counts, tags, partition (分区), part count and the uploader's follower count.
  • Scrape UP master profiles and uploads: followers, following, total likes, video count, level, verification (认证), VIP label, live room, plus every uploaded video, newest or most viewed first.
  • Scrape comments and replies: hot or newest first, pinned comments flagged, reply threads with the parent and root comment ids, likes, author level and IP region.
  • Scrape danmaku (弹幕): text, position in the video in seconds, display mode, colour and send time. Get one row per video (cheaper) or one row per bullet comment.
  • Get subtitles and transcripts (字幕): creator or AI-generated (ai-zh) subtitle tracks as timed segments plus the full text. Videos without subtitles cost nothing.
  • Track what is hot: Bilibili's popular (热门) feed and the trending search (热搜) keyword list.
  • Monitor new uploads: "Only new videos" remembers what earlier runs delivered, so a scheduled run returns (and charges for) new videos only.

What data do you get?

Every row has a dataType field: video, comment, user, danmaku, subtitle or trendingKeyword. The dataset has a tab for each type.

FieldTypeExample
bvid, aid, cidstringBV1chxT6xEyo, 117512402370778, 43092804680
urlstringhttps://www.bilibili.com/video/BV1chxT6xEyo
title, descriptionstringoriginal Chinese text
durationSecondsnumber263
publishedAtISO 86012026-10-27T10:34:07.000Z
ownerMid, ownerName, ownerUrl, ownerFollowersstring / numberUP master id, name, space URL, followers
views, likes, coins, favorites, shares, danmakuCount, commentCountnumberfull engagement stats
tagsstring[]["攻略", "单机游戏"]
coverUrlstringhttps cover image
categoryId, categoryNamenumber / stringBilibili partition, e.g. 单机游戏
parts, isOriginal, publishLocationnumber / boolean / string分P count, 自制 vs 转载, region
detailLevelstringfull (video's own record) or listing (search / list page)
source, searchQuery, positionstring / numberwhere the row came from and its rank

Comment rows add commentId, text, likes, replyCount, isReply, rootCommentId, parentCommentId, authorMid, authorName, authorLevel, location, isPinned, likedByUploader, pictures. User rows add followers, following, totalLikes, videoCount, level, isVerified, verificationTitle, vipLabel, liveRoomUrl, isLive. Danmaku rows add text, timeSeconds, timeFormatted, mode, color, sentAt (or an items array per video). Subtitle rows add language, isAiGenerated, segments[{start, end, text}] and fullText.

Search results and creator lists don't include coins and shares, so those fields are null there and never a made-up 0. Turn on Fetch full video details to fill them in.

How much does it cost?

You pay per result (Pay-Per-Event). Nothing is charged for errors, duplicates, skipped "already seen" videos or videos without subtitles.

EventPrice
Actor start$0.003 per run
Result row (any video, comment, reply, user, danmaku or trending row)$5.00 per 1,000
+ Video detail (videos mode, or "Fetch full video details")+$4.00 per 1,000 videos
+ UP master profile+$4.00 per 1,000 profiles
+ Danmaku, one row per video+$7.00 per 1,000 videos
+ Subtitle / transcript found+$22.00 per 1,000 transcripts

On paid Apify plans the per-row price drops automatically (Bronze and above get volume discounts); the Pricing tab shows your exact rate.

Examples:

  • 500 search results for two keywords: $0.003 + 500 × $0.005 = $2.50.
  • One video deep-dive (details, 100 comments with 300 replies, the danmaku pool and the transcript): $0.003 + $0.009 + 400 × $0.005 + $0.012 + $0.027 = $2.05.
  • Daily monitor of one keyword that finds about 30 new videos a day: about $0.15 a day.

Set a maximum charge per run in the run options; the Actor stops cleanly when it gets there and keeps everything it collected.

How to use it

  1. Open the Actor and pick What to scrape (the default, Popular videos, finishes in a few seconds).
  2. Fill the field for that mode: keywords, video links, or UP master UIDs / space URLs.
  3. Set Max results per input, plus any filters and extras (comments, danmaku, subtitles).
  4. Click Start. Download the results as JSON, CSV, Excel or HTML, or read them through the API.
  5. For monitoring, turn on Only new videos, give the monitor a state key, and add a schedule.

Input example

{
"mode": "search",
"searchQueries": ["黑神话悟空", "Genshin Impact"],
"sortBy": "newest",
"publishedAfter": "7 days",
"maxResults": 100,
"fetchFullDetails": true,
"includeComments": true,
"maxCommentsPerVideo": 20,
"onlyNew": true,
"stateKey": "game-launch-monitor"
}

Output example

{
"dataType": "video",
"bvid": "BV1chxT6xEyo",
"aid": "117512402370778",
"cid": "43092804680",
"url": "https://www.bilibili.com/video/BV1chxT6xEyo",
"title": "奶奶的皱纹里,藏着我一生的甜与暖",
"description": "",
"durationSeconds": 263,
"publishedAt": "2026-10-27T10:34:07.000Z",
"ownerMid": "239555119",
"ownerName": "Example UP master",
"ownerUrl": "https://space.bilibili.com/239555119",
"ownerFollowers": 47875,
"views": 1466192,
"likes": 170483,
"coins": 78035,
"favorites": 12144,
"shares": 1185,
"danmakuCount": 2028,
"commentCount": 7963,
"tags": ["奶奶带大的孩子", "隔辈亲"],
"coverUrl": "https://i0.hdslb.com/bfs/archive/example.jpg",
"categoryId": 2154,
"categoryName": "剧情演绎",
"parts": 1,
"isOriginal": false,
"publishLocation": "浙江",
"detailLevel": "full",
"source": "popular",
"searchQuery": null,
"position": 1,
"scrapedAt": "2026-10-28T20:08:42.174Z"
}
{
"dataType": "subtitle",
"bvid": "BV17Z421K7ib",
"videoUrl": "https://www.bilibili.com/video/BV17Z421K7ib",
"title": "Example walkthrough, part 1",
"language": "ai-zh",
"languageName": "中文",
"isAiGenerated": true,
"availableLanguages": ["ai-zh"],
"segmentCount": 950,
"durationSeconds": 3172.04,
"fullText": "大家好\n我是…",
"segments": [{ "start": 1.54, "end": 1.9, "text": "大家好" }]
}

Use with the API

cURL (run and get the items in one call):

curl -X POST "https://api.apify.com/v2/acts/groupoject~bilibili-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","searchQueries":["原神"],"maxResults":50,"sortBy":"newest"}'

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("groupoject/bilibili-scraper").call(run_input={
"mode": "comments",
"videoUrls": ["https://www.bilibili.com/video/BV1chxT6xEyo"],
"maxResults": 200,
"includeReplies": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["dataType"], item.get("text") or item.get("title"))

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('groupoject/bilibili-scraper').call({
mode: 'user',
userIds: ['https://space.bilibili.com/546195'],
maxResults: 30,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use with AI agents (MCP)

Add the Actor to Claude, Cursor or any MCP client through the Apify MCP server: https://mcp.apify.com?tools=groupoject/bilibili-scraper

Example prompt: "Use the Bilibili Scraper to get the transcript and top 50 comments of BV1g1C6Y2Ef3, then summarise what viewers liked."

Integrations

Send results to Google Sheets, Make, Zapier, n8n, Slack or your own webhook when a run finishes. Pair "Only new videos" with an Apify schedule to get a daily feed of new uploads for a keyword or a creator.

FAQ

The Actor reads only public data that any visitor can see without logging in: videos, public profiles, comments, danmaku and subtitles. It doesn't access accounts or private content. Personal data in comments (user names, regions) can still fall under laws such as GDPR or China's PIPL, so use it for legitimate purposes and check with your lawyer if you're unsure.

Do I need a Bilibili account, cookies or proxies?

No. Everything works without login or cookies, and you don't need to configure proxies.

How many results can I get?

Bilibili returns at most 1,000 videos per search keyword; use several keywords or date ranges for more. Creator uploads go back up to 2,500 videos per UP master. Comments and replies page until the thread ends or your limit. Danmaku come from the pool Bilibili serves, usually the latest 1,000–8,000 depending on video length.

Why are coins or shares empty for some videos?

Search results and creator lists don't carry coins and shares. Turn on Fetch full video details, or use videos or popular mode, to get them.

Why did a video give no subtitles?

Many Bilibili videos have no subtitle track (music, gameplay without talking, older uploads). Those videos are listed in the ERRORS record with NO_SUBTITLES and are not charged.

How fast is it?

About 1–3 seconds per page of 20–50 results. A 1,000-video search takes well under a minute. Subtitle lookups are slower (5–15 seconds each), so the Actor runs several in parallel.

How do I monitor new videos every day?

Pick search or user mode, set sort order to Newest, turn on Only new videos, choose a state key, and create a schedule. Each run returns only videos that earlier runs haven't delivered.

Why did my run stop early?

It stops cleanly when it reaches your maximum charge, gets close to the run timeout, or keeps paying for data lookups that return nothing (for example, a long list of videos that all lack subtitles). The SUMMARY record explains which one happened, and every row collected up to that point is kept.