# Bilibili Creator Scraper (`maximedupre/bilibili-creator`) Actor

Find public Bilibili creators by keyword or look up known profiles. Get follower counts, biographies, account details, and available uploads to build and review creator lists.

- **URL**: https://apify.com/maximedupre/bilibili-creator.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 creator profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 👥 Build a list of Bilibili creators

Bilibili Creator Scraper is for research and content teams who need public creator profiles. Find creators by keyword or look up known accounts. Get follower counts, biographies, account details, and available uploads in one row per creator so you can review a roster without joining separate exports.

- Build a topic roster with **[Bilibili creator search](https://apify.com/maximedupre/bilibili-creator/examples/bilibili-creator-search)**.
- Find public biography contacts with **[Bilibili creator emails](https://apify.com/maximedupre/bilibili-creator/examples/bilibili-creator-emails)**.
- Look up known accounts with the **[Bilibili creator profile scraper](https://apify.com/maximedupre/bilibili-creator/examples/bilibili-creator-profile-scraper)**.
- Review **[Bilibili most viewed creator videos](https://apify.com/maximedupre/bilibili-creator/examples/bilibili-most-viewed-creator-videos)** to compare a creator's uploads.
- Mark newly observed uploads with the **[Bilibili new upload tracker](https://apify.com/maximedupre/bilibili-creator/examples/bilibili-new-upload-tracker)**.

#### 📦 Creator profiles with audience and upload data

Each row contains a public creator name and profile link. Available details include audience counts, account level, verification, VIP membership, biography email addresses, live-room details, and uploads with video data and engagement counts. Optional details are omitted when they cannot be read. A valid profile can still be saved when some extra details are unavailable.

The Actor also tries to get median views for the 20 newest public videos. This sample stays the same when you change upload limits, order, or date filters, or turn uploads off. It uses all available videos when fewer than 20 exist. For an even sample, it averages the two middle view counts.

#### ▶️ Find and collect creator profiles

1. Choose Keywords or Known creators.
2. Enter search phrases, or up to 1,000 numeric creator IDs and Bilibili profile URLs.
3. Set a creator limit and any follower filters. Choose whether to include uploads and how many to collect.
4. Run the Actor and open the dataset to review or export the creator rows.

Fields for the other way to find creators are ignored. The Actor saves a creator at most once per run, even if several inputs match the same account. Search order controls discovery; known creators can finish in a different order from the submitted list.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `maxItems` | integer | Run-wide creator limit, at least 0. Omitted or 0 means all available matches. The form prefill is 5, not a schema default. Does not limit uploads. |
| `findBy` | string | Required: `keywords` or `creators`. The form prefill is `keywords`; there is no schema default. |
| `keywords` | array of strings | Required for `keywords`. Enter non-empty search phrases for creator names or channels, one whole phrase per entry. Form prefill: `["科技"]`. Ignored for `creators`. |
| `searchOrder` | string | For keywords: `relevance`, `followers`, or `level`. Defaults to `relevance`. Follower and level choices put the highest counts first. Ignored for known creators. |
| `contactsOnly` | boolean | For keywords, keeps creators whose public biography contains an email address that matches the Actor's email syntax. Defaults to `false`. Email extraction still runs when off. Ignored for known creators. |
| `creators` | array of strings | Required for `creators`. Up to 1,000 entries. Accepts positive numeric IDs or full `https://space.bilibili.com/` profile URLs with a numeric ID. IDs and URLs may be mixed. Ignored for keywords. |
| `minFollowers` | integer | Optional inclusive lower follower bound, at least 0. Omitted means no lower bound. Applies to both choices. |
| `maxFollowers` | integer | Optional inclusive upper follower bound, at least 0. Omitted means no upper bound. Must be at least `minFollowers` when both are set. |
| `includeUploads` | boolean | Defaults to `true`. When `false`, `uploads` is empty. Median views are still collected when available. |
| `maxUploadsPerCreator` | integer | At least 0. Defaults to 5 when omitted. A positive value caps matching uploads per creator; 0 collects all available matches. Applies only with uploads on. Tracking requires an explicit 0. |
| `uploadOrder` | string | `newest`, `views`, or `favorites`. Defaults to `newest`. Sorts included uploads by newest, most viewed, or most favorited. Does not change the median sample. |
| `publishedAfter` | string | Optional inclusive upload start date in `YYYY-MM-DD`, using UTC. Omit for no start date. Does not change the median sample. |
| `publishedBefore` | string | Optional inclusive upload end date in `YYYY-MM-DD`, using UTC. Omit for no end date. Must be on or after `publishedAfter`. Does not change the median sample. |
| `trackNewUploads` | boolean | Defaults to `false`. Requires `includeUploads: true` and explicit `maxUploadsPerCreator: 0`. Compares uploads with a prior successful observation for the same creator and date scope. The first check sets the starting record. Failed checks do not replace it. |

Upload settings and date filters apply to both ways to find creators. Date filters have no effect on included uploads when uploads are off. Tracking with uploads off, or with an omitted or positive upload limit, is rejected.

**Input example**

This is the public input from the successful current-beta default-input run.

```json
{
  "maxItems": 5,
  "findBy": "keywords",
  "keywords": [
    "科技"
  ],
  "searchOrder": "relevance",
  "contactsOnly": false,
  "includeUploads": true,
  "maxUploadsPerCreator": 5,
  "uploadOrder": "newest",
  "trackNewUploads": false
}
```

#### 🧾 Output

**Output fields**

One dataset row represents one creator. Only `name` and `profileUrl` are required by the dataset schema. Other fields depend on available public data. Nested paths below describe fields inside objects and arrays.

| Field | Type | What it does |
| --- | --- | --- |
| `name` | string | Public creator name. |
| `profileUrl` | string | Bilibili profile link; use it to match the same creator across exports. |
| `avatarUrl` | string | Avatar image URL. |
| `biography` | string | Public biography text. |
| `followers` | integer | Follower count. |
| `following` | integer | Number of accounts followed. |
| `totalLikes` | integer | Creator's total likes reported by Bilibili. |
| `videoCount` | integer | Published video count. |
| `accountLevel` | integer | Bilibili account level. |
| `verification` | object | Public official verification details. |
| `verification.type` | string | Bilibili verification type. |
| `verification.title` | string | Verification title. |
| `verification.description` | string | Verification text. |
| `vip` | object | Public VIP membership details. |
| `vip.type` | string | Membership type. |
| `vip.status` | string | Membership status. |
| `vip.label` | string | Public membership label. |
| `vip.expiresAt` | string | Public membership end date and time. |
| `gender` | string | Gender stated by the creator. |
| `birthday` | string | Public birthday, with the date detail available. |
| `school` | string | School stated by the creator. |
| `liveRoom` | object | Public live-room details. |
| `liveRoom.url` | string | Live-room page URL. |
| `liveRoom.title` | string | Live-room title. |
| `liveRoom.status` | string | Current status stated by Bilibili. |
| `contacts` | object | Contacts found in the public biography. |
| `contacts.emails` | array of strings | Published email addresses that match the Actor's email syntax. This does not verify delivery. |
| `medianViews` | number | Median views for the 20 newest public videos, or the available smaller sample. Omitted when no valid sample is available. |
| `uploads` | array of objects | Collected uploads in the chosen order and date range. Empty when uploads are off or no uploads match. |
| `uploads[].videoId` | string | Bilibili video ID. |
| `uploads[].title` | string | Video title. |
| `uploads[].url` | string | Video page URL. |
| `uploads[].description` | string | Video description. |
| `uploads[].coverUrl` | string | Cover image URL. |
| `uploads[].publishedAt` | string | Publication date and time. |
| `uploads[].durationSeconds` | number | Video length in seconds. |
| `uploads[].category` | string | Bilibili video category. |
| `uploads[].tags` | array of strings | Public video tags. |
| `uploads[].dimensions` | object | Video frame size and rotation. |
| `uploads[].dimensions.width` | integer | Width in pixels. |
| `uploads[].dimensions.height` | integer | Height in pixels. |
| `uploads[].dimensions.rotation` | integer | Rotation in degrees. |
| `uploads[].originalWork` | boolean | Whether Bilibili marks the video as original work. |
| `uploads[].parts` | array of objects | Parts belonging to the video. |
| `uploads[].parts[].partId` | string | Bilibili part ID. |
| `uploads[].parts[].title` | string | Part title. |
| `uploads[].parts[].durationSeconds` | number | Part length in seconds. |
| `uploads[].parts[].dimensions` | object | Part frame size and rotation. |
| `uploads[].parts[].dimensions.width` | integer | Width in pixels. |
| `uploads[].parts[].dimensions.height` | integer | Height in pixels. |
| `uploads[].parts[].dimensions.rotation` | integer | Rotation in degrees. |
| `uploads[].honors` | array of objects | Honors reported by Bilibili. |
| `uploads[].honors[].type` | string | Honor type. |
| `uploads[].honors[].description` | string | Honor text. |
| `uploads[].rankingHistory` | array of objects | Reported ranking history. |
| `uploads[].rankingHistory[].name` | string | Ranking name. |
| `uploads[].rankingHistory[].position` | integer | Reported rank, starting at 1. |
| `uploads[].isNew` | boolean | Present after a valid tracking comparison. `true` means absent from the prior successful observation for this date scope. Omitted on the first check or without a valid comparison. |
| `uploads[].views` | integer | View count. |
| `uploads[].likes` | integer | Like count. |
| `uploads[].coins` | integer | Coin count. |
| `uploads[].favorites` | integer | Favorite count. |
| `uploads[].shares` | integer | Share count. |
| `uploads[].comments` | integer | Comment count, not comment text. |
| `uploads[].danmaku` | integer | Danmaku count, not message text. |

**Example creator row**

This complete row comes from the successful current-beta default-input run.

```json
{
  "name": "国防科技大学",
  "profileUrl": "https://space.bilibili.com/329365601",
  "avatarUrl": "https://i2.hdslb.com/bfs/face/693b8ead4a636879f7eb70f2d42dd9ecd8642ef6.jpg",
  "biography": "厚德博学，强军兴国",
  "followers": 535114,
  "following": 10,
  "totalLikes": 1683537,
  "videoCount": 204,
  "accountLevel": 6,
  "verification": {
    "type": "1",
    "title": "国防科技大学官方账号",
    "description": "国防科技大学官方账号"
  },
  "vip": {
    "type": "0",
    "status": "0"
  },
  "gender": "保密",
  "birthday": "01-01",
  "contacts": {
    "emails": []
  },
  "uploads": [
    {
      "videoId": "BV1YKHq6JEzK",
      "title": "哪怕躺着，他骨子里也还是一名挺立的军人",
      "url": "https://www.bilibili.com/video/BV1YKHq6JEzK",
      "coverUrl": "http://i0.hdslb.com/bfs/archive/f39f795199a4909dcb63931cb1d46ebb48756730.jpg",
      "publishedAt": "2026-10-04T00:40:00.000Z",
      "durationSeconds": 91,
      "category": "2080",
      "tags": [
        "时代楷模"
      ],
      "dimensions": {
        "width": 1080,
        "height": 1920,
        "rotation": 0
      },
      "parts": [
        {
          "partId": "42431546823",
          "title": "哪怕躺着，他骨子里也还是一名挺立的军人",
          "durationSeconds": 91,
          "dimensions": {
            "width": 1080,
            "height": 1920,
            "rotation": 0
          }
        }
      ],
      "honors": [],
      "rankingHistory": [],
      "views": 2091,
      "likes": 198,
      "coins": 5,
      "favorites": 19,
      "shares": 2,
      "comments": 4,
      "danmaku": 1
    },
    {
      "videoId": "BV19THq6UEMZ",
      "title": "王戟虽然无法站立，但他依然挺立在知识传播高地",
      "url": "https://www.bilibili.com/video/BV19THq6UEMZ",
      "coverUrl": "http://i2.hdslb.com/bfs/archive/c3fbc922f0cb2f79a84f1daca66358655c144bff.jpg",
      "publishedAt": "2026-10-04T00:00:00.000Z",
      "durationSeconds": 61,
      "category": "2080",
      "tags": [
        "时代楷模"
      ],
      "dimensions": {
        "width": 1080,
        "height": 1920,
        "rotation": 0
      },
      "parts": [
        {
          "partId": "42431416784",
          "title": "王戟虽然无法站立，但他依然挺立在知识传播高地",
          "durationSeconds": 61,
          "dimensions": {
            "width": 1080,
            "height": 1920,
            "rotation": 0
          }
        }
      ],
      "honors": [],
      "rankingHistory": [],
      "views": 1214,
      "likes": 230,
      "coins": 1,
      "favorites": 12,
      "shares": 1,
      "comments": 3,
      "danmaku": 0
    },
    {
      "videoId": "BV1RAHq6HER3",
      "title": "王戟虽然无法站立，但他依然挺立在知识传播高地",
      "url": "https://www.bilibili.com/video/BV1RAHq6HER3",
      "coverUrl": "http://i0.hdslb.com/bfs/archive/caa6274eafa511b39651c6f470ec76a9083e91d4.jpg",
      "publishedAt": "2026-10-03T14:30:00.000Z",
      "durationSeconds": 61,
      "category": "2083",
      "tags": [
        "时代楷模"
      ],
      "dimensions": {
        "width": 1080,
        "height": 1920,
        "rotation": 0
      },
      "parts": [
        {
          "partId": "42431221358",
          "title": "王戟虽然无法站立，但他依然挺立在知识传播高地",
          "durationSeconds": 61,
          "dimensions": {
            "width": 1080,
            "height": 1920,
            "rotation": 0
          }
        }
      ],
      "honors": [],
      "rankingHistory": [],
      "views": 1494,
      "likes": 286,
      "coins": 6,
      "favorites": 14,
      "shares": 2,
      "comments": 0,
      "danmaku": 0
    },
    {
      "videoId": "BV1vPHq6DETE",
      "title": "最好的爱，历经风雨依旧相守相依，身处逆境依然向阳而生",
      "url": "https://www.bilibili.com/video/BV1vPHq6DETE",
      "coverUrl": "http://i1.hdslb.com/bfs/archive/4ca28e9a55fffa0b47eb3cdd7322513e7e110066.jpg",
      "publishedAt": "2026-10-03T13:34:35.000Z",
      "durationSeconds": 112,
      "category": "2083",
      "tags": [
        "时代楷模"
      ],
      "dimensions": {
        "width": 1080,
        "height": 1920,
        "rotation": 0
      },
      "parts": [
        {
          "partId": "42431152378",
          "title": "最好的爱，历经风雨依旧相守相依，身处逆境依然向阳而生",
          "durationSeconds": 112,
          "dimensions": {
            "width": 1080,
            "height": 1920,
            "rotation": 0
          }
        }
      ],
      "honors": [],
      "rankingHistory": [],
      "views": 1622,
      "likes": 323,
      "coins": 15,
      "favorites": 19,
      "shares": 2,
      "comments": 4,
      "danmaku": 1
    },
    {
      "videoId": "BV1SAaJ69EdE",
      "title": "“时代楷模”王戟同志先进事迹报告会在京举行",
      "url": "https://www.bilibili.com/video/BV1SAaJ69EdE",
      "coverUrl": "http://i0.hdslb.com/bfs/archive/2b427d587096fbdde6e90e03d94bd15309324149.jpg",
      "publishedAt": "2026-09-29T01:09:40.000Z",
      "durationSeconds": 57,
      "category": "2080",
      "tags": [
        "时代楷模"
      ],
      "dimensions": {
        "width": 1920,
        "height": 1080,
        "rotation": 0
      },
      "parts": [
        {
          "partId": "42291826018",
          "title": "“时代楷模”王戟同志先进事迹报告会在京举行",
          "durationSeconds": 57,
          "dimensions": {
            "width": 1920,
            "height": 1080,
            "rotation": 0
          }
        }
      ],
      "honors": [],
      "rankingHistory": [],
      "views": 3180,
      "likes": 431,
      "coins": 16,
      "favorites": 39,
      "shares": 8,
      "comments": 1,
      "danmaku": 0
    }
  ],
  "medianViews": 3932
}
```

#### 💳 Pricing

One `creator-profile` event is charged for each public creator profile saved to the dataset. Available details and uploads are part of that profile charge. There is no separate upload event. A creator with no matching uploads can still be a charged profile. Repeated matches in the same run do not create another row or charge.

The configured price per profile is $0.00001 on FREE, $0.0018 on BRONZE and SILVER, and $0.0017 on GOLD, PLATINUM, and DIAMOND. Check the Store pricing for the current price for your plan. No profile event is charged for a failed lookup, a filtered-out creator, or a run with no saved profiles.

#### 🔌 Integrations

Use the Apify dataset to export rows as JSON, CSV, or Excel. Start runs through the Apify API or set a schedule in Apify Console. For upload tracking, keep the same creator and date scope across runs so there is a prior observation to compare.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why is `isNew` missing on the first tracking run?

The first successful check sets the starting record. A later successful check for the same creator and date scope can mark uploads as new or already seen. Tracking needs uploads on and an explicit upload limit of 0. Failed or incomplete checks do not replace the saved observation.

##### Does turning uploads off also turn median views off?

No. The Actor still tries to collect the 20-newest-video sample. Median views are omitted if no valid sample is available.

##### Are biography email addresses verified?

No. The Actor extracts text that matches its email syntax from public biographies. It does not test delivery or infer addresses. A profile can have an empty email list.

##### Will I get every creator or every profile detail?

Not always. Search coverage, source access, your filters, and run limits can reduce the returned list. Optional profile details and uploads may be unavailable. Check run warnings when work could not finish.

##### Does this help me become a Bilibili creator?

This Actor collects public creator data for research. It does not register accounts, publish videos, or manage the Bilibili Creator Center.

##### Do I need to log in to Bilibili?

No buyer login is required. The Actor reads public information. Private and restricted content is outside its scope.

### 📝 Changelog

**v0.0** (26-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~bilibili-creator/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Bilibili Video Scraper](https://apify.com/maximedupre/bilibili-video-scraper): Find public videos and collect video details, comments, and danmaku.
- [Influencer Scraper](https://apify.com/maximedupre/influencer-scraper): Build public creator lists across TikTok, Instagram, and YouTube.
- [RedNote Profile Scraper](https://apify.com/maximedupre/rednote-profile-scraper): Collect public RedNote profiles for creator research.
- [TikTok Creator Analytics Scraper](https://apify.com/maximedupre/tiktok-creator-analytics): Review public TikTok creator metrics.
- [YouTube Channel Search Scraper](https://apify.com/maximedupre/youtube-channel-search-scraper): Find public YouTube channels for a topic roster.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `maxItems` (type: `integer`):

Stop after this many creator rows across the whole run, or sooner if no more match. Leave blank or use 0 to get all available matches. This does not limit uploads inside each creator row.

## `findBy` (type: `string`):

Choose keyword search to find creators by name or channel. Choose known creators to look up a list of creator IDs or profile URLs.

## `keywords` (type: `array`):

Enter one or more search terms for creator names or channels. Keep each full phrase in one list entry. Required when you choose Keywords.

## `searchOrder` (type: `string`):

For Keywords, choose Bilibili relevance, highest follower count first, or highest account level first.

## `contactsOnly` (type: `boolean`):

For Keywords, keep only creators whose public biography contains an email address. When off, email addresses are still included when available. The full biography is included in both cases.

## `creators` (type: `array`):

Enter one Bilibili numeric creator ID or full Bilibili profile URL per entry. You may mix IDs and URLs in the same list, with up to 1,000 entries. Required when you choose Known creators.

## `minFollowers` (type: `integer`):

Keep creators with at least this many followers. Applies to Keywords and Known creators. Leave blank for no lower bound.

## `maxFollowers` (type: `integer`):

Keep creators with at most this many followers. Applies to Keywords and Known creators. Leave blank for no upper bound. Must be at least Minimum followers when both are set.

## `includeUploads` (type: `boolean`):

Include public uploads inside each creator row. When off, collect no uploads, whatever the upload limit. Upload order and date filters apply only when this is on. The median views for the 20 newest public videos are still included. Applies to Keywords and Known creators.

## `maxUploadsPerCreator` (type: `integer`):

With Include uploads on, return a sample of up to this many matching uploads per creator, where available, in the chosen upload order. Leave blank to use 5. Set 0 to collect all available matching uploads. This does not change Maximum creators or the 20-newest-video median sample. Tracking requires an explicit 0.

## `uploadOrder` (type: `string`):

Sort the uploads within each creator row. This applies to both ways to find creators and does not change the sample of 20 newest videos used for median views.

## `publishedAfter` (type: `string`):

Include uploads from this date onward, using UTC dates in YYYY-MM-DD form. Leave blank for no start date. Applies to both ways to find creators. The median-views sample still uses the 20 newest public videos.

## `publishedBefore` (type: `string`):

Include uploads through this date, using UTC dates in YYYY-MM-DD form. Leave blank for no end date. Must be on or after the start date. Applies to both ways to find creators and does not change the median-views sample.

## `trackNewUploads` (type: `boolean`):

Compare uploads with saved results from earlier runs of this Actor to mark newly observed uploads. Requires Include uploads on and Maximum uploads per creator set to 0. A positive or omitted upload limit, or Include uploads off, is rejected when tracking is on. The first successful check sets the starting record. Failed checks do not replace it. Applies to both ways to find creators; upload date filters set the scope of the comparison. When off, uploads follow your upload settings without marking which are new.

## Actor input object example

```json
{
  "maxItems": 5,
  "findBy": "keywords",
  "keywords": [
    "科技"
  ],
  "searchOrder": "relevance",
  "contactsOnly": false,
  "includeUploads": true,
  "maxUploadsPerCreator": 5,
  "uploadOrder": "newest",
  "trackNewUploads": false
}
```

# Actor output Schema

## `creators` (type: `string`):

Open the creator rows and their uploads.

# 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 = {
    "maxItems": 5,
    "findBy": "keywords",
    "keywords": [
        "科技"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/bilibili-creator").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 = {
    "maxItems": 5,
    "findBy": "keywords",
    "keywords": ["科技"],
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/bilibili-creator").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 '{
  "maxItems": 5,
  "findBy": "keywords",
  "keywords": [
    "科技"
  ]
}' |
apify call maximedupre/bilibili-creator --silent --output-dataset

```

## MCP server setup

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

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/ks9r79ridO95fgKtS/builds/BNgvwfvce706QdXEA/openapi.json
