Bilibili Scraper - Videos, Comments, Channels & Stats
Pricing
from $7.00 / 1,000 video delivereds
Bilibili Scraper - Videos, Comments, Channels & Stats
Scrape Bilibili (哔哩哔哩) videos by keyword (sort newest first, date filters), channel uploads, video URLs or trending by category, plus full comment threads with replies: views, likes, coins, danmaku, tags. No login. US$ 10 per 1,000 videos or comments.
Pricing
from $7.00 / 1,000 video delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Bilibili Scraper: Videos, Comments, Channels and Stats
Bilibili scraper that collects videos from Bilibili (哔哩哔哩, B站) by keyword, a creator's full channel uploads, a list of video URLs or the trending board (all, or one category such as gaming or tech), with views, likes, coins, favorites, shares, danmaku count, comment count, tags, duration and publish date. It also exports the full comment threads of any video (paged well past the first page, with replies), and the danmaku (弹幕, bullet comments), one row per danmaku with the second it appears at, or one danmaku reaction profile per video.
Search results can be sorted newest first (sortOrder: "pubdate") and filtered by publish date and duration, so a keyword becomes a feed of new uploads.
For game, anime and consumer brands tracking the Chinese video market, agencies vetting creators (UP主 / KOL) before a campaign, and researchers building datasets of Chinese video content. AI agents can call it through the Apify MCP server.
At a glance
- Price per 1,000 videos, Free plan: US$ 10.00
- Price per 1,000 videos, Gold plan and above: US$ 7.00
- Video stats (views, likes, coins, favorites, shares, danmaku, comments, tags): yes
- Full channel upload list, page by page: yes (500 videos in one test run)
- Danmaku text, one row per danmaku (every 6-minute segment, not only the capped pool): yes, currently free
- Danmaku reaction profile per video: yes, currently free
- Comments with replies, paged (800 in a row from one video in our test), newest first or hot: yes, same price as a video
- Search sorted by newest first (
pubdate), most views, danmaku, favorites or comments; date and duration filters: yes - Trending by category (gaming, music, tech, food...), with rank position: yes
- Creator profile rows (
user_profile): yes
Failed videos and closed comment sections are free. 30 videos cost US$ 0.09; 30 videos with 20 comments each cost US$ 1.89.
Quick start
Minimal input:
{"mode": "search","searchQuery": "minecraft","maxResults": 30}
All uploads of a channel:
{"mode": "user_videos","userIds": ["https://space.bilibili.com/546195"],"maxResults": 200}
One real item from a user_videos run for channel 546195:
{"type": "video","bvid": "BV1iyJV6EEao","aid": 116738150636498,"title": "我找东西be like","description": "游戏:掘地求狗","url": "https://www.bilibili.com/video/BV1iyJV6EEao","thumbnailUrl": "https://i0.hdslb.com/bfs/archive/3f5eaaafe18db626804778a2b5f1fc6c86f69d7b.jpg","duration": 1331,"durationFormatted": "22:11","viewCount": 4970226,"likeCount": 254437,"coinCount": 72425,"favoriteCount": 68157,"shareCount": 5469,"danmakuCount": 10075,"replyCount": 2595,"authorName": "老番茄","authorMid": 546195,"channelUrl": "https://space.bilibili.com/546195","publishDate": "2026-06-13T03:35:00+00:00","publishTimestamp": 1781321700,"category": null,"tags": ["推荐宝藏游戏", "实况解说", "游戏实况", "老番茄", "掘地求狗"],"pages": 1,"source": "channel:546195","error": null,"errorCode": null,"scrapedAt": "2026-09-13T01:30:39+00:00"}
Items that are not charged (they have error and errorCode filled in):
errorCode | Meaning |
|---|---|
VIDEO_NOT_FOUND | The video was removed or never existed. |
VIDEO_NOT_VISIBLE, VIDEO_UNDER_REVIEW, VIDEO_UNAVAILABLE | Private, still in review, or refused by Bilibili. |
INVALID_VIDEO_ID, INVALID_CHANNEL_ID | The input is not a video or channel reference. |
CHANNEL_NOT_FOUND, CHANNEL_UNAVAILABLE | The channel does not exist or hides its uploads. |
DETAILS_UNAVAILABLE | Listed on a channel but without a public video page (paid courses); list data is kept. |
NO_RESULTS | The keyword or channel returned no videos. |
BLOCKED | Bilibili refused every retry. Run again. |
SEARCH_UNAVAILABLE, POPULAR_UNAVAILABLE | Bilibili answered that search or the trending board with an unexpected code; the rest of the run still delivers. |
NO_DATA | Bilibili answered with a body this Actor cannot read. Only that request is lost, not the run. |
ITEM_UNREADABLE | One video came in a shape this Actor cannot read. Only that video is lost, and it is not charged. |
UNEXPECTED | Something unforeseen broke while scraping that keyword, channel or video. The request is lost, the run keeps whatever it already delivered, and nothing extra is charged. |
Modes
mode | You send | You get |
|---|---|---|
search | searchQuery and optional searchQueries | videos for each keyword; past Bilibili's 1,000-result cap the Actor continues by 30-day windows, up to maxResults (5,000) |
user_videos | userIds: numeric id (mid) or space.bilibili.com/<mid> URL | the channel's uploads, newest first, page by page |
user_profile | userIds | one row per channel (UP主): followers, following, video count, total likes, level, official verification |
video_detail | videoUrls: video URLs, b23.tv short links, BV... or av... ids | one item per video |
video_comments | videoUrls | the comments of each video, one row each, up to maxComments per video (with includeReplies, the replies too) |
popular | nothing, or category | Bilibili's trending board (about 100 videos at a time), or the ranking of one category (up to 100) |
danmaku | videoUrls | every danmaku of each video, one row each, up to maxDanmakuPerVideo |
includeDanmaku works in every mode and adds one danmaku_profile row after each video. includeComments works in search, user_videos, popular and video_detail and adds the comments of each video right after it.
If mode is missing or does not match the data you sent (common in API calls), the Actor picks the mode from the data: video URLs mean video_detail, channel ids mean user_videos, keywords mean search.
What data you get
One item per video. Fill rates come from real runs with includeDetails on: a keyword search (30 videos), a channel (30 videos) and the trending board (100 videos).
| Field | Type | Example | Search | Channel | Trending |
|---|---|---|---|---|---|
type | string | "video" | 100% | 100% | 100% |
bvid | string | "BV1iyJV6EEao" | 100% | 100% | 100% |
aid | number | 116738150636498 | 100% | 100% | 100% |
title | string | video title, original language | 100% | 100% | 100% |
description | string | uploader's description | 93% | 100% | 83% |
url | string | video page | 100% | 100% | 100% |
thumbnailUrl | string | cover image | 100% | 100% | 100% |
duration | number | 1331 (seconds) | 100% | 100% | 100% |
durationFormatted | string | "22:11" | 100% | 100% | 100% |
viewCount | number | 4970226 | 100% | 100% | 100% |
likeCount | number | 254437 | 100% | 100% | 100% |
coinCount | number | 72425 (coins given by viewers) | 100% | 100% | 100% |
favoriteCount | number | 68157 | 100% | 100% | 100% |
shareCount | number | 5469 | 100% | 100% | 100% |
danmakuCount | number | 10075 (bullet comments) | 100% | 100% | 100% |
replyCount | number | 2595 (comments) | 100% | 100% | 100% |
authorName | string | channel name | 100% | 100% | 100% |
authorMid | number | channel id | 100% | 100% | 100% |
channelUrl | string | space.bilibili.com/<mid> | 100% | 100% | 100% |
publishDate | string | ISO date in UTC | 100% | 100% | 100% |
publishTimestamp | number | Unix seconds | 100% | 100% | 100% |
category | string | "单机游戏" | 100% | empty | 100% |
tags | array | video tags | 100% | 100% | 99% |
pages | number | number of parts in the video | 100% | 100% | 100% |
source | string | "search:minecraft", "channel:546195", "popular", "video" | 100% | 100% | 100% |
subtitleStatus | string | OK, LOGIN_REQUIRED, NONE, NO_CID, BLOCKED | with includeSubtitles | ||
subtitles | array | {language, languageName, isAiGenerated, text, segments} | with includeSubtitles | ||
error, errorCode | string | see the table above | on errors | on errors | on errors |
scrapedAt | string | ISO timestamp | 100% | 100% | 100% |
authorName and authorMid are the public channel that uploaded the video. Category rankings add rankPosition (1 to 100) and rankScore.
Comment rows
With mode: "video_comments", or includeComments in the other modes, each comment is one row. Row from a trending video on 2026-10-08 (comment text and name elided here):
{"type": "comment","commentId": 320059710976,"text": "...","likeCount": 88,"replyCount": 8,"createdAt": "2026-10-08T09:41:51+00:00","createdTimestamp": 1791452511,"authorName": "...","authorLevel": 6,"isThreadReply": false,"rootCommentId": null,"parentCommentId": null,"isPinned": null,"videoBvid": "BV1BsHQ6YEQy","videoAid": 117404390659304,"videoUrl": "https://www.bilibili.com/video/BV1BsHQ6YEQy","source": "https://www.bilibili.com/video/BV1BsHQ6YEQy"}
Of the person who commented, only authorName and authorLevel are returned, as Bilibili shows them next to the comment. The Actor does not collect commenters' user ids, avatars, gender, bio, location or follower lists.
What includeDetails adds: search lists do not include coins, shares or full tags, and channel lists do not include likes, coins, favorites, shares or tags. With includeDetails on (default) each video is opened to add them, at the same price. Turn it off for faster runs when views, danmaku and comment counts are enough.
Use cases
- Track a game, brand or product launch: search the Chinese and English names with
sortOrder: "pubdate"and apubtimeBegindate, and compare views, coins and danmaku day by day. - Vet creators before a campaign: pull a creator's uploads with
user_videosand compare likes, coins and favorites per video (coins are a strong signal: viewers have few to give). - Monitor competitor channels: several ids in
userIds, a smallmaxResultsandonlyNewVideoson a schedule. - Build a trending dataset: schedule
populara few times a day and keepbvid,category,tagsand stats.
Schedule it daily
Turn on onlyNewVideos, save the input as a Task and attach a daily Schedule:
{"mode": "search","searchQuery": "原神","sortOrder": "pubdate","maxResults": 200,"onlyNewVideos": true}
- The first run delivers up to
maxResultsvideos. Every run after that delivers, and charges, only the videos that were not delivered before. A day with nothing new costs nothing for results. - Memory is kept per keyword (with its sort, duration and date filters), per channel and for the trending board, in a Key-Value Store named
bilibili-scraper-only-new-videosin your own account. Delete a record, or the store, to start over. - Channels and searches sorted by
pubdatestop reading at the first video already delivered, so a daily check is a single request when nothing changed. - Connect Slack, e-mail or Google Sheets to the Task and new videos land where you read them.
AI agents
An agent can answer "what are the most viewed Bilibili videos about Black Myth: Wukong this month" by calling this Actor through the Apify MCP server with searchQuery, sortOrder: "click" and a date range.
Input guide
Search
| Field | Values | Notes |
|---|---|---|
searchQuery | "原神", "minecraft" | Chinese and English both work |
searchQueries | more keywords | duplicates across keywords are removed |
sortOrder | totalrank (relevance), click (most views), pubdate (newest), dm (most danmaku), stow (most favorites), scores (most comments) | default totalrank |
durationFilter | any, short (under 10 min), medium (10 to 30), long (30 to 60), verylong (over 60) | default any |
pubtimeBegin, pubtimeEnd | YYYY-MM-DD | China time (UTC+8), both inclusive; one side alone also works |
{"mode": "search","searchQueries": ["黑神话悟空", "black myth wukong"],"sortOrder": "click","durationFilter": "medium","pubtimeBegin": "2026-06-01","pubtimeEnd": "2026-09-01","maxResults": 200}
Channel uploads
userIds takes the numeric id (the number in space.bilibili.com/546195) or the full URL. The Actor reads the channel's upload list 50 videos per page, newest first, until maxResults or the end of the channel.
Video details
videoUrls takes bilibili.com/video/... URLs, b23.tv short links, BV ids (BV1P4YX63Eej) or av ids (av117257959120137). Send as many as you like and set maxResults at least as high as the number of videos, because maxResults (default 30) is the run total in this mode.
Trending
popular needs no other field. The board holds about 100 videos at any moment. Add category (animation, music, dance, game, knowledge, tech, sports, car, life, food, animal, fashion, entertainment, kichiku, cinephile, or ranking for the overall top 100) to get Bilibili's ranking of that zone instead, up to 100 videos with rankPosition and rankScore. A zone number also works ("category": "4" for gaming).
{"mode": "popular","category": "game","maxResults": 50}
Comments
{"mode": "video_comments","videoUrls": ["https://www.bilibili.com/video/BV1P4YX63Eej"],"maxComments": 200,"sortComments": "time","includeReplies": true}
maxComments(default 20, up to 5,000) is the most comment rows per video, replies included. Bilibili serves 20 per page and the Actor keeps paging: 800 comments in a row from one video in our test on 2026-10-08.sortComments:hot(Bilibili's own order, default),time(newest first, the one for monitoring) orlikes(the hot order sorted by likes).includeReplies: each reply becomes its own row withisThreadReply: trueandrootCommentId.- Comments of every video in a search, channel or trending run: add
"includeComments": trueto that input. - A video with comments closed, or removed, returns one free row with
errorCodeCOMMENTS_CLOSEDorVIDEO_NOT_FOUND; a video with no comments returnsNO_COMMENTS.
Danmaku (弹幕)
Danmaku are the short comments that fly across a Bilibili video, each tied to a second of it. They are anonymous on screen, and this Actor keeps them that way: no sender id, hash, name or avatar in any row.
{"mode": "danmaku","videoUrls": ["https://www.bilibili.com/video/BV1P4YX63Eej"],"maxDanmakuPerVideo": 1000}
Each row: bvid, part, videoTitle, danmakuId, text, videoTime (seconds), videoTimeFormatted, sentAt, displayMode (scroll, top, bottom), fontSize, color and pool. Rows come ordered by videoTime. The Actor reads both of Bilibili's public danmaku sources and removes duplicates: the capped pool the player loads first, and the 6-minute segments. On long videos the segments hold far more than the pool: in a test on 2026-09-27, a 2 h 10 min video gave 9,600 danmaku from the pool and 43,377 from the segments. Multi-part videos are read part by part until maxDanmakuPerVideo.
Profile instead of rows: turn on includeDanmaku in any mode. Each video then gets one danmaku_profile row with danmakuFetched, danmakuTotal (the video's own count), danmakuPoolCapped, danmakuUniqueSenders (a count, never who), danmakuPerMinute, danmakuPeakMinute, danmakuPeakMinuteCount, danmakuFirstAt, danmakuLastAt and danmakuSample (danmakuSampleSize texts spread across the timeline, default 25). One real profile from a "minecraft" search on 2026-09-27: 1,371 danmaku fetched of 5,300, 1,240 unique senders, 272 per minute, peak at minute 2 with 908.
Limits and options
| Field | Default | Effect |
|---|---|---|
maxResults | 30 | per keyword in search, per channel in user_videos, run total in video_detail and popular (up to 5,000) |
onlyNewVideos | false | returns only videos not delivered in previous runs (search, user_videos, popular); aliases onlyNew and deltaMode; deltaStateKey keeps separate monitors apart |
searchAliases | none | other spellings of searchQuery (耐克 for Nike), merged without duplicates; maxResults counts for the keyword and its aliases together |
category | all | popular only: one zone's ranking instead of the general board |
includeComments | false | adds each video's comments after it (not in danmaku mode) |
maxComments | 20 | comment rows per video, replies included (up to 5,000) |
sortComments | hot | hot, time (newest first) or likes |
includeReplies | false | replies as their own rows |
includeDetails | true | adds coins, shares and tags (see above) |
includeSubtitles | false | adds subtitles only when Bilibili serves them without login |
includeDanmaku | false | adds one danmaku reaction profile row per video |
danmakuSampleSize | 25 | danmaku texts inside each profile (0 to 500) |
maxDanmakuPerVideo | 1,000 | danmaku rows per video in danmaku mode (up to 100,000) |
proxyConfiguration | Apify datacenter proxy | blocked requests move to a new IP |
Pricing
Pay per event: one charge per video delivered with its stats, whatever the mode, and one per comment row at the same price. No monthly fee and no start fee.
| Apify plan | Price per video | Per 1,000 videos |
|---|---|---|
| Free | US$ 0.01 | US$ 10.00 |
| Bronze | US$ 0.009 | US$ 9.00 |
| Silver | US$ 0.008 | US$ 8.00 |
| Gold and above | US$ 0.007 | US$ 7.00 |
Cost examples at the Free plan price:
| Job | Videos | Cost |
|---|---|---|
| One keyword, default | 30 | US$ 0.30 |
| Trending board, 3 times a day for 30 days | 9,000 | US$ 90.00 |
| Upload history of 20 creators, 100 videos each | 2,000 | US$ 20.00 |
| One keyword past Bilibili's cap (date windows) | 1,500 | US$ 15.00 |
500 comments of one video (video_comments) | 500 comments | US$ 5.00 |
30 videos with 20 comments each (includeComments) | 30 + 600 comments | US$ 6.30 |
Danmaku rows (danmaku mode) and danmaku reaction profiles (includeDanmaku) are currently free: only the videos are charged. Any future price for them will be shown on this page and in the Apify pricing tab before it applies.
Items with an errorCode are not charged, and neither are duplicate danmaku, videos with no danmaku or videos with comments closed. Subtitles and details cost nothing extra.
Speed and reliability
Measured on Apify with 512 MB memory and datacenter proxy on 2026-09-13:
| Run | Videos | Time |
|---|---|---|
| Search "minecraft", 30 | 30 | 14 s |
| Search "原神", most views, 10 to 30 min, June to September, 100 | 100 | 69 s |
| Search 2 keywords, newest first, 400 each | 699 | 308 s |
| Channel 546195, 30 | 30 | 10 s |
| Channel with 500 videos | 500, plus 5 free DETAILS_UNAVAILABLE | 174 s |
| 50 videos by BV id | 50 | 18 s |
| Trending board | 100 | 65 s |
17 test runs delivered 1,866 videos. 16 succeeded; the failure was an API call without mode, fixed before release (the mode now comes from the data). No item came back BLOCKED. Bilibili's risk control refuses about 5 to 10% of datacenter requests; each refused request is retried on another IP.
The Actor uses Bilibili's public web APIs over HTTP, with visitor cookies and the same request signing the website uses (comments are read without the visitor cookie, which is what lets them page past the first 3). No login, no account and no browser.
Use it from code, no-code tools and AI agents
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("scrapewise/bilibili-scraper").call(run_input={"mode": "search","searchQuery": "原神","sortOrder": "click","maxResults": 100,})for video in client.dataset(run["defaultDatasetId"]).iterate_items():print(video["bvid"], video.get("title"), video.get("viewCount"), video.get("coinCount"))
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('scrapewise/bilibili-scraper').call({mode: 'user_videos',userIds: ['546195'],maxResults: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((v) => [v.title, v.viewCount, v.likeCount]));
HTTP API
POST https://api.apify.com/v2/acts/scrapewise~bilibili-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN with the input JSON as the body returns the videos directly. Synchronous calls wait up to 5 minutes; for large channels or many keywords use /runs and read the dataset when the run finishes.
n8n, Make, Zapier and Google Sheets
Use the Apify app or node in n8n, Make or Zapier: "Run Actor" with scrapewise/bilibili-scraper, then map the items to Google Sheets, a database or a report. In Apify Console, save a task and attach a Schedule.
AI agents (MCP)
Add the Apify MCP server to Claude, ChatGPT, Cursor or any MCP client with this Actor as a tool:
https://mcp.apify.com/?tools=scrapewise/bilibili-scraper
The agent sends a keyword, channel id or video URLs and reads the stats. Chinese titles and tags come in the original language, so the agent can translate them.
Migrating from another Bilibili scraper
The Actor accepts the input field names commonly used by Bilibili scrapers, so most existing inputs work after changing only the Actor id.
| Field you already send | Here | Notes |
|---|---|---|
mode: search, video_detail, video_comments, user_videos, user_profile, popular | same | |
searchQuery | same | |
sortOrder, durationFilter, pubtimeBegin, pubtimeEnd | same | same values |
videoUrls, userIds, maxResults | same | |
searchAliases | same | merged without duplicates, maxResults for the group |
category (popular) | same | same names (game, music, tech...), plus zone numbers |
deltaMode, deltaStateKey | same | runs onlyNewVideos |
includeDanmaku, danmakuSampleSize | same | one danmaku_profile row per video, same field names |
includeComments, maxComments, sortComments (hot, time, likes), includeReplies | same | comment rows with commentId, text, likeCount, replyCount, createdAt, createdTimestamp, authorName, authorLevel, videoBvid (commenters' authorMid and avatar are not returned) |
autoLocalize, sentimentAnalysis, followUpComments | not supported | ignored; use searchAliases for brand names |
Output fields with the same names: bvid, aid, title, description, url, thumbnailUrl, duration, durationFormatted, viewCount, likeCount, coinCount, favoriteCount, shareCount, danmakuCount, replyCount, authorName, authorMid, publishDate, publishTimestamp, category, tags, scrapedAt. Differences: user_videos reads the channel's own upload list (complete, newest first) and does not add a creator profile row before the videos (use user_profile), there is no sentiment field, and a number Bilibili does not return is null instead of 0.
keywords, videoUrls, maxItems, sortOrder and durationFilter work as they are. Rename userUrls to userIds, publishedAfter and publishedBefore to pubtimeBegin and pubtimeEnd, and searchType to mode (or leave mode out and let the data decide). Danmaku, comments and creator profiles are covered by the modes above; transcripts are not collected.
startUrls (video URLs) and maxItems work as they are. Rename searchTerms to searchQueries, sortBy to sortOrder, and onlyPostsAfter and onlyPostsBefore to pubtimeBegin and pubtimeEnd (dates only).
FAQ
Do I need a Bilibili account, cookies or an API key?
No. The Actor uses the public endpoints the Bilibili website uses for visitors, with temporary visitor cookies it creates itself.
Do I need a Bilibili developer account?
No. The Actor reads the same public data the website shows to any visitor and returns it as JSON, CSV or Excel, without applying for API access.
Why is category empty for channel uploads and video details?
Bilibili no longer returns the category name in channel upload lists or in video details, so category is empty in user_videos and video_detail. Search and trending items keep it.
Why are coins, shares or tags missing?
They are only added when includeDetails is on (the default). If you turned it off, search and channel items carry only the counts Bilibili puts in its lists.
Can I get subtitles or transcripts?
Only when Bilibili serves them without login, which is now rare: in our test, 0 of 25 videos had subtitles available without login. includeSubtitles adds them when possible and subtitleStatus says why they are missing (LOGIN_REQUIRED or NONE).
Can I get danmaku text?
Yes: mode: "danmaku" gives one row per danmaku, and includeDanmaku gives one profile per video. Rows never carry who sent them.
Can I get comments?
Yes, without an account: mode: "video_comments", or includeComments in the other modes, with maxComments, sortComments and includeReplies. One video gave 800 comments in a row in our test. The deepest pages of a thread with tens of thousands of comments may still stop early, because Bilibili limits visitors; the run returns what it read.
Can I sort by newest first?
Yes. sortOrder: "pubdate" returns search results newest first, and pubtimeBegin/pubtimeEnd limit the dates. For comments, sortComments: "time".
How many videos can I get for one keyword?
Bilibili stops one search at 1,000 results (50 pages, about 770 distinct videos). Set maxResults above that and leave the date fields empty: the Actor asks the same keyword again for 30-day windows, newest first, until it reaches your number (1,500 distinct videos for 原神 in our test). You can still split by pubtimeBegin/pubtimeEnd, durationFilter or related keywords.
How do I find a creator's id?
Open the creator's page: the number in space.bilibili.com/546195 is the id. You can also paste the whole URL into userIds.
Which time zone do the date filters use?
pubtimeBegin and pubtimeEnd use China time (UTC+8), like Bilibili. publishDate in the output is in UTC.
Will Bilibili block it?
Bilibili's risk control refuses a share of requests from any single IP. The Actor retries refused requests on other IPs and, if needed, on residential IPs at no extra price. A video that still fails comes back as a free BLOCKED item, and the run fails only if nothing was delivered.
How many videos can I get on the Apify Free plan?
The Free plan comes with a monthly platform credit (US$ 5 when this page was written; see apify.com/pricing). At US$ 10 per 1,000 videos that is about 500 videos a month.
Is it legal to scrape Bilibili?
The Actor collects public video pages and statistics without logging in and does not bypass paywalls. The only people in the data are the channels that uploaded the videos, as shown publicly on Bilibili. Bilibili's terms and the law where you operate (including China's PIPL and GDPR) apply to how you use the data; if in doubt, ask a lawyer.
Can I use it from ChatGPT, Claude or another AI agent?
Yes, through the Apify MCP server (see "AI agents (MCP)" above).
Limitations
- Bilibili search returns at most 1,000 results per query; past that the Actor walks 30-day windows back in time (only when you set no date filter), so very old or very niche keywords may still end earlier.
- Long runs stop 45 seconds before the run timeout with everything delivered; unfinished keywords or channels come back as free
NOT_REACHEDrows. - The trending board has about 100 videos at a time; schedule it to follow changes.
- Comments are read as a visitor: very deep pages of huge threads may stop early. Commenters' profiles are not collected.
- Danmaku come from Bilibili's public sources; very old danmaku that Bilibili only shows to logged-in users (the history view) are not included.
- Paid courses listed on a channel have no public video page and come back as free
DETAILS_UNAVAILABLEitems. - Most subtitles need login on Bilibili and are not available.
- Something broke? Open an issue on the Issues tab.
If this Actor saves you time, a short review on the Store page helps other people find it.
Changelog
- 2026-10-16: a blocked search now retries on fresh sessions and the residential proxy sooner.
- 2026-10-08: comments:
video_commentsmode andincludeCommentsin the other modes, paged past the first page,maxComments,sortComments(hot,time,likes),includeReplies; trending bycategory(Bilibili's ranking per zone, withrankPosition);searchAliasesmerged into one search;deltaMode/deltaStateKeyaccepted. Runs without these fields return the same rows as before. - 2026-10-04:
onlyNewVideosfor scheduled runs: search, channel uploads and trending return, and charge, only videos not delivered before; channels and date-sorted searches stop at the first video already delivered. - 2026-09-27: keyword search goes past Bilibili's 1,000-result cap with 30-day windows (up to
maxResults5,000); newuser_profilemode (followers, following, videos, likes, level, verification per channel, same price as a video); runs close to their timeout stop cleanly with freeNOT_REACHEDrows.