L logiover
social · Jul 9, 2026 · 7 min read

How to Scrape MyAnimeList Anime & Manga Ratings 2026

Pull MyAnimeList anime and manga data — ratings, rankings, seasonal charts, characters and recommendations — via the free Jikan API. No key, no OAuth needed.

MyAnimeList is the largest catalog of anime and manga metadata on the open web, and it’s a natural dataset for recommendation engines, media analytics and fan tools. But the official MAL API puts you through an OAuth handshake, client registration and quotas before you get a single row — friction that’s out of proportion to “I just want the top-rated anime as a spreadsheet.” This guide covers how to pull ratings, rankings, seasonal charts, characters and the community recommendation graph without a key, an OAuth flow or a headless browser.

The route around the official API is Jikan — a free, open-source, unofficial REST API for MyAnimeList that serves the same public metadata over plain HTTP. The scraper wraps Jikan with pagination, rate-limit handling and clean, flattened output, and exposes it as eight operation modes over one input form. Every row is tagged with _mode, so you can run several modes into one dataset and filter later.

What’s worth extracting

The schema depends on the mode, but the anime and manga rows share a rich, flat structure of 30+ fields. Grouped by what you’d actually use:

Identity and titles

  • malId — the numeric MyAnimeList ID, and your stable join key.
  • title, titleEnglish, titleJapanese — romaji, English and Japanese titles.
  • type — media type (TV, Movie, OVA for anime; Manga, Novel, Light novel for manga).
  • url — the canonical MyAnimeList URL.

Ratings and rankings — the columns most people come for

  • score — the average MAL score.
  • scoredBy — how many users scored it.
  • rank — overall rank.
  • popularity — popularity rank.
  • members — users who added it to a list.
  • favorites — users who favorited it.

Content metadata

  • episodes (anime), chapters / volumes (manga).
  • status, source, duration, rating — airing/publishing status, source material, runtime, content rating.
  • year, season, airedFrom / airedTo (anime); publishedFrom / publishedTo (manga).
  • genres, themes, demographics, studios, producers (anime); authors, serializations (manga) — all arrays.
  • synopsis, imageUrl (poster/cover), trailerUrl (anime).
  • scrapedAt — ISO 8601 capture time.

The characters mode returns a different shape — animeId, name, role, favorites, an imageUrl, and a voiceActors cast (each entry’s name plus language). The recommendations mode returns sourceAnimeId, recommendedId, title, votes and the recommended title’s poster and URL — the community “if you liked X, try Y” graph with vote counts.

How the source actually works

The scraper is a clean wrapper over the free, open Jikan API, doing fast HTTP with no headless browser. Its behavior is driven by a required mode — eight of them, sharing one form:

ModeWhat it returns
topAnimeTop/most-popular anime chart, paginated (default, highest volume)
topMangaTop/most-popular manga chart, paginated
searchAnimeFull-text anime search with genre, type, status and ordering filters
searchMangaFull-text manga search
seasonalEvery anime in a season (by year and season, or the current season)
animeDetailsFull details for one or many anime IDs (batch)
charactersCharacters and voice actors for one or many anime IDs
recommendationsCommunity anime recommendations for one or many anime IDs

Three ready-to-run inputs. Top 100 currently-airing anime by rating:

{
  "mode": "topAnime",
  "filter": "airing",
  "maxResults": 100
}

Highest-scoring fantasy anime — search with a genre ID and an order:

{
  "mode": "searchAnime",
  "query": "",
  "genres": ["10"],
  "orderBy": "score",
  "sort": "desc",
  "maxResults": 100
}

Characters and voice actors for a batch of anime IDs:

{
  "mode": "characters",
  "animeIds": ["1", "5", "20"]
}

The filters map onto Jikan’s query surface: genres takes MyAnimeList genre IDs (1 = Action, 10 = Fantasy, 22 = Romance, 24 = Sci-Fi); orderBy sorts search results (score, rank, popularity, members, favorites, start_date, and more) with sort as direction; filter picks a chart slice for the top modes (airing, bypopularity, favorite); type narrows media type; and year plus season (winter/spring/summer/fall) drive seasonal — leave both empty for the current season. maxResults caps the paginated modes.

Run the MyAnimeList Scraper on Apify — charts, search, seasonal, details, characters and recommendations in one tool. No API key, no OAuth, no browser. Export to CSV, JSON or Excel.

The access reality

The friction that makes people reach for a wrapper isn’t blocking — MyAnimeList’s data is public — it’s the official API’s ceremony and Jikan’s rate limits. Here’s the honest picture:

  • No OAuth, no key, no client registration. The official MAL API requires all three. This scraper reads the same public metadata through Jikan, so you need only an Apify account.
  • Jikan is rate-limited, and that’s handled for you. Jikan enforces roughly 3 requests per second and 60 per minute. Hit it in a naive loop and you get HTTP 429s. The scraper sleeps between requests and backs off automatically on 429, so large paginated pulls run reliably instead of stalling.
  • Pagination is fixed at 25 per page. Jikan returns 25 items per page; the scraper paginates automatically, so maxResults: 100 is four pages. It accepts up to 25,000 rows per run for the paginated modes.
  • Discover IDs before you fetch details. animeDetails, characters and recommendations need MAL IDs. You get those from topAnime, searchAnime or seasonal first — a MAL ID is just the number in the URL (myanimelist.net/anime/1 is ID 1).

None of this is an anti-bot arms race. It’s a rate-limited community API, and the value the wrapper adds is the backoff, the pagination and the flattened output — so you don’t rediscover the 429 the hard way.

Example output

A trimmed topAnime row:

{
  "_mode": "topAnime",
  "malId": 5114,
  "title": "Fullmetal Alchemist: Brotherhood",
  "titleEnglish": "Fullmetal Alchemist: Brotherhood",
  "type": "TV",
  "episodes": 64,
  "status": "Finished Airing",
  "source": "Manga",
  "score": 9.1,
  "scoredBy": 2145678,
  "rank": 1,
  "popularity": 3,
  "members": 3421890,
  "favorites": 225114,
  "year": 2009,
  "season": "spring",
  "genres": ["Action", "Adventure", "Drama", "Fantasy"],
  "studios": ["Bones"],
  "synopsis": "After a failed attempt to bring their mother back...",
  "imageUrl": "https://cdn.myanimelist.net/images/anime/1208/94745.jpg",
  "url": "https://myanimelist.net/anime/5114",
  "scrapedAt": "2026-07-06T09:00:00.000Z"
}

Use cases

  • Anime and manga analytics — build a ratings dataset filtered by genre, year and popularity, then chart trends in a BI tool using score, rank and members.
  • Recommendation engines and ML — bulk-ingest titles, genres, scores, studios and the recommendation graph to train content-based or collaborative recommenders.
  • Streaming and catalog enrichment — enrich your own catalog with MAL metadata, posters, synopses, episode counts and studios via animeDetails.
  • Seasonal tracking — pull every show in a season to power a “what’s airing now” page, a Discord bot or a newsletter.
  • Character and cast databases — collect characters, roles, favorites and voice-actor casts across a series list for wikis, quizzes or fan tools.
  • AI agents and RAG — wrap the scraper as a tool so an LLM can answer “what are the top-rated fantasy anime?” or embed synopses and recommendations for retrieval.

Cost and effort math

Building this yourself against Jikan is more than a fetch loop. You’d write pagination for each of the eight endpoints, backoff logic to survive the 3/sec and 60/min limits without 429-storming, ID-discovery plumbing to feed the detail modes, and a flattener that turns Jikan’s nested JSON into clean rows with consistent field names across anime and manga. It works until Jikan rate-limits you mid-pull and your loop stalls.

The managed scraper is pay-per-result: you’re billed for the rows you collect, with no monthly minimum and no MyAnimeList API fees on top (Jikan is free). Small discovery runs cost pennies; large paginated pulls scale linearly. Use maxResults to cap spend on the paginated modes. Because the rate-limit handling and pagination are already solved, a 25,000-row chart pull runs to completion for a few dollars instead of tripping over 429s on a hand-rolled client.

Common pitfalls

  • Respect the IDs-first workflow. animeDetails, characters and recommendations are keyed by MAL ID. Run a chart, search or seasonal mode first to collect malId values, then batch them into the detail modes.
  • Filter by _mode when mixing. Because every row carries _mode, a dataset can contain anime rows, character rows and recommendation rows with different shapes. Split or pivot on _mode before analysis so you don’t compare a character row to an anime row.
  • Anime vs manga fields differ. episodes/studios/producers are anime-only; chapters/volumes/authors/serializations are manga-only. Expect the other set to be empty depending on the mode, and design your schema for both.
  • maxResults is your spend cap. The paginated modes accept up to 25,000 rows. A broad topAnime or seasonal pull can be large — set maxResults deliberately.
  • Scores are point-in-time. score, scoredBy and members move as the community votes. Stamp your dataset with scrapedAt (the scraper provides it) so a rating is tied to when it was captured, and re-run to refresh.
  • Genre IDs, not names, in search. genres takes numeric MAL genre IDs (10 = Fantasy), not the genre strings. Passing a name won’t filter — use the ID.

Wrapping up

MyAnimeList’s data is public, but the official API’s OAuth-and-quota ceremony is a poor fit for straightforward dataset work, and hitting Jikan directly means owning the rate-limit dance yourself. If you need a one-off chart, the API is reachable; if you’re building a ratings dataset, a recommender, or a seasonal tracker, a keyless tool that handles Jikan’s backoff and pagination across eight modes and hands you flat, exportable rows is the piece worth not maintaining.

Open the MyAnimeList Scraper on Apify — anime and manga charts, search, seasonal, characters and recommendations in one run. No key, no OAuth, no browser. Export to CSV, JSON or Excel. Start on Apify’s free monthly credit.

Related guides