# Bilibili Anime Catalog, Rankings & Calendar (`datagrit/bilibili-anime-series-tracker`) Actor

Bilibili anime, Chinese animation, film, documentary and TV series: filterable catalog, Top 100 rankings, release calendar and season details with ratings and follower counts.

- **URL**: https://apify.com/datagrit/bilibili-anime-series-tracker.md
- **Developed by:** [datagrit](https://apify.com/datagrit) (community)
- **Categories:** Videos, Social media
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

### What does Bilibili Anime Catalog, Rankings & Calendar do?

Bilibili Anime Catalog, Rankings & Calendar reads the licensed-series section of Bilibili (anime, Chinese animation "guochuang", films, documentaries and TV) and returns one clean row per series, ranking entry or episode release. You get play, follower, danmaku (comment), coin, like and share counts, the rating with its vote count, production regions, release status and paid-membership flag. No login and no cookies are needed. Use it for anime market research, licensing and streaming analysis, fan-community trackers and AI agents that need to know what is popular on Bilibili right now.

### Why use this Actor?

- **Anime and donghua market research**: see which titles lead the Top 100 by follower growth in the last 3 or 7 days, and how a series compares with its sequels through the series follower total.
- **Licensing and streaming teams**: filter the whole catalog by release year, quarter, region, genre, airing status and free versus paid-member access, sorted by followers, plays, rating, latest update or danmaku count.
- **Release trackers and fan sites**: pull the release calendar for the next seven days with episode numbers, publish times and delay flags, and schedule the Actor to keep a calendar fresh.
- **Analysts and data pipelines**: one flat, typed row per record, ready for Google Sheets, n8n, Make, Zapier or MCP-connected agents.
- **Single-title lookups**: paste season, episode or media IDs, or full Bilibili URLs, and get the complete record with rating count, statistics, synopsis, cast and episode count.

### What is different here?

Most Bilibili scrapers collect videos, comments or creator profiles. This one covers the series layer: Top 100 rankings, a filterable catalog of every licensed title, the release calendar and season details with the real rating count. Filters are applied by Bilibili itself, so every row really matches the filters you set; a combination that Bilibili does not offer for a content type is skipped with a log line instead of being silently ignored. Every row says how it was sorted (`sortedBy`) and which filters matched (`matchedFilters`).

### Sample output

| recordType | title | seasonId | ratingScore | ratingCount | follows | views | areas |
|---|---|---|---|---|---|---|---|
| catalog | 我们仍未知道那天所看见的花的名字。 | 835 | 9.6 | 53783 | 5529108 | 97780235 | 日本 |

```json
{
  "recordType": "catalog",
  "contentType": "anime",
  "seasonId": 835,
  "mediaId": 835,
  "title": "我们仍未知道那天所看见的花的名字。",
  "subtitle": "难忘的催泪夏天",
  "url": "https://www.bilibili.com/bangumi/play/ss835",
  "sortedBy": "follows",
  "matchedFilters": ["contentType=anime", "sortedBy=follows"],
  "ratingScore": 9.6,
  "ratingCount": 53783,
  "views": 97780235,
  "follows": 5529108,
  "seriesFollows": 5803863,
  "danmaku": 4710640,
  "coins": 884981,
  "likes": 907862,
  "shares": 244868,
  "episodeText": "全11话",
  "isFinished": true,
  "accessLevel": "member",
  "areas": ["日本"],
  "found": true,
  "scrapedAt": "2026-10-05T20:27:51.725Z"
}
```

Titles and subtitles are returned in the language Bilibili shows them in, usually Chinese.

### How much does it cost?

You pay per result: every ranking entry, catalog title, calendar episode or season record counts as one result, and the price per result is lower on paid Apify plans. Rows that only report "nothing found" are not charged. Catalog runs with statistics add two requests per title, so they take longer than a plain listing but cost the same per result. The **Maximum results** field caps the spend of a run, and you can also set a maximum spend on the run so it stops when that is reached.

### Input

- **Mode**: `ranking` (Top 100), `catalog` (filters and sorting), `calendar` (release schedule) or `details` (specific seasons).
- **Content types**: anime, guochuang, movie, documentary, tv, variety. Rankings exist for all but variety, the calendar only for anime and guochuang.
- **Ranking window**: last 3 or 7 days.
- **Catalog filters**: airing status, access (free or paid members), release year (2015 and later, plus older ranges and decades), quarter, country or region, genres by English or Chinese name, and the sort order.
- **Add statistics**: plays, followers, danmaku, coins, likes, shares, rating count and regions for every catalog row.
- **Calendar days before and after today**: 0 to 7 each.
- **Seasons**: season IDs, episode IDs, media IDs or Bilibili URLs for details mode.
- **Maximum results**: total limit across everything the run reads.
- **Proxy configuration**: optional.

### Output fields

Every record carries `recordType` (ranking, catalog, calendar or season), `contentType`, `seasonId`, `title`, `url`, the count fields above, `scrapedAt` and `found`. Ranking rows add `rank` and `rankingWindowDays`; calendar rows add `calendarDate`, `episodeId`, `episodeLabel`, `episodePublishAt`, `episodePublished` and `episodeDelayed`; season rows add the synopsis, cast, staff, genres, series, publish time and episode count. Fields a source does not provide for a record are `null`, never zero. When a query has no results you get one row with `found: false`.

### Is it legal to scrape this data?

The Actor reads public series information that Bilibili shows to every visitor, without logging in or bypassing access controls. It does not download or stream video. You are responsible for using the data in line with applicable laws and the terms of the source. Found an issue? Open it in the Issues tab and it will be answered.

### FAQ

**How fresh is the data?** Every run reads Bilibili live; counts are the ones shown on the site at that moment.

**Why are some play or follower counts missing?** The release calendar reports "-" for series without a count yet. Those fields are `null`. The status message at the end of a run states on how many results both counts were present.

**Why was a filter combination skipped?** Bilibili offers different filters per content type. For example the anime section has the regions Japan, USA and other, and the movie section cannot be sorted by followers (it is sorted by plays and `sortedBy` says so). The log lists what was skipped and the options Bilibili does offer.

**Does the catalog contain every title I see on bilibili.com?** Bilibili decides which titles it lists for the region a request comes from. A run from outside mainland China sees a smaller catalog than a browser in China (about 950 anime titles in our test from Southeast Asia), and very recent mainland-only releases can be missing. A filter that matches nothing returns one row with `found: false`.

**Do I need a proxy?** Usually not. If Bilibili answers with errors from datacenter addresses, enable the proxy option and pick an Asian country; the Actor retries throttled requests and respects the wait time Bilibili sends.

**Can I schedule runs?** Yes. A daily ranking or calendar run gives you a time series of follower growth and upcoming releases.

### Related Actors

Other datagrit Actors cover public company registers, job boards with salary data and website technology lookups, useful when you combine entertainment data with market research.

### Support

Found a bug or a missing field? Open an issue on the Actor page and describe the input you used. Issues are answered in English, usually within a day.

# Changelog

This Actor's version history is a separate document: https://apify.com/datagrit/bilibili-anime-series-tracker/changelog.md

# Actor input Schema

## `mode` (type: `string`):

ranking = Top 100 charts (follower and play counts); catalog = filterable list of all titles with statistics; calendar = upcoming and recent episode releases; details = full record for the season IDs or URLs you list.

## `contentTypes` (type: `array`):

Which Bilibili sections to read. Allowed values: anime, guochuang (Chinese animation), movie, documentary, tv, variety. Rankings exist for all but variety; the calendar only for anime and guochuang. Not used in details mode.

## `rankingWindowDays` (type: `string`):

Ranking mode: rank by the last 3 days or the last 7 days.

## `sortBy` (type: `string`):

Catalog mode: sort order. If a content type does not offer the chosen order, the Actor sorts by play count and records this in the sortedBy field.

## `isFinished` (type: `string`):

Catalog mode: only finished series, only series still airing, or both.

## `access` (type: `string`):

Catalog mode: titles free to watch, or titles that need a paid Bilibili membership.

## `year` (type: `string`):

Catalog mode: premiere year (anime and guochuang from 2015, movies, documentaries and TV from 2016), a multi-year range or decade for older titles, or any. Years a content type does not offer are skipped with a log warning.

## `quarter` (type: `string`):

Catalog mode: premiere quarter (winter = January, spring = April, summer = July, fall = October).

## `area` (type: `string`):

Catalog mode: production region. Each content type offers its own regions (anime: Japan, USA, other); combinations Bilibili does not offer are skipped with a log warning.

## `genres` (type: `array`):

Catalog mode: one or more genre names in English (for example comedy, isekai, mecha, romance, slice of life, school, sports, idol) or in Chinese as shown on Bilibili. Each genre is read separately and a title is listed once.

## `includeStats` (type: `boolean`):

Catalog mode: add play, follower, danmaku, coin, like and share counts, the rating count and the production regions to every row (two extra requests per title). Details mode: use the dedicated statistics endpoint. Turn off for the fastest listing.

## `calendarDaysBefore` (type: `integer`):

Calendar mode: how many past days to include (0 to 7).

## `calendarDaysAfter` (type: `integer`):

Calendar mode: how many upcoming days to include (0 to 7).

## `seasons` (type: `array`):

Details mode: Bilibili season IDs, episode IDs or media IDs, or full URLs. Accepted forms: 33415, ss33415, ep323085, md28228813, https://www.bilibili.com/bangumi/play/ss33415.

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

Stop after this many results in total. This also caps what a run can cost.

## `proxyConfiguration` (type: `object`):

Optional proxy. Leave disabled unless Bilibili answers with errors from datacenter addresses; an Apify proxy in Asia raises the platform cost of the run.

## Actor input object example

```json
{
  "mode": "ranking",
  "contentTypes": [
    "anime"
  ],
  "rankingWindowDays": "7",
  "sortBy": "follows",
  "isFinished": "any",
  "access": "any",
  "year": "any",
  "quarter": "any",
  "area": "any",
  "genres": [],
  "includeStats": true,
  "calendarDaysBefore": 0,
  "calendarDaysAfter": 7,
  "seasons": [],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All extracted records as a dataset.

# 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 = {
    "mode": "ranking",
    "contentTypes": [
        "anime"
    ],
    "rankingWindowDays": "7",
    "sortBy": "follows",
    "isFinished": "any",
    "access": "any",
    "year": "any",
    "quarter": "any",
    "area": "any",
    "genres": [],
    "includeStats": true,
    "calendarDaysBefore": 0,
    "calendarDaysAfter": 7,
    "seasons": [],
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datagrit/bilibili-anime-series-tracker").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 = {
    "mode": "ranking",
    "contentTypes": ["anime"],
    "rankingWindowDays": "7",
    "sortBy": "follows",
    "isFinished": "any",
    "access": "any",
    "year": "any",
    "quarter": "any",
    "area": "any",
    "genres": [],
    "includeStats": True,
    "calendarDaysBefore": 0,
    "calendarDaysAfter": 7,
    "seasons": [],
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("datagrit/bilibili-anime-series-tracker").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 '{
  "mode": "ranking",
  "contentTypes": [
    "anime"
  ],
  "rankingWindowDays": "7",
  "sortBy": "follows",
  "isFinished": "any",
  "access": "any",
  "year": "any",
  "quarter": "any",
  "area": "any",
  "genres": [],
  "includeStats": true,
  "calendarDaysBefore": 0,
  "calendarDaysAfter": 7,
  "seasons": [],
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call datagrit/bilibili-anime-series-tracker --silent --output-dataset

```

## MCP server setup

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

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/OIOeGFoui8aFHfKiS/builds/iNsLshehgmrP8Eon9/openapi.json
