# MyAnimeList Search & Detail Scraper (`ryyos/mal-search-scraper`) Actor

\[$1.5/1000] Search MyAnimeList by keyword across Anime, Manga, Characters, People and Companies, with full detail pages merged in automatically.

- **URL**: https://apify.com/ryyos/mal-search-scraper.md
- **Developed by:** [Rio Dwi Saputra](https://apify.com/ryyos) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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 Search & Detail Scraper - Anime, Manga, Characters, People & Companies

Search [MyAnimeList](https://myanimelist.net) by keyword across **Anime, Manga, Characters, People, and Companies** in a single run, and get full detail pages merged in automatically - just like clicking into every result yourself, but at scraper speed. Run it on-demand, on a schedule, or through the API for always-fresh MyAnimeList data with no manual browsing, no captchas, and no rate-limit headaches. \[$4/1000]

### Features

- Searches all five MyAnimeList categories (Anime, Manga, Characters, People, Companies) from one keyword, pick any combination in a single run
- Automatically paginates through MyAnimeList's own search pages to collect complete result sets, not just the ~5-item preview shown on the site's combined search page
- Merges in each result's full detail page (synopsis, score, genres, studios/authors, related titles, voice actors, and more) up to a configurable limit, so you control run time and cost
- Structured, table-ready output in the Apify Console Output tab
- Built-in Apify Proxy support to stay reliable on larger runs

### How to use MyAnimeList Search & Detail Scraper

1. Open the Input tab and type a **Search keyword** (e.g. "boku no hero").
2. Choose one or more **Categories to search**: Anime, Manga, Characters, People, Companies.
3. Optionally adjust **Max results per category** and **Max items to fetch full detail for**.
4. Click **Start** and watch results land in the dataset in real time.
5. Export the dataset in JSON, CSV, Excel, HTML, or other formats from the Output tab.

### Input

| Field | Type | Description |
|---|---|---|
| `query` | string | Search keyword, required. |
| `categories` | array | One or more of `anime`, `manga`, `character`, `person`, `company`. |
| `maxResultsPerCategory` | integer | Max search result items to collect per selected category (default 50). |
| `maxItemsWithDetails` | integer | How many of those results also get their full detail page fetched and merged in (default 20, set to 0 to skip). |
| `proxyConfiguration` | object | Apify Proxy configuration (Apify Proxy recommended by default). |

See `.actor/input_schema.json` for the full field definitions.

### Output

Example dataset item for an anime result with detail fetched:

```json
{
  "id": "31964",
  "category": "anime",
  "title": "Boku no Hero Academia",
  "url": "https://myanimelist.net/anime/31964/Boku_no_Hero_Academia",
  "image_url": "https://cdn.myanimelist.net/images/anime/10/78745.jpg",
  "summary": "TV (13 eps) Scored 7.85 3,600,000 members",
  "score": "7.85",
  "score_count": "450000",
  "genres": ["Action", "Comedy", "Super Power"],
  "info": {
    "type": "TV",
    "episodes": "13",
    "status": "Finished Airing",
    "studios": "Bones"
  },
  "related": {
    "adaptation": [{ "name": "Boku no Hero Academia", "url": "https://myanimelist.net/manga/75989/..." }]
  },
  "synopsis": "The appearance of \"quirks\"...",
  "detail_fetched": true
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field | Description |
|---|---|
| `id` | Numeric MyAnimeList ID |
| `category` | `anime`, `manga`, `character`, `person`, or `company` |
| `title` | Item title/name |
| `url` | Link to the item's MyAnimeList page |
| `image_url` | Cover/portrait image URL |
| `summary` | Short summary text as shown on the search results page |
| `score` / `score_count` | Average score and vote count (anime/manga only) |
| `genres` | Genre tags (anime/manga only) |
| `info` | Detail-page sidebar fields (Type, Episodes, Studios, Given name, Birthday, Established, etc, depending on category) |
| `related` | Related-item lists (Animeography, Voice Acting Roles, Published Manga, etc, depending on category) |
| `synopsis` | Full synopsis text (anime/manga only) |
| `detail_fetched` | Whether the detail page was fetched for this item |

### Cost estimation

Pricing is pay-per-result at **$4 per 1,000 results**, below comparable MyAnimeList/anime data scrapers on Apify Store ($5-$10 per 1,000). A typical run searching one keyword across two categories with 20 detailed items each costs well under $0.50. Search-only runs (set `maxItemsWithDetails` to 0) are even cheaper since no detail pages are fetched.

### Tips

- Narrow `categories` to just what you need - fetching only Anime, for example, is much faster than all five.
- Lower `maxItemsWithDetails` if you only need the search result summary (title, score, image) and not the full detail page.
- Enable Apify Proxy for larger runs to reduce the chance of temporary rate limiting from MyAnimeList.

### FAQ, disclaimers, and support

This Actor scrapes publicly available pages from MyAnimeList.net. Use it in accordance with MyAnimeList's Terms of Service, and avoid excessive request volumes. Some rarely-populated detail fields (e.g. character biographies) may be empty when MyAnimeList itself has no data for that item - this reflects the source site, not a scraping error. Found an issue or need a custom variant of this Actor? Open an issue on the Actor's Issues tab in Apify Console.

# Actor input Schema

## `query` (type: `string`):

The keyword to search for on MyAnimeList, e.g. "boku no hero".

## `categories` (type: `array`):

Choose one or more MyAnimeList categories to search in (matches the Anime / Manga / Company / People / Characters jump-to bar on MyAnimeList's own search page).

## `maxResultsPerCategory` (type: `integer`):

Maximum number of search result items to collect for each selected category.

## `maxItemsWithDetails` (type: `integer`):

How many of the collected result items (per category) should also have their full detail page fetched and merged in, just like clicking into that item on MyAnimeList. Set to 0 to skip detail fetching and only return search result summaries.

## `proxyConfiguration` (type: `object`):

Recommended: use Apify Proxy to avoid IP-based rate limiting from MyAnimeList on larger runs.

## Actor input object example

```json
{
  "categories": [
    "anime"
  ],
  "maxResultsPerCategory": 50,
  "maxItemsWithDetails": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `searchResults` (type: `string`):

No description

## `dataset` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("ryyos/mal-search-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("ryyos/mal-search-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 '{}' |
apify call ryyos/mal-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ryyos/mal-search-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/fxjhi6WdsrI5o2Fam/builds/yXLD4qD3BnYyc6fHN/openapi.json
