MyAnimeList Anime Scraper avatar

MyAnimeList Anime Scraper

Pricing

from $1.19 / 1,000 results

Go to Apify Store
MyAnimeList Anime Scraper

MyAnimeList Anime Scraper

Collect MyAnimeList anime data as structured records, including titles, scores, rankings, popularity, episode counts, airing status, genres and studios. Choose top, search, season or ID mode. Data comes from Tenrai, a public mirror with a Jikan v4-compatible JSON schema.

Pricing

from $1.19 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Returns: one row per anime with malId, title, type, episodes, score, rank, genres and url. Input: {"mode": "search", "searchQuery": "naruto", "maxItems": 20} Best for: building anime databases and recommendation datasets, tracking scores and rankings over time, and listing every title of a season.

{"malId": 52991, "title": "Sousou no Frieren", "type": "TV", "episodes": 28, "score": 9.24, "rank": 1, "genres": ["Adventure", "Award Winning", "Drama", "Fantasy"], "url": "https://myanimelist.net/anime/52991/Sousou_no_Frieren"}

What does MyAnimeList Anime Scraper do?

MyAnimeList Anime Scraper is a MyAnimeList scraper and MyAnimeList API alternative that returns structured anime records as a dataset. Pick a mode, run the Actor, and download the rows as JSON, CSV or Excel, or read them through the Apify API. Each row holds the titles in three languages, format, source material, episode count, airing status, aired dates, score, rank, popularity, member and favorite counts, synopsis, season, image, trailer, genres and studios.

The data comes from Tenrai, a public mirror of MyAnimeList content that serves the same JSON shape as the Jikan v4 API. No login is needed and no account is used. The Actor reads JSON endpoints directly, so runs are fast and light: one request returns up to 25 anime, with smaller limits for runs requesting fewer records, and requests are spaced to stay well inside the public rate limit.

Four modes cover the common jobs. The top mode walks the ranking from the highest rank down. The search mode finds anime by title keywords, in English, romaji or Japanese. The season mode lists everything that premiered in a given year and season. The ids mode fetches the full record of specific anime when you already know their MyAnimeList IDs or page URLs.

What data can you get from MyAnimeList?

Every record has the fields below. Fields the source does not have for a title, for example airedTo for a show that is still airing or trailerUrl for a title without a trailer, are returned as null, so the columns stay the same across rows.

FieldDescriptionExample
idStable MyAnimeList anime ID as a string. Unique within a run.52991
malIdMyAnimeList anime ID.52991
titleDefault (romanised) title.Sousou no Frieren
titleEnglishEnglish title, when one exists.Frieren: Beyond Journey's End
titleJapaneseTitle in Japanese.葬送のフリーレン
typeFormat: TV, Movie, OVA, ONA, Special, Music.TV
sourceWhat the anime is adapted from.Manga
episodesEpisode count; empty while unknown.28
statusAiring status.Finished Airing
airedFromISO start date.2023-09-29T00:00:00+00:00
airedToISO end date; empty while still airing.2024-03-22T00:00:00+00:00
durationEpisode duration text.24 min per ep
ratingAge rating text.PG-13 - Teens 13 or older
scoreMean user score (1-10).9.25
scoredByNumber of users who scored it.942093
rankRank by score.1
popularityPopularity rank.97
membersUsers with it on their list.1526833
favoritesUsers who favourited it.93949
synopsisPlot summary.During their decade-long quest to defeat the Demon King...
seasonPremiere season.fall
yearPremiere year.2023
imageUrlPoster image URL.https://cdn.myanimelist.net/images/anime/1015/138006l.jpg
trailerUrlYouTube trailer URL.https://www.youtube.com/watch?v=ZEkwCGJ3o7M
genresGenre names.["Adventure", "Drama", "Fantasy"]
studiosStudio names.["Madhouse"]
themesTheme names.["Isekai"]
demographicsDemographic names.["Shounen"]
producersProducer company names.["Aniplex"]
licensorsLicensor company names.["Crunchyroll"]
titleSynonymsAlternative titles.["Frieren at the Funeral"]
backgroundBackground notes, when the source has them.Aired on Nippon TV's Friday Anime Night block.
airingTrue while the anime is airing.false
broadcastBroadcast slot as text.Fridays at 23:00 (JST)
urlMyAnimeList page of the anime.https://myanimelist.net/anime/52991/Sousou_no_Frieren
sourceUrlAPI endpoint the record came from.https://api.tenrai.org/v1/top/anime?limit=25&page=1

How to use MyAnimeList Anime Scraper

  1. Open the Actor in Apify Console and choose a mode: top, search, season or ids.
  2. Fill in the matching field: searchQuery for search, seasonYear and season for season, or animeIds for ids. Top needs nothing else.
  3. Set maxItems to the number of anime you want. The run stops as soon as that many records are saved.
  4. Click Start. When the run finishes, open the Output tab and export the dataset as JSON, CSV, Excel, XML or RSS.
  5. For recurring jobs such as monthly ranking snapshots, create a Schedule and compare the datasets.

Search mode also works without a searchQuery when you set at least one filter, for example every movie scored 8 or higher: {"mode": "search", "type": "movie", "minScore": 8, "orderBy": "score"}.

Tips: if you leave mode out but give animeIds or searchQuery, the Actor picks ids or search for you. Anime IDs can be plain numbers like 5114 or page URLs like https://myanimelist.net/anime/5114/Fullmetal_Alchemist_Brotherhood. Duplicate anime inside one run are returned once. If season and seasonYear are empty in season mode, the current season is used.

For a catalog restricted to one age rating, use {"mode":"search","ageRating":"pg13","minScore":8,"orderBy":"score","sortDirection":"desc","maxItems":20}. This selects the exact source rating category; PG-13 does not include G or PG titles. The returned rating column lets you check the selection. To browse the most popular matching titles first, use orderBy: "popularity" with sortDirection: "asc", because popularity is a rank where smaller numbers come first. For alphabetical search results choose orderBy: "title" and sortDirection: "asc". The default auto direction retains the existing behavior: descending for every field except title. These settings apply only to search mode and do not change top rankings, seasonal lists, or ID lookup order. They require no extra detail requests.

Input

FieldTypeRequiredDescription
modestringNotop, search, season or ids. Default top.
searchQuerystringQuery or filter for searchTitle keywords, up to 200 characters, for example naruto.
seasonYearintegerNoYear, 1917-2100. Defaults to the current year.
seasonstringNowinter, spring, summer or fall. Defaults to the current season.
animeIdsarray of stringsFor idsMyAnimeList anime IDs or anime page URLs.
typestringNoSearch mode only: tv, movie, ova, special, ona or music.
statusstringNoSearch mode only: airing, complete or upcoming.
minScorenumberNoSearch mode only: minimum score, 0-10.
genresstringNoSearch mode only: comma-separated MyAnimeList genre IDs, e.g. 1,2.
ageRatingstringNoSearch age rating: all (default), g, pg, pg13 or r17. Can be used without title keywords.
sortDirectionstringNoSearch order: auto (default, preserves existing order), asc or desc. Use ascending popularity or rank for rank 1 first.
orderBystringNoSearch mode only: popularity (default), score, rank, members, favorites, title or start_date.
maxItemsintegerNoMaximum unique anime rows across the whole run, including all IDs; 1-10000, default 50.
includeDetailsbooleanNoDefault false. When true, top, search and season rows also get opening and ending themes, relations, streaming links, external links and more info (one extra request per row, slower). Always filled in ids mode.
proxyConfigurationobjectNoProxy settings. Default: no proxy. Turn on Apify Proxy for retry fallback if direct requests are blocked.
{
"mode": "season",
"seasonYear": 2023,
"season": "fall",
"maxItems": 100,
"proxyConfiguration": { "useApifyProxy": false }
}

Input that cannot work, such as search mode without a searchQuery or any filter or an animeIds entry that is not an ID or anime URL, fails immediately with a message that says what to change. A well-formed request that matches nothing, such as a nonsense search term or an ID that does not exist, finishes successfully with zero results and mode-specific guidance: broaden search keywords or remove filters, check IDs, or change the season and year. A persistent block advises enabling proxyConfiguration or retrying later. When some IDs fail, other IDs continue and any real rows remain in the dataset.

Output

Each run writes one dataset row per anime. Real records from a top run (the synopsis is shortened here):

[
{
"id": "52991",
"malId": 52991,
"title": "Sousou no Frieren",
"titleEnglish": "Frieren: Beyond Journey's End",
"titleJapanese": "葬送のフリーレン",
"type": "TV",
"source": "Manga",
"episodes": 28,
"status": "Finished Airing",
"airedFrom": "2023-09-29T00:00:00+00:00",
"airedTo": "2024-03-22T00:00:00+00:00",
"duration": "24 min per ep",
"rating": "PG-13 - Teens 13 or older",
"score": 9.25,
"scoredBy": 942298,
"rank": 1,
"popularity": 97,
"members": 1527146,
"favorites": 93957,
"synopsis": "During their decade-long quest to defeat the Demon King, the members of the hero's party—Himmel himself, the priest Heit...",
"season": "fall",
"year": 2023,
"imageUrl": "https://cdn.myanimelist.net/images/anime/1015/138006l.jpg",
"trailerUrl": "https://www.youtube.com/watch?v=ZEkwCGJ3o7M",
"genres": [
"Adventure",
"Award Winning",
"Drama",
"Fantasy"
],
"studios": [
"Madhouse"
],
"url": "https://myanimelist.net/anime/52991/Sousou_no_Frieren",
"sourceUrl": "https://api.tenrai.org/v1/top/anime?limit=25&page=1"
}
]

The dataset has an Overview view with the most useful columns: title, type, score, rank, popularity, members, episodes, status, season, year, genres and url. Export formats are JSON, CSV, Excel, XML and RSS.

How much does it cost to scrape MyAnimeList?

MyAnimeList Anime Scraper is charged per result. You pay only for the anime records returned, and maxItems caps how many that can be, so a run never costs more than you planned. See the Pricing tab on the Actor page for the current price per result. Platform usage such as compute is covered by the Actor's publisher under pay-per-event pricing.

Use with AI agents (MCP)

Connect MyAnimeList Anime Scraper to Claude, Cursor or any MCP client through the Apify MCP server:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=axiomworks/myanimelist-anime-scraper"
}
}
}

Example prompts:

  1. "Use the MyAnimeList scraper to get the top 30 anime and list their scores and genres."
  2. "Search MyAnimeList for 'naruto' and return the 20 most popular matches with episode counts."
  3. "List every anime from fall 2023 with a score above 8, sorted by members."

Integrations and API

Run MyAnimeList Anime Scraper from your own code with the Apify API. Set APIFY_TOKEN to your Apify API token (send it in the Authorization header, never in the URL).

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("axiomworks/myanimelist-anime-scraper").call(run_input={"mode": "search", "searchQuery": "naruto", "maxItems": 20})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["score"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('axiomworks/myanimelist-anime-scraper').call({ mode: 'search', searchQuery: 'naruto', maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

cURL

curl -X POST "https://api.apify.com/v2/acts/axiomworks~myanimelist-anime-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "search", "searchQuery": "naruto", "maxItems": 20}'

You can also connect the Actor to Make, Zapier, n8n, Google Sheets or your own webhooks from the Integrations tab, and trigger it on a schedule.

FAQ

Where does the data come from? The Actor reads Tenrai, a public mirror of MyAnimeList data that uses the Jikan v4 JSON format. The url field links to the anime's MyAnimeList page and sourceUrl shows the exact endpoint each row came from.

How fresh is the data? It is as current as the source mirror. Scores, ranks and member counts change daily, so schedule runs if you track trends.

Why did my run return 0 results? The search term matched nothing, the anime ID does not exist, or the source was unreachable. The status message of the run says which. Check the spelling, try a broader query, or retry later. If requests are blocked, enable Apify Proxy in the proxy settings.

Can I get more than the top 100? Yes. maxItems goes up to 10000 and the Actor keeps paging until it has that many or the list ends.

Does it return episodes, characters or reviews? No. It returns one record per anime. Characters and manga would be separate Actors.

Why is a field empty? The source has no value for that title. Airing shows have no end date, and some titles have no trailer, English title or score yet.

How fast is it? Requests are limited to about two per second, and list pages return up to 25 anime. A smaller maxItems uses a smaller fixed page size, avoiding unused records. When a proxy is enabled, the initial request still goes directly to Tenrai; retry attempts use fresh proxy sessions. Runtime also depends on source response times and retries.

What happens if the source is down? Requests are retried with backoff. If the source still does not answer, the run finishes with zero results and a message instead of hanging.

The Actor collects publicly available anime information that loads without a login. It does not touch user accounts, lists or private data. You are responsible for how you use the data: respect copyright on synopses and images, and follow the data protection rules that apply to you. This is not legal advice. This Actor is an independent tool and is not affiliated with or endorsed by MyAnimeList or Tenrai.

Feedback

Found a bug or need a field that isn't here? Open an issue on the Issues tab and we'll look at it.