# Bilibili Video and Creator Details Scraper (`arjun_code/bilibili-details-scraper`) Actor

Get Bilibili video details and UP creator profiles from URLs or IDs. Export video metrics, tags, descriptions and optional per-part metadata, or creator followers, verification, membership, live rooms and content counts. No Bilibili login or API key required.

- **URL**: https://apify.com/arjun\_code/bilibili-details-scraper.md
- **Developed by:** [Arjun AI](https://apify.com/arjun_code) (community)
- **Categories:** Videos, Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 video detail results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Bilibili Video and Creator Details Scraper

Look up Bilibili (哔哩哔哩 / B站) videos and UP creator profiles using direct URLs or IDs. Export video descriptions, engagement metrics, tags, categories and optional individual video parts, or public creator profiles with followers, verification, membership, live rooms and content counts.

Choose **Videos** or **Creators (UP profiles)** for each run. Video results include the uploader's basic identity from the video response. Creator lookups retrieve the profile itself and its public counts; they do not enumerate the creator's videos.

The Actor operates without a Bilibili login or API key. Values depend on what Bilibili returns publicly. Data is exported to the default Dataset as JSON, CSV, Excel, JSONL or other formats supported by Apify.

### What you can collect

- **Video metadata:** title, description, cover, publication and creation timestamps, duration, categories and tags.
- **Video engagement:** views, likes, coins, favorites, shares, danmaku and comment counts.
- **Multi-part videos:** the part count is included by default. Enable `includeParts` to also get each part's CID, title, duration, dimensions, optional first frame and direct page URL, nested under one video record.
- **Author identity:** UID, name, profile URL and avatar, plus credited co-creators when Bilibili returns them.
- **UP profiles:** biography, avatar, banner, followers, following, account level, certification, membership and profile badges.
- **Creator counts:** separate card archive and space video counts, received likes, articles, audio, courses and collections.
- **Live rooms:** room existence, live and looping status, room ID, URL, title and cover.
- **Visible outcomes:** unavailable or invalid inputs produce a `lookupStatus` row. A usable profile with unavailable optional sections is marked `partial`.

### Ready-to-run examples

- [Get Bilibili Video Details by URL or BV ID](https://apify.com/arjun_code/bilibili-details-scraper/examples/get-bilibili-video-details-by-url-or-bv-id) — starts with one video and compact output; enable parts when needed.
- [Get Bilibili UP Creator Profiles by UID](https://apify.com/arjun_code/bilibili-details-scraper/examples/get-bilibili-up-creator-profiles-by-uid) — starts with two public UP profiles, using a profile URL and a UID.

These public Tasks are editable starting points, not free runs. Review their inputs and maximum charge before starting them. Both use the latest Actor build.

### Input

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `lookupType` | `videos` or `users` | `videos` | Select the input and result type. `users` is displayed as **Creators (UP profiles)**. |
| `sources` | array of 1–50 strings | Required | Direct URLs or IDs matching the chosen type. One value per line in the form. |
| `includeParts` | boolean | `false` | Videos only. Set to `true` to include all returned parts in a nested `parts` array. When false or omitted, the result keeps `partCount` but has no `parts` field. Ignored in Creators mode. |

#### Accepted inputs

| Mode | Accepted values |
| --- | --- |
| Videos | `https://www.bilibili.com/video/BV...`, `/video/av...` URLs, BV IDs, `av`-prefixed IDs, or numeric AV IDs as strings |
| Creators | `https://space.bilibili.com/946974` or a numeric UID such as `"946974"` |

A digits-only ID is an **AV ID in Videos mode** and a **UID in Creators mode**. Nicknames are not accepted as unique identifiers. Search for a nickname using a search Actor first, then pass the returned UID here.

Use full Bilibili video or space URLs. `b23.tv` short links, series/season URLs and paid-course URLs are not supported in this version. A video URL containing `?p=2` still looks up the complete video submission. With `includeParts: true`, the result contains all returned parts, not just part 2.

Each list entry is processed independently. Repeating a video or profile, including through different ID forms, can create multiple result rows and result events. Submit each target once when you want a single record.

#### Look up a video

```json
{
  "lookupType": "videos",
  "sources": ["https://www.bilibili.com/video/BV1qZSLBYEpa"],
  "includeParts": false
}
```

Change `includeParts` to `true` when you need individual part details. Parts come from the same video response, so this option changes the exported output without adding requests or separate result events.

#### Look up UP profiles

```json
{
  "lookupType": "users",
  "sources": [
    "https://space.bilibili.com/946974",
    "23947287",
    "2"
  ]
}
```

### Real output examples

These are actual cloud results collected on **September 7, 2026**, using build **0.1.1**. Build 0.1.2 keeps the same result fields. Metrics and profile text can change between runs; nulls below are the values returned in that capture, not placeholders.

#### Video sample

This is one video record with `includeParts: false`. The native `partCount` is 181; parts are not inferred from the number mentioned in the video's title.

```json
{
  "recordType": "video",
  "inputValue": "https://www.bilibili.com/video/BV1qZSLBYEpa",
  "bvid": "BV1qZSLBYEpa",
  "aid": 115626794420560,
  "cid": 34332936080,
  "url": "https://www.bilibili.com/video/BV1qZSLBYEpa",
  "title": "【整整600集】清华大学196小时讲完的AI人工智能从入门到精通全套教程，全程干货无废话！学完变大佬！这还学不会，我退出IT圈！机器学习-深度学习-opencv",
  "description": "课程涵盖基础概念、算法原理、实践应用，从零开始，深入浅出。通过实例演示，掌握神经网络、决策树、支持向量机等关键技术。适合初学者和进阶者，助您快速提升技能，开启智能时代新篇章。立即观看，开启您的AI学习之旅！",
  "thumbnailUrl": "https://i0.hdslb.com/bfs/archive/886e0ea5bd30fdd9ddb66eb5ce108b1a3193d450.jpg",
  "durationSeconds": 195568,
  "durationText": "54:19:28",
  "publishTimestamp": 1764325216,
  "publishedAt": "2025-11-28T10:20:16Z",
  "createdTimestamp": 1764325216,
  "createdAt": "2025-11-28T10:20:16Z",
  "categoryId": 231,
  "categoryName": null,
  "categoryV2Id": 2096,
  "categoryV2Name": null,
  "copyright": 1,
  "state": 0,
  "viewCount": 1034494,
  "likeCount": 24274,
  "coinCount": 19285,
  "favoriteCount": 60887,
  "shareCount": 11551,
  "danmakuCount": 8140,
  "commentCount": 14215,
  "authorMid": 1741962246,
  "authorName": "IT界扛霸子",
  "authorUrl": "https://space.bilibili.com/1741962246",
  "authorAvatarUrl": "https://i0.hdslb.com/bfs/face/330a8ac40ac349d550961219984ba2fc269661ab.jpg",
  "tags": [
    "计算机",
    "人工智能",
    "IT",
    "AI",
    "编程",
    "机器学习",
    "深度学习",
    "OpenCV",
    "人工智能课程",
    "人工智能入门"
  ],
  "partCount": 181,
  "dimension": {
    "width": 1920,
    "height": 1080,
    "rotate": 0
  },
  "rights": {
    "bp": 0,
    "elec": 0,
    "download": 1,
    "movie": 0,
    "pay": 0,
    "hd5": 0,
    "no_reprint": 1,
    "autoplay": 1,
    "ugc_pay": 0,
    "is_cooperation": 0,
    "ugc_pay_preview": 0,
    "no_background": 0,
    "clean_mode": 0,
    "is_stein_gate": 0,
    "is_360": 0,
    "no_share": 0,
    "arc_pay": 0,
    "free_watch": 0
  },
  "staff": [],
  "scrapedAt": "2026-09-07T06:27:30.073355Z"
}
```

#### Creator sample

This profile's three requested sections succeeded. A `complete` profile can still contain null values when a source field is absent.

```json
{
  "recordType": "user",
  "detailStatus": "complete",
  "inputValue": "https://space.bilibili.com/946974",
  "mid": 946974,
  "name": "影视飓风",
  "profileUrl": "https://space.bilibili.com/946974",
  "avatarUrl": "https://i0.hdslb.com/bfs/face/c1733474892caa45952b2c09a89323157df7129a.jpg",
  "bannerUrl": "https://i1.hdslb.com/bfs/space/8e57216d2e53d1d4afcf0a897ab59bb053bbee1f.png",
  "description": "无限进步！｜商务合作请联系邮箱：bd@ysjf.com（邮件中麻烦备注公司、咨询内容）｜店铺名：影视飓风",
  "gender": "男",
  "level": 6,
  "followerCount": 17367177,
  "followingCount": 685,
  "archiveCount": 939,
  "videoCount": 927,
  "totalLikeCount": 124559272,
  "articleCount": 126,
  "audioCount": 4,
  "courseCount": 4,
  "collectionCount": 24,
  "isVerified": true,
  "verificationType": "personal",
  "verificationRole": 7,
  "verificationTitle": "2025百大UP主、2023年度最高人气奖UP主、课堂优质讲师",
  "verificationDescription": null,
  "vipType": 2,
  "vipStatus": 1,
  "vipLabel": "十年大会员",
  "vipDueTimestamp": 2102774400000,
  "vipExpiresAt": "2036-08-19T16:00:00Z",
  "isSeniorMember": false,
  "accountState": 0,
  "avatarDecoration": null,
  "badge": {
    "id": 89,
    "name": "2020百大UP主",
    "imageUrl": "https://i1.hdslb.com/bfs/face/dbc78ef8c88f15171f0d12587fb2731f999483a6.png",
    "level": "稀有勋章",
    "condition": "2020年在创作力、影响力、口碑力等维度综合数据出色的UP主"
  },
  "hasLiveRoom": true,
  "isLive": false,
  "isLooping": false,
  "liveRoomId": 173551,
  "liveRoomUrl": "https://live.bilibili.com/173551",
  "liveTitle": "假装在BIRTV现场！展会限定在这里！！",
  "liveCoverUrl": "https://i0.hdslb.com/bfs/live/new_room_cover/4ebdfdff681b0d8ec6f0daa60c1a48251f32efcf.jpg",
  "scrapedAt": "2026-09-07T06:29:54.480252Z"
}
```

### Output fields

Fields use consistent names while retaining values from Bilibili's public responses. URLs assembled from IDs, formatted times and durations, and boolean/enum conversions are explicitly described below. No performance scores, inferred demographics or estimated engagement values are added.

Records contain fields for their own type. A creator row does not contain empty video metrics, and a video row does not contain a full creator profile.

#### Video records — `recordType: "video"`

| Fields | Description and source |
| --- | --- |
| `bvid`, `aid`, `cid` | Native video and content identifiers. |
| `url` | Canonical video URL assembled from the returned BV ID. |
| `title`, `description`, `thumbnailUrl` | Native `title`, `desc`, `pic`. |
| `durationSeconds`, `durationText` | Video-level native `duration` and a formatted version. Enable `includeParts` for individual part durations. |
| `publishTimestamp`, `publishedAt` | Native `pubdate` in Unix seconds and its ISO 8601 UTC representation. |
| `createdTimestamp`, `createdAt` | Native `ctime` in Unix seconds and its ISO 8601 UTC representation. It can differ from publication time. |
| `categoryId`, `categoryName` | Native `tid`, `tname`. |
| `categoryV2Id`, `categoryV2Name` | Native `tid_v2`, `tname_v2`, when provided. |
| `copyright`, `state` | Native numeric codes, preserved without inferred classifications. Copyright code 1 means original and 2 means repost. |
| `viewCount`, `likeCount`, `coinCount` | Native video `stat.view`, `stat.like`, `stat.coin`. |
| `favoriteCount`, `shareCount` | Native video `stat.favorite`, `stat.share`. |
| `danmakuCount`, `commentCount` | Native `stat.danmaku` and `stat.reply`; these are different kinds of comments. |
| `authorMid`, `authorName`, `authorAvatarUrl` | Basic identity from `owner.mid`, `owner.name`, `owner.face`. |
| `authorUrl` | Space URL assembled from the owner's UID. |
| `tags` | Names in the video's returned `Tags` list. |
| `partCount` | Native `videos` count. This field stays in video records regardless of `includeParts`; an unavailable source value remains null. |
| `parts` | Returned `pages`, represented as the part objects described below. Included only when `includeParts` is `true`; otherwise the key is omitted entirely. |
| `dimension` | Native dimensions object, including width, height and rotation when present. |
| `rights` | Native video rights flags, without an inferred legal interpretation. |
| `staff` | Public credited co-creators, with `mid`, `name`, `role`, `avatarUrl`. |

When `includeParts` is enabled, each object in `parts` contains:

| Field | Meaning |
| --- | --- |
| `cid` | Native part content ID. |
| `page` | Native one-based part number. |
| `title` | Native `part` title. |
| `durationSeconds`, `durationText` | This part's duration and its formatted value. |
| `firstFrameUrl` | Native first-frame image when returned. This may be absent even when the main video cover is available. |
| `dimension` | Native part dimensions. |
| `url` | Video URL with the corresponding `?p=` value. |

Requested parts are nested in one video result, not separate Dataset rows or extra result events. The Actor does not download media, comments, danmaku messages or subtitle contents.

#### Creator records — `recordType: "user"`

| Fields | Description and source |
| --- | --- |
| `mid`, `name` | Native `card.mid`, `card.name`. |
| `profileUrl` | Space URL assembled from the UID. |
| `avatarUrl`, `bannerUrl` | Native avatar and space background image URLs. |
| `description` | `card.sign`. The card's empty `description` placeholder is not used. |
| `gender` | Original public `sex` text, such as 男, 女 or 保密; never inferred. |
| `level` | `card.level_info.current_level`. |
| `followerCount`, `followingCount` | Card followers and account following count. Viewer-relative follow state is not used. |
| `archiveCount` | `archive_count` from the public user card. |
| `videoCount` | `video` from the space navigation statistics. This can differ from `archiveCount`. |
| `totalLikeCount` | Native card `like_num`. |
| `articleCount`, `audioCount`, `courseCount`, `collectionCount` | Navigation `article`, `audio`, `pugv`, `season_num`. |
| `isVerified`, `verificationType` | Mapped from native verification type: personal, organization or unverified; missing values remain null. |
| `verificationRole`, `verificationTitle`, `verificationDescription` | Native certification role, title and supplemental description. |
| `vipType`, `vipStatus`, `vipLabel` | Native VIP type, current status and displayed membership text. VIP membership is separate from creator verification. |
| `vipDueTimestamp`, `vipExpiresAt` | Native VIP expiry in **milliseconds** and its ISO 8601 UTC value. Nonpositive timestamps are not converted into dates. |
| `isSeniorMember`, `accountState` | Native senior-member flag and `spacesta` account code. |
| `avatarDecoration` | Decoration `id`, `name`, `imageUrl`, `animatedImageUrl`; absent decoration is null. The enhanced image may be identical to the static image. |
| `badge` | Native profile badge `id`, `name`, `imageUrl`, `level`, `condition`. |
| `hasLiveRoom`, `isLive`, `isLooping` | Mapped from native room, live and round status flags. |
| `liveRoomId`, `liveRoomUrl`, `liveTitle`, `liveCoverUrl` | Public live-room identity, title and cover. A room can have a title while offline. |
| `detailStatus` | `complete` if card, navigation counts and live-room requests succeeded; `partial` if the card succeeded but an optional section failed. |

`complete` describes the requested sections, not a promise that every field is non-null. A creator may have no badge, no certification description or no active live room. Failed optional sections remain null, and their reasons are available in the `OUTPUT` summary.

Registration date, school, inferred country, private balances and creator-wide accumulated views/reads are not included in this version. They were not reliably available through the anonymous endpoints used here. Public contact details written into a biography remain in `description`; there is no claim of a native email field.

#### Common collection metadata

`recordType`, `inputValue`, `scrapedAt` and `detailStatus` are Actor fields. `scrapedAt` is ISO 8601 UTC. Other timestamp fields document their source and unit; video timestamps are seconds while VIP expiry timestamps are milliseconds.

#### Lookup statuses

Inputs that cannot produce a usable detail record create a visible row such as the following illustrative example:

```json
{
  "recordType": "lookupStatus",
  "lookupType": "users",
  "inputValue": "not-a-uid",
  "status": "invalidInput",
  "errorCode": "INVALID_INPUT",
  "message": "Enter a numeric UID or a https://space.bilibili.com/UID URL. Nicknames are not unique IDs.",
  "scrapedAt": "2026-09-07T00:00:00Z"
}
```

Possible statuses include `invalidInput`, `notFound`, `unavailable`, `blocked`, `failed` and `chargeLimitReached`. Request blocking is reported separately from a missing video or account. Connection setup failures use `failed` with `PROXY_UNAVAILABLE` or `SESSION_UNAVAILABLE`, rather than claiming the input does not exist. These rows do not trigger a custom result event.

The Dataset has overview, video, creator and outcome table views. The video and creator views include the original input, status, error code and message so failed inputs can be identified without switching views. Views select columns; they do not remove records from JSON exports.

### Run summary

The default Key-Value Store record `OUTPUT` contains result totals and per-input outcomes. For partial profiles, `resultsByInput[].issues` identifies which section could not be retrieved. Request counts, fallback counts and timings also live here, keeping operational diagnostics out of normal result rows.

### Pricing

This Actor uses **pay-per-event pricing**, with platform usage included. The active prices as of September 7, 2026 are:

| Event | Price | What counts |
| --- | --- | --- |
| `bilibili-video-detail-result` | **$8 / 1,000 results** ($0.008 each) | One usable video detail record saved to the Dataset. Basic author data and optional parts belong to this one event. |
| `bilibili-creator-detail-result` | **$8 / 1,000 results** ($0.008 each) | One usable creator profile saved to the Dataset, including `partial` profiles when optional counts or live-room data are unavailable. |
| `apify-actor-start` | **$0.00005 per start-event unit** | Apify applies one unit per GB of run memory, with a minimum of one unit. At the default 512 MB, the start charge is $0.00005 per run. |

`lookupStatus` rows have **no result charge**, but the start charge still applies even if the run produces only statuses. One video with 181 returned parts is one video result, not 181 paid results. Repeated inputs are processed and charged independently if they produce usable records.

For example, a default-memory run that saves two usable profiles costs **$0.01605**: two result events plus one start-event unit. This is an example based on the listed prices, not a fixed fee per run. Check the [current Pricing tab](https://apify.com/arjun_code/bilibili-details-scraper/pricing) before running.

The minimum selectable maximum charge is $0.01; it is a spending-limit setting, **not a minimum bill**. The Actor checks whether another result event fits before processing another input and uses the SDK's charged Dataset writes. Inputs skipped because of the limit receive `chargeLimitReached` statuses. See [Apify's spending-limit documentation](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event#respect-user-spending-limits).

### Use the API

Install `apify-client` and set an `APIFY_TOKEN` environment variable with your Apify API token. No Bilibili login or Bilibili API key is needed. This example starts a paid run with a $1 maximum event charge and prints its Dataset rows, including any lookup statuses:

```python
import os
from decimal import Decimal

from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("arjun_code/bilibili-details-scraper").call(
    run_input={
        "lookupType": "videos",
        "sources": ["BV1qZSLBYEpa"],
        "includeParts": False,
    },
    memory_mbytes=512,
    max_total_charge_usd=Decimal("1.00"),
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

For profiles, change `lookupType` to `users` and use UIDs or space URLs in `sources`. The [Apify Python client reference](https://docs.apify.com/api/client/python/reference/class/ActorClient#call) describes run options and waiting behavior.

### FAQ

#### Can a single run process videos and creators together?

Select one lookup type per run. Use two runs to get both datasets. The same numeric input otherwise has different meanings as an AV ID and a creator UID.

#### Does a video lookup also retrieve the complete UP profile?

Video rows include the basic author fields already returned in the video response. To get the profile, use Creators mode with `authorMid`. A video lookup does not enumerate the creator's other uploads.

#### Why is the parts array missing?

`includeParts` defaults to `false` to keep results compact, especially for long courses with many parts. The video result still includes `partCount`. Set `includeParts: true` to include all parts returned by Bilibili in the same record. If Bilibili returns no part entries, the requested array is empty. This setting does not change the request count or add a separate result event; it is ignored in Creators mode.

#### Why do archiveCount and videoCount differ?

They come from different Bilibili endpoints. In the September 4, 2026 source inspection, one profile returned a card archive count of 939 and a navigation video count of 927. The Actor preserves both source values without interpreting the difference as deleted or private videos.

#### Why is the article count taken from another endpoint?

The same source inspection returned card `article_count: 0` while navigation `article` was 126. This Actor uses navigation statistics for articles instead of the card placeholder.

#### Does null mean zero?

No. Missing or inaccessible values remain null. A returned zero remains zero. Empty source descriptions are normalized to null and an empty tag list remains an empty list.

#### Does the Actor guarantee every public field?

No. Fields vary by account, video and Bilibili response. This version focuses on the metadata exposed by its supported endpoints; it does not estimate unavailable fields.

#### Are emails available?

If a creator publishes contact information in their biography, it is preserved in `description`. The Actor does not access a private contact directory or invent an `email` field.

#### Can I submit 50 inputs?

The input limit is 50 entries per run. Inputs are processed sequentially and results are saved as they complete. Enabling `includeParts` for multi-part videos can create much larger individual records. Start with a few entries to review the output for your use case; the limit is a batch size, not a runtime guarantee.

### Support

Report problems through the [Actor's Issues tab](https://apify.com/arjun_code/bilibili-details-scraper/issues/open). Include the run ID, the public input URL or ID, selected lookup type, and relevant Dataset status or partial-section issue. Do not post API tokens, cookies or other credentials.

### Disclaimer

This is an independent tool and is not affiliated with or endorsed by Bilibili. It retrieves public metadata exposed at request time; availability and field values can change.

# Actor input Schema

## `lookupType` (type: `string`):

Videos accepts video URLs, BV IDs, av-prefixed IDs or numeric AV IDs. Creators accepts numeric UIDs or space.bilibili.com profile URLs. Choose one type per run.

## `sources` (type: `array`):

Add 1–50 URLs or IDs, one per line, matching the selected lookup type. A digits-only ID means AV ID in Videos mode and UID in Creators mode. For creator profiles, use an exact UID instead of a nickname. Use full bilibili.com video or space.bilibili.com profile links; b23.tv short links are not supported in this version.

## `includeParts` (type: `boolean`):

Include all returned video parts in a nested parts array, with each part's CID, title, duration, dimensions and URL. Off by default: partCount is still returned, but the parts field is omitted. Ignored in Creators mode. This option changes the output only; it does not add requests or separate result events.

## Actor input object example

```json
{
  "lookupType": "videos",
  "sources": [
    "https://www.bilibili.com/video/BV1qZSLBYEpa"
  ],
  "includeParts": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

Totals and per-input outcomes, including reasons why a creator record is partial.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sources": [
        "https://www.bilibili.com/video/BV1qZSLBYEpa"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("arjun_code/bilibili-details-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "sources": ["https://www.bilibili.com/video/BV1qZSLBYEpa"] }

# Run the Actor and wait for it to finish
run = client.actor("arjun_code/bilibili-details-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sources": [
    "https://www.bilibili.com/video/BV1qZSLBYEpa"
  ]
}' |
apify call arjun_code/bilibili-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arjun_code/bilibili-details-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/83Wc7t5aT6kFVTq1P/builds/i49bdi71i6rocbjKF/openapi.json
