# MyAnimeList Anime & Manga Scraper (`ninhothedev/myanimelist-scraper`) Actor

$0.5/1K 🔥 MyAnimeList scraper! Anime & manga with scores, rankings, studios, seasons & stats. No key. JSON, CSV, Excel or API in seconds. Build recommendation engines & fan apps ⚡

- **URL**: https://apify.com/ninhothedev/myanimelist-scraper.md
- **Developed by:** [ninhothedev](https://apify.com/ninhothedev) (community)
- **Categories:** Developer tools, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 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/platform/actors/running/actors-in-store#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

## MyAnimeList Anime & Manga Scraper

Scrape **MyAnimeList** - the largest anime and manga database on the internet - without an API key, without a login and without cookies. This Actor reads MAL through **[Jikan v4](https://jikan.moe)**, the well-known unofficial, keyless MyAnimeList REST API, and returns clean, flat JSON/CSV/Excel rows: top rankings, seasonal charts, search results, scores, ranks, member counts, studios, authors, genres, synopses and more.

Point it at a chart or a list of titles, hit start, get a dataset.

***

### What you get

| Mode | What it scrapes | MAL data behind it |
|------|-----------------|--------------------|
| `top` | Top anime chart | Most popular / most favorited / currently airing / upcoming |
| `search` | One search pass per query | Full MAL anime search, ordered by members |
| `season` | Seasonal anime chart | Every anime of a given year + season (e.g. 2026 winter) |
| `manga` | Top manga chart, or manga search when queries are filled | Ranked manga with chapters, volumes, authors, serializations |

Every record is one anime or one manga title.

***

### How is this different from my other anime Actors?

I ship three anime scrapers because the *databases* behind them are different - the metadata, the community scores and the coverage do not match.

| Actor | Data source | Best for |
|-------|-------------|----------|
| **MyAnimeList Anime & Manga Scraper** (this one) | **MyAnimeList via Jikan** | The largest anime + manga database, MAL community scores, MAL ranks & popularity, member/favorite counts, seasonal & top charts, studios, producers, licensors, serializations |
| [Anime Scraper](https://apify.com/ninhothedev/anime-scraper) | AniList-style anime catalog | Broad anime catalog lookups and general title metadata |
| [Kitsu Anime Scraper](https://apify.com/ninhothedev/kitsu-anime-scraper) | Kitsu.io | Kitsu's own ratings, user counts and streaming-oriented catalog data |

Short version: if you need **MAL scores, MAL ranks, MAL member counts, MAL seasonal charts or manga chapters/authors**, use this one. If you want a second opinion from a different community, run one of the others alongside it and join on the title.

***

### Use cases

- **Anime recommendation engines** - build a scored, genre-tagged, demographic-tagged corpus with real popularity signals (members, favorites, scored\_by) to train or seed a recommender.
- **Streaming catalogs** - keep an anime/manga catalog page current with synopses, cover images, trailers, studios, episode counts and airing status.
- **Fandom analytics** - track how a season's titles rise and fall in rank, popularity and member count week over week.
- **Content licensing research** - see which studios, producers, licensors and manga serializations sit behind the titles with the biggest audiences before you negotiate.

***

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | select | `top` | `top`, `search`, `season` or `manga` |
| `queries` | array | `["one piece","frieren"]` | Search terms for `search` (anime) and `manga` modes |
| `topFilter` | select | `bypopularity` | `bypopularity`, `favorite`, `airing`, `upcoming` |
| `mediaType` | select | `any` | `tv`, `movie`, `ova`, `special`, `ona`, `music`, `any` |
| `year` | integer | current year | Season year, e.g. `2026` |
| `season` | select | current season | `winter`, `spring`, `summer`, `fall` |
| `maxItems` | integer | `100` | 1-1000 records |

#### Example input - top TV anime by popularity

```json
{
  "mode": "top",
  "topFilter": "bypopularity",
  "mediaType": "tv",
  "maxItems": 100
}
```

#### Example input - winter 2026 season

```json
{
  "mode": "season",
  "year": 2026,
  "season": "winter",
  "maxItems": 200
}
```

#### Example input - top manga

```json
{
  "mode": "manga",
  "maxItems": 50
}
```

***

### Output

Anime record:

```json
{
  "type": "anime",
  "mal_id": 52991,
  "title": "Sousou no Frieren",
  "title_english": "Frieren: Beyond Journey's End",
  "title_japanese": "葬送のフリーレン",
  "media_type": "TV",
  "source": "Manga",
  "episodes": 28,
  "status": "Finished Airing",
  "is_airing": false,
  "aired_from": "2023-09-29T00:00:00+00:00",
  "aired_to": "2024-03-22T00:00:00+00:00",
  "duration": "24 min per ep",
  "rating": "PG-13 - Teens 13 or older",
  "score": 9.3,
  "scored_by": 712345,
  "rank": 1,
  "popularity": 132,
  "members": 1234567,
  "favorites": 78901,
  "season": "fall",
  "year": 2023,
  "broadcast_day": "Fridays",
  "broadcast_time": "23:00",
  "synopsis": "During their decade-long quest to defeat the Demon King ...",
  "studios": ["Madhouse"],
  "producers": ["Aniplex", "Dentsu", "Shogakukan-Shueisha Productions"],
  "licensors": ["Crunchyroll"],
  "genres": ["Adventure", "Drama", "Fantasy"],
  "themes": ["Mythology"],
  "demographics": ["Shounen"],
  "image_url": "https://cdn.myanimelist.net/images/anime/1015/138006l.jpg",
  "trailer_url": "https://www.youtube.com/watch?v=qgH2Cv0OT2k",
  "url": "https://myanimelist.net/anime/52991/Sousou_no_Frieren",
  "source_api": "jikan-mal",
  "scraped_at": "2026-07-28T12:00:00+00:00",
  "chapters": null,
  "volumes": null,
  "published_from": null,
  "published_to": null,
  "authors": null,
  "serializations": null
}
```

Manga records use the same rectangular shape, but fill `chapters`, `volumes`, `published_from`, `published_to`, `authors` and `serializations` - and leave `episodes`, `studios`, `producers`, `licensors`, `broadcast_*`, `duration`, `rating`, `season` and `trailer_url` `null`. Fields are **never** cross-filled between the two types, so an anime column always means anime data.

***

### Rate limits (important)

Jikan is a free, community-run proxy in front of MyAnimeList and enforces:

- **3 requests per second**
- **60 requests per minute**

This Actor ships a real limiter: at least ~0.45 s between calls plus a rolling 60-second budget, so it stays under both ceilings out of the box. HTTP `429` responses are retried with exponential backoff, and transient `5xx` responses (Jikan occasionally answers `504 - Jikan failed to connect to MyAnimeList` when MAL itself is unreachable) are retried as well. If a run ends with zero items because of rate limiting or an upstream outage, the Actor fails with an explicit message telling you which of the two happened - just re-run a few minutes later.

Practical consequence: throughput is capped by Jikan, not by the Actor. 1,000 records is 40 pages, i.e. under a minute of API calls plus pacing.

***

### Pricing

Runs on the pay-per-usage model. Typical cost is around **$0.5 per 1,000 items** on a 512 MB run, since the workload is a handful of small JSON calls per 25 records - no browser, no proxies.

***

### Legal

Only public MyAnimeList catalog data is collected: titles, scores, ranks, counts, staff/studio credits, synopses and cover URLs. No user profiles, no personal data. Jikan and this Actor are not affiliated with or endorsed by MyAnimeList.

***

### Related Actors

- [Anime Scraper](https://apify.com/ninhothedev/anime-scraper)
- [Kitsu Anime Scraper](https://apify.com/ninhothedev/kitsu-anime-scraper)
- [MangaDex Scraper](https://apify.com/ninhothedev/mangadex-scraper)
- [TVmaze Scraper](https://apify.com/ninhothedev/tvmaze-scraper)

# Actor input Schema

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

What to scrape from MyAnimeList: 'top' = ranked anime chart (uses Top filter + Media type), 'search' = one search pass per entry in Search queries, 'season' = the seasonal anime chart for Year + Season, 'manga' = top manga chart (or manga search when Search queries are filled).

## `queries` (type: `array`):

Search terms used in 'search' mode (anime) and 'manga' mode (manga). One item is scraped per matching title, results are ordered by member count. Ignored in 'top' and 'season' mode.

## `topFilter` (type: `string`):

Which MyAnimeList top chart to pull in 'top' mode: by popularity (member count), by favorites, currently airing, or upcoming titles.

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

Restrict results to one MyAnimeList media type (TV series, movie, OVA, special, ONA or music video). Choose 'any' to keep every type. Applies to 'top', 'search' and 'season' mode.

## `year` (type: `integer`):

Year of the seasonal chart in 'season' mode, e.g. 2026. Defaults to the current year when left empty.

## `season` (type: `string`):

Anime season to scrape in 'season' mode. Defaults to the season matching today's date when left empty.

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

Maximum number of anime or manga records to push to the dataset. Jikan returns 25 entries per page and is rate limited to 3 requests/second, so large values simply take longer.

## Actor input object example

```json
{
  "mode": "top",
  "queries": [
    "one piece",
    "frieren"
  ],
  "topFilter": "bypopularity",
  "mediaType": "any",
  "year": 2026,
  "season": "winter",
  "maxItems": 100
}
```

# 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 = {
    "queries": [
        "one piece",
        "frieren"
    ],
    "year": 2026
};

// Run the Actor and wait for it to finish
const run = await client.actor("ninhothedev/myanimelist-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 = {
    "queries": [
        "one piece",
        "frieren",
    ],
    "year": 2026,
}

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

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

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

```

## CLI example

```bash
echo '{
  "queries": [
    "one piece",
    "frieren"
  ],
  "year": 2026
}' |
apify call ninhothedev/myanimelist-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ninhothedev/myanimelist-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/UjWcgWA5dUt5EoALg/builds/5EQXoqcHZtuolqJ5M/openapi.json
