Bilibili Video Scraper avatar

Bilibili Video Scraper

Pricing

$9.00 / 1,000 video metadata

Go to Apify Store
Bilibili Video Scraper

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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.

📦 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

  1. Select one discovery method: Keyword, Video URLs or IDs, Popular or trending videos, or Creator.
  2. Fill in the fields for that choice. Fields for other choices are ignored.
  3. Add keyword sorting, duration or date filters when you need them, and set a result limit if you want a bounded run.
  4. 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

FieldTypeWhat it does
discoveryMethodstringRequired. Selects keyword search, video URLs or IDs, popular or trending videos, or a creator.
keywordstringOne keyword for matching public Bilibili videos. Used with Keyword.
sortBystringOrders keyword results by relevance, recency, views, comments, favorites, or danmaku.
durationFilterobjectOptional length range for keyword results. Leave either bound empty for no limit.
durationFilter.minSecondsintegerMinimum video length in seconds. Leave empty for no lower limit.
durationFilter.maxSecondsintegerMaximum video length in seconds. Leave empty for no upper limit.
dateRangeobjectOptional publication date range for keyword results. Dates use UTC.
dateRange.startDatestringIncludes videos published on or after this YYYY-MM-DD date.
dateRange.endDatestringIncludes videos published on or before this YYYY-MM-DD date.
videoUrlsOrIdsarray of stringsOne or more public Bilibili video URLs or identifiers. Each item is processed separately, so one bad item does not stop the others.
popularCategorystringOptional Bilibili category for Popular or trending videos. Leave empty to include all categories.
creatorUidstringOne numeric Bilibili creator UID for that creator's recent public videos.
newOnlybooleanFor 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.
maxItemsintegerOptional 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.

FieldTypeWhat it does
videoIdstringStable Bilibili identifier for the video.
urlURI stringCanonical Bilibili page URL for the video.
titlestringTitle shown for the video.
descriptionstring, optionalDescription provided on the Bilibili video page.
categorystringBilibili category assigned to the video.
tagsarray of strings, optionalTags listed for the video.
durationSecondsintegerVideo duration in whole seconds.
thumbnailUrlURI stringSource URL for the video thumbnail.
publishedAtISO 8601 date-time stringTime when the video was published.
creatorobjectCreator information shown for the video.
creator.uidintegerNumeric Bilibili UID of the creator.
creator.namestringCreator name shown for the video.
creator.avatarUrlURI string, optionalSource URL for the creator avatar.
metricsobject, optionalEngagement counts reported for the video.
metrics.viewsinteger, optionalNumber of views reported by Bilibili.
metrics.likesinteger, optionalNumber of likes reported by Bilibili.
metrics.coinsinteger, optionalNumber of coins reported by Bilibili.
metrics.favoritesinteger, optionalNumber of favorites reported by Bilibili.
metrics.sharesinteger, optionalNumber of shares reported by Bilibili.
metrics.commentsinteger, optionalNumber of comments reported for the video.
metrics.danmakuinteger, optionalNumber of danmaku messages reported for the video.
mediaobject, optionalSource-hosted media links and available stream choices.
media.videoUrlURI string, optionalDirect source URL for a video stream, when available.
media.audioUrlURI string, optionalDirect source URL for an audio stream, when available.
media.streamsarray of objects, optionalAvailable source-hosted video or audio stream choices.
media.streams[].urlURI stringDirect source URL for the stream.
media.streams[].mediaTypestringKind of media. The value is video or audio.
media.streams[].qualitystringQuality label reported for the stream.
media.streams[].widthinteger, optionalVideo width in pixels, when reported.
media.streams[].heightinteger, optionalVideo height in pixels, when reported.
media.streams[].frameRatenumber, optionalVideo frame rate in frames per second, when reported.
media.streams[].bitrateKbpsinteger, optionalStream bitrate in kilobits per second, when reported.
media.streams[].codecstring, optionalCodec reported for the stream.
media.streams[].containerstring, optionalContainer format reported for the stream.
commentsarray of objects, optionalComments returned for the video, with optional reply and sentiment data.
comments[].commentIdstringStable Bilibili identifier for the comment.
comments[].textstringText written in the comment.
comments[].authorobjectAuthor information shown for the comment.
comments[].author.uidintegerNumeric Bilibili UID of the comment author.
comments[].author.namestringName shown for the comment author.
comments[].author.avatarUrlURI string, optionalSource URL for the comment author's avatar.
comments[].likesinteger, optionalNumber of likes reported for the comment.
comments[].replyCountinteger, optionalNumber of replies reported for the comment.
comments[].parentCommentIdstring, optionalParent comment identifier when the comment is a reply.
comments[].sentimentobject, optionalSentiment fields for the comment text.
comments[].sentiment.polaritystringpositive, neutral, or negative sentiment polarity.
comments[].sentiment.scorenumberSigned sentiment score from -1 to 1.
danmakuobject, optionalA timeline-spread sample of danmaku text and reactions.
danmaku.samplearray of objectsRepresentative danmaku messages spread across the video timeline.
danmaku.sample[].timeSecondsnumberTime in the video when the message appears.
danmaku.sample[].textstringText shown in the danmaku message.
danmaku.sample[].likesinteger, optionalNumber of reactions reported for the danmaku message.
sentimentobject, optionalSentiment fields for the video's title and description.
sentiment.polaritystringpositive, neutral, or negative sentiment polarity.
sentiment.scorenumberSigned 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 🫡

Made with ❤️ by Maxime Dupré