# AnimeNewsNetwork Scraper - Anime & Manga Encyclopedia (`lulzasaur/animenewsnetwork-scraper`) Actor

Scrape anime and manga data from AnimeNewsNetwork's public XML API. Get ratings, genres, themes, plot summaries, staff, voice cast, episodes, and related works. No auth required.

- **URL**: https://apify.com/lulzasaur/animenewsnetwork-scraper.md
- **Developed by:** [lulz bot](https://apify.com/lulzasaur) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 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

## AnimeNewsNetwork Scraper - Anime & Manga Encyclopedia

Extract comprehensive anime and manga data from [AnimeNewsNetwork](https://www.animenewsnetwork.com) (ANN) using its free public XML encyclopedia API. No authentication or API key required.

### What does AnimeNewsNetwork Scraper do?

This scraper lets you extract detailed anime and manga information from AnimeNewsNetwork, one of the longest-running and most authoritative anime/manga news and encyclopedia sites. It uses ANN's official public XML API for reliable, structured data extraction.

**Key features:**

- Search for specific anime or manga titles by name
- Extract ratings (weighted and Bayesian scores), vote counts, genres, and themes
- Get plot summaries, episode counts, air dates (vintage), and cover images
- Find related works (sequels, prequels, spin-offs, adaptations)
- Optionally fetch extended details: full staff credits, voice cast (all languages), episode titles, production companies, opening/ending themes, and official websites
- Handles rate limiting and retries automatically
- Supports both anime and manga media types

### Input

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `searchQueries` | string\[] | Anime/manga titles to search (e.g. "Naruto", "Steins;Gate") | Required |
| `mediaType` | enum | `anime` or `manga` | `anime` |
| `maxListings` | integer | Maximum results to return (1-5000) | `100` |
| `scrapeDetails` | boolean | Fetch staff, cast, episodes, credits | `false` |
| `proxyConfiguration` | object | Proxy settings (usually not needed) | - |

#### Example input

```json
{
    "searchQueries": ["Naruto", "Steins;Gate", "Attack on Titan"],
    "mediaType": "anime",
    "maxListings": 50,
    "scrapeDetails": true
}
```

### Output

Each result contains the following fields:

#### Base fields (always included)

| Field | Type | Description |
|-------|------|-------------|
| `id` | integer | ANN encyclopedia entry ID |
| `title` | string | Main title |
| `type` | string | Media format (TV, movie, OAV, manga, etc.) |
| `alternativeTitles` | string\[] | Alternative titles in various languages |
| `genres` | string\[] | Genre tags (action, comedy, drama, etc.) |
| `themes` | string\[] | Theme tags (time travel, mecha, school life, etc.) |
| `plotSummary` | string | Full plot summary |
| `numberOfEpisodes` | integer | Number of episodes (anime) |
| `numberOfVolumes` | integer | Number of volumes (manga) |
| `vintage` | string\[] | Air date / publication date ranges |
| `weightedScore` | number | Weighted user score (0-10 scale) |
| `bayesianScore` | number | Bayesian average score (0-10 scale) |
| `voteCount` | integer | Number of user votes |
| `relatedWorks` | object\[] | Related entries (sequels, prequels, adaptations) |
| `imageUrl` | string | Cover/poster image URL |
| `url` | string | ANN encyclopedia page URL |
| `searchQuery` | string | The search query that found this result |
| `scrapedAt` | string | ISO timestamp of when data was scraped |

#### Extended detail fields (when `scrapeDetails` is true)

| Field | Type | Description |
|-------|------|-------------|
| `staff` | object\[] | Staff credits (director, writer, animator, etc.) |
| `cast` | object\[] | Voice cast with character, actor, and language |
| `episodes` | object\[] | Episode numbers and titles (multi-language) |
| `credits` | object\[] | Production companies and their roles |
| `openingThemes` | string\[] | Opening theme songs |
| `endingThemes` | string\[] | Ending theme songs |
| `officialWebsites` | object\[] | Official website URLs |

#### Example output

```json
{
    "id": 11770,
    "title": "Steins;Gate",
    "type": "TV",
    "alternativeTitles": ["シュタインズ・ゲート", "命運石之門", "Врата Штейна"],
    "genres": ["adventure", "comedy", "drama", "mystery", "science fiction", "thriller"],
    "themes": ["butterfly effect", "conspiracy", "technology", "Time travel", "tragedy"],
    "plotSummary": "Rintaro Okabe is a self-proclaimed \"mad scientist\" who believes...",
    "numberOfEpisodes": 24,
    "vintage": ["2011-04-05 to 2011-09-13"],
    "weightedScore": 9.0325,
    "bayesianScore": 9.0287,
    "voteCount": 4916,
    "relatedWorks": [
        { "id": 15891, "relation": "related to", "direction": "previous" },
        { "id": 13542, "relation": "sequel", "direction": "next" }
    ],
    "imageUrl": "https://cdn.animenewsnetwork.com/images/encyc/A11770-1864351140.jpg",
    "url": "https://www.animenewsnetwork.com/encyclopedia/anime.php?id=11770",
    "searchQuery": "Steins;Gate",
    "scrapedAt": "2026-04-25T12:00:00.000Z"
}
```

#### Example output with details

```json
{
    "id": 11770,
    "title": "Steins;Gate",
    "staff": [
        { "role": "Director", "name": "Takuya Satō", "personId": 593 },
        { "role": "Series Composition", "name": "Jukki Hanada", "personId": 16408 }
    ],
    "cast": [
        { "character": "Rintarō Okabe", "actor": "Mamoru Miyano", "personId": 10397, "language": "JA" },
        { "character": "Kurisu Makise", "actor": "Asami Imai", "personId": 9744, "language": "JA" }
    ],
    "episodes": [
        { "number": "1", "titles": [{ "lang": "EN", "title": "Prologue of the Beginning and End" }] }
    ],
    "credits": [
        { "role": "Animation Production", "company": "WHITE FOX", "companyId": 6989 }
    ],
    "openingThemes": ["\"Hacking to the Gate\" by Kanako Ito"],
    "endingThemes": ["\"Tokitsukasadoru Jūni no Meiyaku\" by Yui Sakakibara"]
}
```

### Rate limits

ANN's XML API is free but rate-sensitive. The scraper automatically:

- Adds 1.5s delays between requests to be respectful
- Handles 429 (rate limit) responses with progressive backoff
- Uses exponential backoff on failures (up to 3 retries)

### Use cases

- **Anime databases** -- Build comprehensive anime/manga databases with ratings, staff, and cast data
- **Recommendation engines** -- Use genre/theme tags and related works to build recommendation systems
- **Industry research** -- Analyze anime production trends, studios, voice actor careers, and genre popularity
- **Content aggregation** -- Combine ANN data with other sources (AniList, MyAnimeList) for richer datasets
- **Seasonal anime tracking** -- Monitor new anime releases and their scores using vintage date filtering
- **Voice actor research** -- ANN provides multi-language cast data (Japanese, English, French, Italian, Portuguese, etc.)

### Tips

- ANN's search uses fuzzy matching with `~` prefix internally, so partial titles work well
- Enable `scrapeDetails` only when you need staff/cast/episodes, as it makes one extra API call per entry
- The ANN XML API returns both anime and manga in search results; use `mediaType` to filter
- Related works IDs can be used for follow-up scrapes to build franchise graphs
- ANN's Bayesian score accounts for vote count, making it more reliable for comparison than weighted score
- The API is free and public, so proxy configuration is usually unnecessary

# Actor input Schema

## `searchQueries` (type: `array`):

Anime or manga titles to search (e.g. "Naruto", "Steins;Gate"). At least one query is required.

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

Type of media to search for.

## `maxListings` (type: `integer`):

Maximum number of results to return across all search queries (1-5000).

## `scrapeDetails` (type: `boolean`):

Fetch extended details for each entry: staff credits, voice cast, episode titles, production credits, themes, and official websites. Slower due to extra API calls per entry.

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

Optional proxy configuration. ANN's XML API is free and public, so proxies are usually not needed.

## Actor input object example

```json
{
  "searchQueries": [
    "Naruto",
    "Steins;Gate"
  ],
  "mediaType": "anime",
  "maxListings": 100,
  "scrapeDetails": false
}
```

# 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 = {
    "searchQueries": [
        "Naruto",
        "Steins;Gate"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lulzasaur/animenewsnetwork-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 = { "searchQueries": [
        "Naruto",
        "Steins;Gate",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("lulzasaur/animenewsnetwork-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 '{
  "searchQueries": [
    "Naruto",
    "Steins;Gate"
  ]
}' |
apify call lulzasaur/animenewsnetwork-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/ZtzqXiLdmCg4NsSWI/builds/Amax38jGppOHiVRrs/openapi.json
