Bilibili Scraper avatar

Bilibili Scraper

Under maintenance

Pricing

from $3.00 / 1,000 video scrapeds

Go to Apify Store
Bilibili Scraper

Bilibili Scraper

Under maintenance

Scrape Bilibili (哔哩哔哩) videos by keyword, BV id, uploader or trending list: views, likes, coins, favorites, danmaku, tags, followers, comments and subtitle tracks. No login. Pay per video.

Pricing

from $3.00 / 1,000 video scrapeds

Rating

0.0

(0)

Developer

Romas Jurevicius

Romas Jurevicius

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

13 days ago

Last modified

Share

Bilibili Scraper

Bilibili Scraper turns Bilibili (哔哩哔哩, B站), China's largest video community, into clean JSON. Give it a keyword, a list of BV ids or URLs, an uploader (UP主) or a trending board, and it returns one record per video: BV id and av id, title and description in the original Chinese, uploader with follower count, publish time in ISO 8601, duration, category, tags, cover, and the full engagement set - views, likes, coins, favorites, shares, danmaku and comments. Turn on comments to attach the top-level comments (pinned one first) to each video, and subtitles to list the CC tracks. No account, cookie or API key is needed: everything comes from Bilibili's public web APIs, signed the same way the website signs them.

Typical uses: tracking what trends in China every day for brand, gaming or entertainment research, monitoring a list of Chinese creators (KOLs) and their latest uploads, measuring how a keyword such as 黑神话悟空 or a product name performs, collecting comments for sentiment analysis, and feeding AI agents with fresh Chinese video data.

Four modes:

  • popular (default) - the trending feed 综合热门 (up to ~1,000 videos), the 3-day ranking boards 排行榜 for 20 categories, the weekly editor pick 每周必看, or the all-time must-watch list 入站必刷.
  • search - keyword search with Bilibili's own sort orders (relevance, most played, newest, most danmaku, most favorited) and a duration filter; up to 1,000 results per keyword.
  • video - full details for BV ids, av ids, video URLs and b23.tv short links.
  • user - an uploader's videos, newest or most played first, by mid or space URL.

How to scrape Bilibili videos

  1. Open the Actor in Apify Console and click Try for free.
  2. Pick a Mode. The default (popular, 20 videos) returns today's trending videos in under a minute.
  3. Fill in the field for that mode: Search keywords, Videos, Uploaders, or the Popular list and Ranking category.
  4. Set Max videos per query / uploader / list, and switch on Include comments (with Max comments per video) or Include subtitle tracks if you need them.
  5. Click Start. Download the results as JSON, CSV or Excel, or read them through the API.

How it works

Lists come from /x/web-interface/popular, /ranking/v2, /popular/series/one, /popular/precious, /wbi/search/type and the uploader endpoints /x/space/wbi/arc/search and /x/series/recArchivesByKeywords. Each video is then completed from /x/web-interface/wbi/view/detail (stats, tags, parts, follower count) and, on request, comments from /x/v2/reply/wbi/main. Signed endpoints use WBI signing with keys read from /x/web-interface/nav and refreshed automatically. When Bilibili's risk control answers (HTTP 412 page, -412, -352), the Actor backs off, switches to a new proxy session with a fresh buvid3 cookie and retries; uploader lists alternate between two endpoints, because the main one is blocked for most anonymous sessions.

Bilibili Scraper pricing

Pay-per-event, no subscription:

  • Video scraped: $0.002 per video ($2 per 1,000 videos), full details included.
  • Comment scraped: $0.0005 per comment attached to a video (only with Include comments on).
  • Actor start: Apify's standard small start fee per run.

Detail requests, subtitle track lists and free status records (deleted video, blocked uploader, empty search) cost nothing extra. Example: the default run of 20 trending videos costs $0.04; 100 videos with 20 comments each costs $0.20 + $1.00. Set Maximum cost per run to cap spending: the Actor checks the remaining budget before every video, trims the comment count to what is left, and stops cleanly with everything collected so far.

Input example

{
"mode": "search",
"searchQueries": ["黑神话悟空", "原神"],
"searchOrder": "click",
"maxVideos": 100,
"fetchDetails": true,
"includeComments": true,
"maxComments": 20,
"commentsSort": "hot",
"proxyConfiguration": { "useApifyProxy": true }
}

Other modes: {"mode": "video", "videos": ["BV1qt411j7fV", "av170001", "https://b23.tv/..."]}, {"mode": "user", "users": ["546195"], "userOrder": "pubdate"}, {"mode": "popular", "popularSource": "ranking", "rankingCategory": "4"} (gaming board).

Output example

One dataset item per video (trending video, captured 2026-10-12, comments shortened):

{
"type": "video",
"bvid": "BV1uopn6NEMR",
"aid": 117422443004890,
"cid": 42656206326,
"url": "https://www.bilibili.com/video/BV1uopn6NEMR",
"title": "那个卖菱角的小贩想要弄伤我的鳞片",
"description": "",
"language": "zh",
"author": { "mid": 1582757648, "name": "印度老吃家", "face": "https://i2.hdslb.com/bfs/face/d6208f529dff2c6cc91e1bdaf4bb8fa74dc2b898.jpg", "followers": 1051420 },
"publishedAt": "2026-10-11T14:00:00.000Z",
"durationSec": 169,
"category": "美食侦探",
"categoryId": 212,
"tags": ["舌尖真探事务所", "印度美食", "街头美食", "美食侦探", "街头小吃"],
"stats": { "views": 967617, "likes": 26583, "coins": 529, "favorites": 1149, "shares": 325, "danmaku": 277, "comments": 334 },
"cover": "https://i2.hdslb.com/bfs/archive/ece16da3ebfd4ce11d7b9c9765a37279458077c3.jpg",
"isReprint": false,
"parts": [{ "cid": 42656206326, "page": 1, "title": "那个卖菱角的小贩想要弄伤我的鳞片", "durationSec": 169 }],
"rank": 1,
"source": { "mode": "popular", "list": "popular 综合热门" },
"detailsFetched": true,
"scrapedAt": "2026-10-12T08:36:34.840Z",
"comments": [
{
"rpid": "316778356289",
"author": { "mid": 3546712312384082, "name": "是小小付吖", "level": 4, "avatar": "https://i2.hdslb.com/bfs/face/352b22079fc46cfb0678599e4a40b2ab3d1a96ee.jpg" },
"text": "为什么主播说哎呦喂会被骂,有没有了解的说一下谢谢[打call]",
"likes": 1202,
"replyCount": 17,
"createdAt": "2026-10-11T14:02:36.000Z",
"ipLocation": null,
"isPinned": false
}
],
"commentsTotal": 334
}

Field notes:

  • Text is never translated. language is a script-based guess on title + description (zh, ja, ko, en, und).
  • stats fields Bilibili does not publish for a list are null, never invented. With Fetch full details on (default) every field is filled from the video's detail record; with it off, search rows lack coins and shares, and uploader rows carry only views, danmaku and comments.
  • author.followers comes from the detail record (or the uploader card in user mode).
  • rank is the position in the source list: trending rank, search result order or upload order.
  • subtitles (with Include subtitle tracks) lists each CC track as { lang, langName, isAiGenerated, url, requiresLogin, text, cues }. See the limitations below.
  • ipLocation on comments is what Bilibili shows next to a comment; it is usually null for anonymous visitors.
  • Videos and uploaders that cannot be read produce one free {"type": "status"} record with not_found, blocked, empty or error and the Bilibili response code, so a pipeline can tell "deleted" from "blocked".

Integrations

  • API and clients: start runs and read the dataset through the Apify API or the JavaScript and Python clients; run-sync-get-dataset-items returns a trending snapshot in one call.
  • MCP / AI agents: add the Apify MCP server to Claude, Cursor or ChatGPT and enable this Actor as a tool; the input schema becomes the tool schema, for example {"mode": "search", "searchQueries": ["小米 SU7"], "maxVideos": 50}.
  • n8n, Make, Zapier: use the Apify node or module and map dataset items into your workflow.
  • Schedules and webhooks: run the trending board every hour and push results to Google Sheets, Slack, BigQuery or Postgres.

Limitations

  • Proxy: Apify datacenter proxy (the default) works for every mode; on 2026-10-12 trending, ranking, search, detail and comments all answered from US datacenter IPs, and a China residential IP gave no advantage. No China proxy is needed.
  • Uploader lists are Bilibili's most risk-controlled endpoints. The Actor rotates sessions and alternates two endpoints; in testing about half of the attempts were blocked, and retries recovered every page. A page that stays blocked after 10 sessions yields a free blocked record.
  • Subtitle text needs login. Since Bilibili's 2024 change, CC subtitle files are only served to logged-in users: the Actor lists the tracks (language, AI or human) with requiresLogin: true and text: null. If a track's file is public, its text and timed cues are filled in.
  • Comments are top-level only (reply threads are counted in replyCount, not fetched). They are requested without cookies on purpose: with a fresh buvid3 cookie Bilibili cuts anonymous comment lists to 3 items.
  • Search stops at 1,000 results per keyword (50 pages of 20); the trending feed at about 1,000 videos; ranking boards at 100. Paid courses, bangumi episodes and live rooms are not covered.

Bilibili Scraper FAQ

Do I need a Bilibili account or cookies?

No. Every mode uses public endpoints that Bilibili's own website calls for logged-out visitors. You never paste cookies, so there is no account to get banned.

Is the Chinese text translated?

No. Titles, descriptions, tags and comments stay exactly as published. Each video carries a language field so you can route records to your own translation step.

How do I get an uploader's newest videos?

Use "mode": "user" with the mid (546195) or the space URL, and keep userOrder at pubdate (newest first) or set click for most played. Newest-first sorting works, unlike tools that ignore the order parameter.

Why is a video missing from my results?

Deleted, private or under-review videos return a free status record with not_found and Bilibili's code (-404, 62002, 62012). The same video appearing in two lists is pushed and charged only once per run.

The top 100 trending videos with full details cost $0.20 per run. Adding 20 comments per video adds $1.00. Detail lookups are not charged separately.

Same author, same pay-per-event model, all without login:

This Actor reads only publicly visible data through the same unauthenticated endpoints Bilibili's website uses, and it never logs in or touches account features. Bilibili's robots.txt disallows only /medialist/detail/ and /index.html, which the Actor does not request. Videos, comments and profile data can still contain personal data and copyrighted content: you are responsible for using the output lawfully, including GDPR, China's Personal Information Protection Law (PIPL) and Bilibili's terms of service. Keep request rates modest (the Actor spaces requests and limits concurrency by default), and read Apify's article on the legality of web scraping if in doubt.

Support

Found a field that normalizes wrongly, a list that stopped working, or need danmaku or reply threads? Open an issue on the Actor's Issues tab with the input JSON and the BV id or mid; fixes usually ship within days.