# Kitsu Scraper: Anime & Manga Ratings and Rankings (`recordsdata/kitsu-anime-scraper`) Actor

Scrape Kitsu anime and manga: ratings, popularity and rating ranks, episodes or chapters, categories, posters and synopses. Search by title, browse by popularity or rating, filter by status and season, plus trending lists. Export CSV, Excel, JSON. No login or API key.

- **URL**: https://apify.com/recordsdata/kitsu-anime-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Videos, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.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

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3" alt="RecordsData" width="100%" />
</p>

## 🌸 Kitsu Scraper: Anime & Manga Ratings and Rankings

> **Kitsu Scraper extracts anime and manga from Kitsu: average rating, popularity rank, rating rank, user and favorite counts, episodes or chapters, categories, posters, synopses and every alternate title as a `titles` object. Search by title or browse by popularity, rating, newest or favorites, then export CSV, Excel, JSON or XML. A monitor mode returns only titles you have not seen before. No login, no API key. Verified in October 2026 against live Kitsu. From $11.88 per 1,000 titles.**

Kitsu Scraper turns the Kitsu catalog into a dataset of up to 1,000,000 titles with up to 40 fields per row. In a real cloud run on 7 October 2026 it returned the 10 most popular anime (Attack on Titan, Boku no Hero Academia, Death Note and others) with up to 12 categories per title, in about 4 seconds.

### 🌸 What does Kitsu Scraper do?

- Scrapes anime, manga or both from the Kitsu catalog in one run.
- Searches Kitsu by title keyword, for example "naruto" or "one piece".
- Browses the catalog by popularity, rating, newest or favorites, filtered by status and season year.
- Adds weekly trending anime and manga as separate rows, with category names as text.
- Returns every alternate title Kitsu has (English, romanized, Japanese and abbreviated) in a `titles` object.
- Monitor mode (`onlyNew`) returns only titles not delivered in earlier runs of the same search.
- Exports to CSV, Excel, JSON or XML, or via the Apify API.

### 📊 What data can you extract from Kitsu?

| Field | Description |
|---|---|
| recordType | `anime`, `manga`, `trending-anime` or `trending-manga` |
| kitsuId, url, slug | Kitsu ID, title page link and slug |
| title, japaneseTitle | Canonical title and Japanese title |
| titles | Object with every Kitsu title: `en`, `en_jp`, `en_us`, `ja_jp` and others when present |
| abbreviatedTitles | Array of abbreviated titles |
| subtype, showType, mangaType | TV, movie, OVA, manga, novel and so on |
| status, tba, nextRelease | Airing or publishing status, TBA text, next release date |
| nsfw, ageRating, ageRatingGuide | Adult flag (Yes or No), age rating such as G, PG or R, and its guide text |
| averageRating | Kitsu score on a 0-100 scale |
| ratingFrequencies | Object with the distribution of user ratings |
| userCount, favoritesCount | Users who track the title and users who favorited it |
| popularityRank, ratingRank | Both global ranks on Kitsu |
| startDate, endDate | First and last release dates (`Ongoing` when still running) |
| episodeCount, episodeLengthMin, totalLengthMin | Anime rows only |
| chapterCount, volumeCount, serialization | Manga rows only |
| trailerYoutubeId | YouTube trailer ID, when Kitsu has one |
| categories | Up to 12 category names |
| posterUrl, posterOriginalUrl, coverUrl | Poster, original-size poster and cover image |
| synopsis | Synopsis (cut at 900 characters) |
| createdAt, updatedAt, scrapedAt | Kitsu record timestamps and the ISO timestamp of the run |

Fields Kitsu has no value for are left out of the row.

### 🧾 Kitsu Scraper sample output

A row from the 7 October 2026 cloud run (synopsis shortened). The `titles` and `slug` fields come from build 0.1.12 and show the title variants Kitsu lists for this anime. Only fields that exist are shown:

```json
{
  "recordType": "anime",
  "kitsuId": "7442",
  "title": "Attack on Titan",
  "japaneseTitle": "進撃の巨人",
  "titles": { "en": "Attack on Titan", "en_jp": "Shingeki no Kyojin", "ja_jp": "進撃の巨人" },
  "slug": "attack-on-titan",
  "url": "https://kitsu.io/anime/attack-on-titan",
  "subtype": "TV",
  "status": "finished",
  "averageRating": 84.42,
  "userCount": 616780,
  "favoritesCount": 9624,
  "popularityRank": 1,
  "ratingRank": 50,
  "startDate": "2013-04-07",
  "endDate": "2013-09-29",
  "episodeCount": 25,
  "episodeLengthMin": 24,
  "categories": ["Post Apocalypse", "Violence", "Action", "Adventure", "Fantasy", "Alternative Past", "Angst", "Horror", "Drama", "Military", "Super Power", "Shounen"],
  "synopsis": "Centuries ago, mankind was slaughtered to near extinction by monstrous humanoid creatures called titans...",
  "scrapedAt": "2026-10-07T19:31:34.312Z"
}
```

### 💰 How much does it cost to scrape Kitsu?

Kitsu Scraper uses pay per event pricing. You pay only for titles delivered. Failed requests, empty searches, error rows and titles skipped by monitor mode are never charged. The `titles` object and the other extra fields cost nothing more.

| Event | What is charged | Free plan | Bronze | Silver | Gold and above |
|---|---|---|---|---|---|
| `anime-record` | One anime row | $15.00 / 1,000 | $13.75 / 1,000 | $12.50 / 1,000 | $11.88 / 1,000 |
| `manga-record` | One manga row | $15.00 / 1,000 | $13.75 / 1,000 | $12.50 / 1,000 | $11.88 / 1,000 |
| `trending-record` | One trending row | $15.00 / 1,000 | $13.75 / 1,000 | $12.50 / 1,000 | $11.88 / 1,000 |

Worked example: 1,000 anime rows cost 1,000 x $0.015 = $15.00 on the Free tier and 1,000 x $0.01188 = $11.88 at Gold and above. 500 anime plus 500 manga cost the same.

In the 7 October 2026 test runs, each delivered row produced exactly one event. A maximum cost per run stops the actor cleanly at that limit.

### 🚀 How to scrape Kitsu in 3 steps

1. Open the actor and choose **Media type** (anime, manga or both). Add a **Search** keyword, or leave it empty to browse by **Sort by**.
2. Optionally set a **Status filter**, a **Season year** or switch on **Trending list**, and set **Max Items**.
3. Click **Start**, then download the dataset as CSV, Excel, JSON or XML.

### ⚙️ Kitsu Scraper input

| Field | Type | Default | Purpose |
|---|---|---|---|
| `mediaType` | select | `anime` | `anime`, `manga` or `both` |
| `searchQuery` | string | empty | Title keyword; empty means catalog browse |
| `sortBy` | select | `popularity` | `popularity`, `rating`, `newest`, `favorites` (browse mode) |
| `status` | select | any | `current`, `finished`, `upcoming`, `tba`, `unreleased` |
| `seasonYear` | integer | none | Anime only, for example 2026 |
| `includeTrending` | boolean | `false` | Add this week's trending titles |
| `includeBrowse` | boolean | `true` | Turn off to scrape only trending |
| `maxItems` | integer | `10` | 1 to 1,000,000; free plan is capped at 10. With `onlyNew` it means up to N new titles |
| `onlyNew` | boolean | `false` | Monitor mode: skip titles this search already returned in earlier runs |
| `stateKey` | string | empty | Optional monitor name for independent monitors on identical filters |
| `resetSeen` | boolean | `false` | Clear the stored seen list for this search before the run |

Example input:

```json
{ "mediaType": "both", "sortBy": "rating", "status": "finished", "maxItems": 500 }
```

When a search keyword is set, Kitsu returns its own text-relevance order and the sort option is not applied (Kitsu does not accept both together).

### 🔔 Only new titles (monitor mode)

Turn on `onlyNew` and the actor skips every title this same search already returned in an earlier run. Skipped titles are not charged and do not count toward `maxItems`. Use `stateKey` to name independent monitors and `resetSeen` to start over.

The seen list lives in a key-value store named `kitsu-seen` in your own Apify account. A title is marked as seen only after its row was saved and charged. If nothing is new, the run still succeeds and charges nothing; a cloud check skipped 20 already seen titles at no charge.

### 📦 Kitsu Scraper output

Each title is one dataset row, and the dataset schema declares every column. An empty search finishes as succeeded and charges nothing. If Kitsu cannot be reached before anything is delivered, the run fails with a clear message and charges nothing.

### 📈 Kitsu Scraper vs other anime actors

Read on 2026-10-09 from public Apify Store pages.

| Capability | Kitsu Scraper | benthepythondev (Kitsu) | ninhothedev (MyAnimeList) |
|---|---|---|---|
| Media covered | Anime, manga, trending | Anime only | Anime, manga, charts |
| Filters | Title, status, season, sort | Title only | Chart, type, year, season |
| Fields | Up to 40 | 17 | 42 in sample |
| Alternate titles | `titles` object, abbreviated | `titles` field | English, Japanese |
| Categories, synopsis | Yes | Not stated | Yes |
| Only-new mode | Yes | Not stated | Not stated |
| Export | CSV, Excel, JSON, XML | JSON, CSV, Excel, XML | JSON, CSV, Excel |
| Price per 1,000 | $11.88 to $15.00 | $1.60 header, $2.00 README | $0.50 header, about $0.5 README |

Both rivals are much cheaper. benthepythondev reads the same Kitsu source but covers only anime by keyword, which is enough for simple rating lookups. ninhothedev reads MyAnimeList, a different catalog, at the lowest price. Kitsu Scraper costs more and fits you if you need Kitsu manga, trending, status and season filters, rating distributions or a monitor that returns only new titles.

### 💡 Use cases

Seasonal roundups, licensing and demand research, app catalogs, weekly trend reports and new-title alerts with `onlyNew`.

### 🔌 Run Kitsu Scraper via API and integrations

```bash
curl -X POST "https://api.apify.com/v2/acts/RecordsData~kitsu-anime-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mediaType":"anime","sortBy":"popularity","maxItems":100}'
```

Schedule runs and connect results to Zapier, Make, n8n, Google Sheets or webhooks.

### 🤖 Kitsu Scraper MCP server for AI agents

AI agents can call Kitsu Scraper through the Apify MCP server at `https://mcp.apify.com?tools=RecordsData/kitsu-anime-scraper`. Every input field has a default, so a minimal call works.

Add this to your MCP client configuration (Claude Desktop, Cursor, VS Code or any client that supports remote MCP servers):

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=RecordsData/kitsu-anime-scraper"
    }
  }
}
```

Example agent prompt:

> Use the Kitsu Scraper to get the 20 most popular currently airing anime (status current, sorted by popularity) and tell me each title with its averageRating, popularityRank and categories.

Tool description: choose Kitsu Scraper when an agent needs anime or manga ratings, ranks, alternate titles, categories or weekly trending lists from Kitsu as structured rows.

### ⚖️ Is it legal to scrape Kitsu?

Kitsu Scraper reads the public Kitsu catalog API at a polite pace and collects public title data, not personal data about users. You remain responsible for how you use the data and for following Kitsu's terms and the laws that apply to you.

### ❓ Frequently asked questions

#### 🌸 How do I scrape anime from Kitsu?

Set **Media type** to anime in Kitsu Scraper and press Start. With no search keyword the actor browses the Kitsu catalog sorted by popularity, and you can switch the sort to rating, newest or favorites. Add a title keyword such as "naruto" to search instead. Results export as CSV, Excel, JSON or XML.

#### 📚 Can I scrape Kitsu manga too?

Yes. Choose manga or both in the Kitsu Scraper **Media type** field. Manga rows include chapter and volume counts where Kitsu has them. Ongoing series may have no chapter or volume count yet, and then Kitsu Scraper leaves those fields out of the row instead of filling a placeholder.

#### ⭐ What scale is averageRating in Kitsu Scraper?

Kitsu uses a 0-100 scale for the average rating, and Kitsu Scraper returns it unchanged, for example 84.42 for Attack on Titan in our 7 October 2026 run. Titles with too few votes have no `averageRating` field. Kitsu Scraper also returns `popularityRank` and `ratingRank`, the two global ranks on Kitsu.

#### 📺 How do I get only currently airing anime from Kitsu?

Set the Kitsu Scraper status filter to `current` and the media type to anime. For a seasonal list, combine it with the `seasonYear` field, for example 2026, which applies to anime only. The other status values are finished, upcoming, tba and unreleased, and you can sort the results by popularity or rating.

#### 🔥 What does the Kitsu trending list contain?

Switching on `includeTrending` in Kitsu Scraper adds the current weekly trending anime and manga from Kitsu as separate rows. Their `recordType` is `trending-anime` or `trending-manga`, and each row is billed as one `trending-record` event. Turn off `includeBrowse` if you only want the trending rows.

#### 🔔 How do I get only new titles from Kitsu?

Turn on `onlyNew` in Kitsu Scraper and schedule the same search. The first run returns titles up to `maxItems` and remembers them in a key-value store named `kitsu-seen` in your own Apify account. Later runs return only titles not seen before and charge nothing for the skipped ones. Use `stateKey` for separate monitors on identical filters and `resetSeen` to start over.

#### 🔤 What does the titles object contain?

The `titles` object holds every title variant Kitsu lists for the entry, keyed by language code: typically `en` (English), `en_jp` (romanized Japanese), `en_us` and `ja_jp` (Japanese script), plus others when Kitsu has them. Kitsu Scraper also returns `abbreviatedTitles` as an array. Keys Kitsu leaves empty are omitted. The `title` and `japaneseTitle` columns stay as they were, and no extra request or charge is involved.

#### 🆓 Can I try Kitsu Scraper for free?

Yes. Free Apify plans can run Kitsu Scraper with up to 10 titles as a preview, which is enough to check the fields and output format. Paid Apify plans unlock up to 1,000,000 titles per run. Set `maxItems` to control the size of the run and use the maximum cost per run option to cap spending.

#### 🧮 How much does Kitsu Scraper cost for 1,000 titles?

Kitsu Scraper costs between $11.88 and $15.00 per 1,000 titles depending on your Apify plan tier: $15.00 on the Free tier, $13.75 on Bronze, $12.50 on Silver and $11.88 on Gold and above. You pay only for anime, manga or trending rows actually delivered. Empty searches, failed requests, error rows and titles skipped by monitor mode are not charged.

#### 🤷 Why did Kitsu Scraper give me 0 results?

The search keyword or filters matched nothing on Kitsu, for example a status and season year combination with no titles. Try a broader keyword or remove a filter. Kitsu Scraper then ends the run as succeeded with the message that no titles matched, and nothing is charged for an empty result.

#### ❌ What happens if Kitsu is down during a Kitsu Scraper run?

If Kitsu errors out or cannot be reached before any title is delivered, Kitsu Scraper marks the run as failed with a clear message and you are not charged. Titles already delivered before a problem stay in the dataset and are billed as normal events. Run it again later to get the missing data.

### 🔗 Want more entertainment data?

- [VNDB Visual Novel Scraper](https://apify.com/RecordsData/vndb-visual-novel-scraper)
- [Steam Charts Scraper](https://apify.com/RecordsData/steam-charts-scraper)
- [Comics Scraper](https://apify.com/RecordsData/comics-scraper)

### 🛟 Support

Found a bug? Open the **Issues** tab or write to contact.punkrecordsdata@gmail.com. Custom solutions available on request.

Last updated: 2026-10-11

# Actor input Schema

## `includeBrowse` (type: `boolean`):

Scrape the Kitsu anime and manga catalog by search or sorted browse. Turn off to scrape only the trending list.

## `searchQuery` (type: `string`):

Search Kitsu anime or manga by title keyword, for example "naruto". Leave empty to browse the whole catalog using the Sort by option.

## `mediaType` (type: `string`):

Choose whether to scrape anime, manga or both from Kitsu.

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

Order of results when browsing without a search query: popularity, average rating, newest or most favorited.

## `status` (type: `string`):

Optional filter by airing or publishing status: currently airing, finished, upcoming, TBA or unreleased. Empty means any.

## `seasonYear` (type: `integer`):

Optional, anime only: keep titles whose season year matches, for example 2026.

## `includeTrending` (type: `boolean`):

Also scrape the current weekly trending anime and manga lists from Kitsu.

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

Maximum number of titles to return (1 to 1,000,000). Free Apify users are limited to 10 titles as a preview.

## `onlyNew` (type: `boolean`):

Only new results: skip every title this same search already returned in an earlier run, so scheduled runs return just the new titles and you are not charged for skipped ones. Max Items then means N new titles. Off by default.

## `stateKey` (type: `string`):

Optional label for the monitor state. Use a different label to run several independent monitors with identical filters. Leave empty to share state between runs of the same search.

## `resetSeen` (type: `boolean`):

Clear the stored list of already-seen titles for this search (and Monitor name) before the run starts, so everything counts as new again.

## Actor input object example

```json
{
  "includeBrowse": true,
  "searchQuery": "",
  "mediaType": "anime",
  "sortBy": "popularity",
  "status": "",
  "includeTrending": false,
  "maxItems": 10,
  "onlyNew": false,
  "stateKey": "",
  "resetSeen": false
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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 = {
    "searchQuery": "",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/kitsu-anime-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 = {
    "searchQuery": "",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/kitsu-anime-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 '{
  "searchQuery": "",
  "maxItems": 10
}' |
apify call recordsdata/kitsu-anime-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/kitsu-anime-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/67RE54mPpSiAbYRxA/builds/EfNABwmqQ018zktRm/openapi.json
