Bilibili Video Scraper
Pricing
$9.00 / 1,000 video metadata
Bilibili Video Scraper
Find public Bilibili videos by keyword, URL or ID, popular category, or creator. Get titles, descriptions, tags, dates, creator details, engagement counts, media links, and available comments, danmaku, and sentiment in structured data.
Pricing
$9.00 / 1,000 video metadata
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
🎬 Turn Bilibili video pages into usable data
This Bilibili video scraper is for researchers, content teams, and developers who need public Bilibili data. Find videos by keyword, URL or ID, popular category, or creator UID. Each saved row gives you video identity and metadata, creator details, engagement counts, and available media links, comments, danmaku, and sentiment in a structured dataset.
- Find public videos for a topic with Bilibili Video Search.
- Check a submitted video's fields with Bilibili Video Metadata.
- Review time-linked audience messages with Bilibili Danmaku.
- Export structured fields for a video with Bilibili Video Data.
- Collect a focused list of public videos with Bilibili Videos.
📦 Bilibili video rows you can use
Each successful match is saved as one video row. A row can include the video's title, description, category, tags, length, thumbnail, publication time, creator details, engagement counts, source-hosted media links, comments, a timeline-spread danmaku sample, and sentiment fields when available. Optional fields are omitted when the source does not provide them.
The Actor reads public Bilibili content. Private, deleted, restricted, or otherwise inaccessible content is outside scope. It does not download, mirror, or permanently store source video or audio files.
▶️ Find and collect Bilibili videos
- Select one discovery method:
Keyword,Video URLs or IDs,Popular or trending videos, orCreator. - Fill in the fields for that choice. Fields for other choices are ignored.
- Add keyword sorting, duration or date filters when you need them, and set a result limit if you want a bounded run.
- Run the Actor and open the default dataset to view the saved rows.
Leave Maximum items empty to return all available results until the source is exhausted. This limit applies to Keyword, Popular or trending videos, and Creator. It does not limit submitted Video URLs or IDs. The Actor processes submitted URLs or IDs separately, so one bad item does not stop the others.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
discoveryMethod | string | Required. Selects keyword search, video URLs or IDs, popular or trending videos, or a creator. |
keyword | string | One keyword for matching public Bilibili videos. Used with Keyword. |
sortBy | string | Orders keyword results by relevance, recency, views, comments, favorites, or danmaku. |
durationFilter | object | Optional length range for keyword results. Leave either bound empty for no limit. |
durationFilter.minSeconds | integer | Minimum video length in seconds. Leave empty for no lower limit. |
durationFilter.maxSeconds | integer | Maximum video length in seconds. Leave empty for no upper limit. |
dateRange | object | Optional publication date range for keyword results. Dates use UTC. |
dateRange.startDate | string | Includes videos published on or after this YYYY-MM-DD date. |
dateRange.endDate | string | Includes videos published on or before this YYYY-MM-DD date. |
videoUrlsOrIds | array of strings | One or more public Bilibili video URLs or identifiers. Each item is processed separately, so one bad item does not stop the others. |
popularCategory | string | Optional Bilibili category for Popular or trending videos. Leave empty to include all categories. |
creatorUid | string | One numeric Bilibili creator UID for that creator's recent public videos. |
newOnly | boolean | For Keyword and Popular or trending videos, returns only videos not seen in an earlier run with the same monitoring input. Ignored for Video URLs or IDs and Creator. |
maxItems | integer | Optional positive limit for Keyword, Popular or trending videos, and Creator. Leave it empty to return all available results until the source is exhausted. It does not limit submitted Video URLs or IDs. |
Only discoveryMethod is required by the schema. Use one keyword per run, numeric digits for creatorUid, and whole seconds for duration limits. The date fields use YYYY-MM-DD and are read in UTC.
Input example
This example is copied from a successful current-beta keyword run.
{"discoveryMethod": "keyword","keyword": "Bilibili","sortBy": "relevance","newOnly": false,"maxItems": 1}
🧾 Output
Output fields
Every output row uses the video shape below. Nested groups and fields are optional unless noted. A missing optional field means that value was not returned for that video.
| Field | Type | What it does |
|---|---|---|
videoId | string | Stable Bilibili identifier for the video. |
url | URI string | Canonical Bilibili page URL for the video. |
title | string | Title shown for the video. |
description | string, optional | Description provided on the Bilibili video page. |
category | string | Bilibili category assigned to the video. |
tags | array of strings, optional | Tags listed for the video. |
durationSeconds | integer | Video duration in whole seconds. |
thumbnailUrl | URI string | Source URL for the video thumbnail. |
publishedAt | ISO 8601 date-time string | Time when the video was published. |
creator | object | Creator information shown for the video. |
creator.uid | integer | Numeric Bilibili UID of the creator. |
creator.name | string | Creator name shown for the video. |
creator.avatarUrl | URI string, optional | Source URL for the creator avatar. |
metrics | object, optional | Engagement counts reported for the video. |
metrics.views | integer, optional | Number of views reported by Bilibili. |
metrics.likes | integer, optional | Number of likes reported by Bilibili. |
metrics.coins | integer, optional | Number of coins reported by Bilibili. |
metrics.favorites | integer, optional | Number of favorites reported by Bilibili. |
metrics.shares | integer, optional | Number of shares reported by Bilibili. |
metrics.comments | integer, optional | Number of comments reported for the video. |
metrics.danmaku | integer, optional | Number of danmaku messages reported for the video. |
media | object, optional | Source-hosted media links and available stream choices. |
media.videoUrl | URI string, optional | Direct source URL for a video stream, when available. |
media.audioUrl | URI string, optional | Direct source URL for an audio stream, when available. |
media.streams | array of objects, optional | Available source-hosted video or audio stream choices. |
media.streams[].url | URI string | Direct source URL for the stream. |
media.streams[].mediaType | string | Kind of media. The value is video or audio. |
media.streams[].quality | string | Quality label reported for the stream. |
media.streams[].width | integer, optional | Video width in pixels, when reported. |
media.streams[].height | integer, optional | Video height in pixels, when reported. |
media.streams[].frameRate | number, optional | Video frame rate in frames per second, when reported. |
media.streams[].bitrateKbps | integer, optional | Stream bitrate in kilobits per second, when reported. |
media.streams[].codec | string, optional | Codec reported for the stream. |
media.streams[].container | string, optional | Container format reported for the stream. |
comments | array of objects, optional | Comments returned for the video, with optional reply and sentiment data. |
comments[].commentId | string | Stable Bilibili identifier for the comment. |
comments[].text | string | Text written in the comment. |
comments[].author | object | Author information shown for the comment. |
comments[].author.uid | integer | Numeric Bilibili UID of the comment author. |
comments[].author.name | string | Name shown for the comment author. |
comments[].author.avatarUrl | URI string, optional | Source URL for the comment author's avatar. |
comments[].likes | integer, optional | Number of likes reported for the comment. |
comments[].replyCount | integer, optional | Number of replies reported for the comment. |
comments[].parentCommentId | string, optional | Parent comment identifier when the comment is a reply. |
comments[].sentiment | object, optional | Sentiment fields for the comment text. |
comments[].sentiment.polarity | string | positive, neutral, or negative sentiment polarity. |
comments[].sentiment.score | number | Signed sentiment score from -1 to 1. |
danmaku | object, optional | A timeline-spread sample of danmaku text and reactions. |
danmaku.sample | array of objects | Representative danmaku messages spread across the video timeline. |
danmaku.sample[].timeSeconds | number | Time in the video when the message appears. |
danmaku.sample[].text | string | Text shown in the danmaku message. |
danmaku.sample[].likes | integer, optional | Number of reactions reported for the danmaku message. |
sentiment | object, optional | Sentiment fields for the video's title and description. |
sentiment.polarity | string | positive, neutral, or negative sentiment polarity. |
sentiment.score | number | Signed sentiment score from -1 to 1. |
Example row from the current beta build
The row below comes from a successful current-beta Creator run. It is shortened. The source media URLs, remaining stream choices, and remaining comments use the JSON string "..." as an omission marker. The other shown values are copied from the real row.
{"videoId": "BV1p4th6PExX","url": "https://www.bilibili.com/video/BV1p4th6PExX","title": "9月单机游戏杀疯了🔥大作扎堆!千万别错过!【9月游戏推荐】","description": "大家如果有比较犹豫要不要购入的游戏可以来C酱小肉包直播间:live.bilibili.com/213 看看让我帮你排雷~\n文案:傲慢的小肉包\n配音:傲慢的小肉包\n后期:菜菜\n出镜:傲慢的小肉包\n感谢关注~嗷!","category": "单机游戏","tags": ["金刚狼","寂静岭","空之轨迹","单机游戏","鬼武者剑之道","黎明行者之血","火焰纹章千丝万缕","C酱","PS5","游戏推荐"],"durationSeconds": 620,"thumbnailUrl": "http://i0.hdslb.com/bfs/archive/08b7e8edc4c797dd08f0d291ddc20d57faad9109.jpg","publishedAt": "2026-09-01T09:10:00.000Z","creator": {"uid": 67141,"name": "傲慢的小肉包","avatarUrl": "https://i1.hdslb.com/bfs/face/361274190d08a36ed12c58b55dd4063cde3391eb.jpg"},"metrics": {"views": 154816,"likes": 9135,"coins": 3055,"favorites": 1356,"shares": 553,"comments": 382,"danmaku": 647},"media": {"videoUrl": "...","audioUrl": "...","streams": [{"url": "...","mediaType": "video","quality": "32","width": 852,"height": 480,"frameRate": 30,"bitrateKbps": 655,"codec": "avc1.64001F","container": "mp4"},"..."]},"comments": [{"commentId": "312724324833","text": "小肉包怎么感觉越活越小了,她真的是宝宝吗[微笑]","author": {"uid": 1272995,"name": "天火封不住~","avatarUrl": "https://i2.hdslb.com/bfs/face/e801331f5dbfdc2250e36ce06d109beaf2c33033.jpg"},"sentiment": {"polarity": "neutral","score": 0},"likes": 6,"replyCount": 0},"..."],"danmaku": {"sample": [{"timeSeconds": 0.551,"text": "ciallo","likes": 0},{"timeSeconds": 212.695,"text": "可爱捏","likes": 0},{"timeSeconds": 617.949,"text": "可爱可爱","likes": 0}]},"sentiment": {"polarity": "neutral","score": 0}}
💳 Pricing
This Actor uses pay-per-event pricing. The primary event is bilibili-video-metadata at $0.009 for each successful video metadata row saved to the dataset. The event covers the video fields present in that saved row, including available optional fields. The Apify pricing panel is the source of truth for current charges.
🔌 Integrations
Use the default dataset link in Apify to view and export your rows, or read the dataset through the Apify API. For a related video guide, see:
❓ FAQ
What happens if one submitted URL or ID is invalid?
Each submitted URL or ID is processed separately. One bad item does not stop the other submitted items.
Can I leave Maximum items empty?
Yes. For Keyword, Popular or trending videos, and Creator, leaving it empty returns all available results until the source is exhausted. It does not limit submitted Video URLs or IDs.
How does New-only monitoring work?
On recurring Keyword or Popular or trending runs, it returns videos not seen in an earlier run with the same monitoring input. It is ignored for Video URLs or IDs and Creator.
Do the duration and date filters apply to every discovery method?
No. The duration and publication date filters apply to Keyword results. Duration uses seconds. Dates use YYYY-MM-DD and UTC.
Does this Actor download or permanently store Bilibili media?
No. It returns source-hosted video or audio links when available. It does not download, mirror, or permanently store the source media.
Do I need a Bilibili login, cookies, or API key?
No buyer login, cookies, or source API keys are needed for public Bilibili content. Private or inaccessible content is outside scope.
Why might a field be missing from a video row?
Some fields are optional because Bilibili may not provide them for every public video. The row keeps the fields that are available.
What does each video row contain?
Every row has video identity, title, category, duration, thumbnail, publication time, and creator details. It can also include the description, tags, engagement counts, media links, comments, danmaku samples, and sentiment fields.
📝 Changelog
v0.0 (03-09-2026)
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- YouTube Trending Videos Scraper: Compare Bilibili popular videos with ranked regional YouTube category pages.
- YouTube Channel Scraper: Track public creator channels and recent videos on YouTube.
- YouTube Tags Extractor: Audit public YouTube video tags alongside Bilibili titles and tags.
- Bilibili Scraper — Videos, Danmaku, Comments & Creator Search: Compare another public Bilibili workflow for video, danmaku, comments, and creator search.
- Bilibili Video Scraper: Try another focused Bilibili workflow for video metadata and search.
Made with ❤️ by Maxime Dupré