datagrit

datagrit › Guides › Bilibili Anime Catalog, Rankings & Calendar

Guide

How to track Bilibili anime rankings, follower counts and release dates with Python

Pull Bilibili's Top 100 anime ranking, a filterable catalog with follower and rating counts, and the release calendar as clean JSON using Python or cURL.

Published 2026-10-05 · uses the Bilibili Anime Catalog, Rankings & Calendar Actor

Bilibili is where a large share of anime and Chinese animation ("donghua", called guochuang on the site) is watched and talked about. Its numbers matter to licensors, streaming analysts, fan sites and studios: how many people follow a series, how many plays it has, how it is rated, and which episode comes out tomorrow. Most Bilibili tooling targets videos, comments and creator profiles. The series layer, the section Bilibili calls "bangumi" or PGC, is rarely covered.

This guide shows how to read that layer as data: a Top 100 ranking, a filtered catalog with statistics, a release calendar, and a full record for single series. The examples use the Bilibili Anime Catalog, Rankings & Calendar Actor, but the field notes apply to anything you build on the same public endpoints.

Where the data comes from

Bilibili serves its series pages from public JSON endpoints that need no login and no request signature. The Actor reads four families of them:

Each endpoint reports counts in a different shape. The catalog index gives only the number you sorted by, as text like 552.9万追番 (5.529 million followers, where 万 means ten thousand and 亿 a hundred million). The statistics endpoint gives exact integers. The calendar reports - for series that have no count yet. The Actor converts all of this to plain numbers and leaves a field null when the source has no value, so a missing count never turns into a zero.

Pitfalls the Actor handles

Step 1: choose the input

A catalog run for anime, sorted by followers, with statistics:


{
  "mode": "catalog",
  "contentTypes": ["anime"],
  "sortBy": "follows",
  "isFinished": "any",
  "includeStats": true,
  "maxItems": 20
}

mode is one of ranking, catalog, calendar or details. In catalog mode you can add access (free or paid members), year, quarter, area and genres (English names such as comedy or isekai, or the Chinese names shown on Bilibili). For a ranking, use "mode": "ranking" with rankingWindowDays of "3" or "7". For one or more specific titles, use "mode": "details" with seasons set to IDs such as ss33415, ep323085, md28228813 or full Bilibili URLs.

Step 2: run it from Python


from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("datagrit/bilibili-anime-series-tracker").call(run_input={
    "mode": "catalog",
    "contentTypes": ["anime"],
    "sortBy": "follows",
    "includeStats": True,
    "maxItems": 20,
})

rows = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items() if r.get("found")]
for r in rows[:10]:
    print(r["follows"], r["ratingScore"], r["ratingCount"], r["title"])

Step 3: or with cURL


curl -X POST \
  "https://api.apify.com/v2/acts/datagrit~bilibili-anime-series-tracker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"ranking","contentTypes":["anime","guochuang"],"rankingWindowDays":"7","maxItems":100}'

The fields you will use most

FieldExampleMeaning
recordTypecatalogranking, catalog, calendar or season
seasonId835Bilibili season ID, the ss number in the play URL
follows5529108followers of this season
seriesFollows5803863followers across all seasons of the series
views97780235play count
ratingScore / ratingCount9.6 / 53783score and number of ratings; null when there are no ratings yet
danmaku4710640on-screen comment count
isFinishedtruefinished or still airing
accessLevelmemberfree or member (paid Bilibili membership)
areas["日本"]production regions

Ranking rows add rank and rankingWindowDays. Calendar rows add calendarDate, episodeId, episodeLabel, episodePublishAt, episodePublished and episodeDelayed.

Recipes

A weekly follower snapshot in a sheet. Schedule a ranking run every Monday and append the rows to a spreadsheet with a date column. Because the ranking carries follows and views per season, the difference between two weeks shows which series are gaining followers fastest.

A release alert. Schedule a calendar run once a day with calendarDaysAfter set to 2. Filter the rows where episodeDelayed is true and send those to Slack or email; the delayReason field carries Bilibili's own explanation when one exists.

A quick look at a genre in pandas. Pull the free comedy titles sorted by plays and see how rating relates to follower count:


import pandas as pd

df = pd.DataFrame(client.dataset(run["defaultDatasetId"]).list_items().items)
df = df[df["found"] == True]
print(df[["title", "views", "follows", "ratingScore", "ratingCount"]]
      .sort_values("follows", ascending=False).head(15))

For a run like this, set access to free and genres to ["comedy"] in the input.

Limits, honestly

Get it

The Actor is on the Apify Store as Bilibili Anime Catalog, Rankings & Calendar, and the full input and output reference is on the documentation page. It is priced per result, and a maximum spend on the run caps what a run can cost.

Try Bilibili Anime Catalog, Rankings & Calendar on ApifyActor documentation

More guides