# MangaDex Manga Cover Scraper (`parseforge/mangadex-manga-cover-scraper`) Actor

Pull manga metadata and cover art from MangaDex's public API. Retrieve fields like manga title, cover art file name, author name, artist name, and description. Ideal for building a manga database or creating a visual gallery of cover images.

- **URL**: https://apify.com/parseforge/mangadex-manga-cover-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.24 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### MangaDex Manga Cover Scraper

**Scrape manga covers from MangaDex with full metadata, up to a million per run.** Every manga entry comes with its cover art URL, title in multiple languages, description, tags, author, artist, and content rating. No login or API key. Export to CSV, JSON, Excel, or XML.

MangaDex's official API works well, but you still need to paginate through thousands of titles and build your own cover URL from the cover art filename. This actor does that for you: it reads the public MangaDex API, applies your filters, and returns each manga as a clean row with a direct cover image link and all associated metadata.

| Who uses it | What they scrape MangaDex for |
|---|---|
| Manga readers and collectors | Building a personal library of cover art from their favorite manga series. |
| Developers building manga apps | Populating a database of manga covers and metadata for a reading app or catalog. |
| Content creators and bloggers | Getting cover images and descriptions to illustrate manga reviews or recommendation lists. |
| Data analysts in the anime/manga industry | Studying trends in manga genres, demographics, and publication years over time. |

### What it does

This Actor collects manga covers and metadata from MangaDex's public API, returning each manga as a flat row with its cover art URL, title, description, tags, author, artist, and content rating.

- 🔍 **Search by title:** Input a search query to filter manga by name, or leave empty to get all manga.
- 🗂️ **Multiple filters at once:** Filter by content rating, publication demographic, status, original language, year, available translated languages, or include/exclude specific tags.
- 📎 **Direct cover URL:** Each result includes the full cover image URL - no need to construct it yourself from the filename.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with MangaDex data

**🖼️ Build a cover art database.**

A manga collector runs the scraper with no filters to download all available manga covers and catalogue them by series name and author.

**🔍 Curate manga by demographic or rating.**

A blogger filters by 'shounen' demographic and 'safe' content rating to get cover images and synopses for a family-friendly recommendation article.

**📈 Track manga publication trends.**

A market researcher filters by year and original language to analyze how many new Japanese manga started in a given year, complete with cover art for each.

**🌐 Support multilingual manga catalogs.**

A developer filters by available translated language 'en' to collect all English-translated manga covers and metadata for an app.

### Why choose this scraper

| | What you get |
|---|---|
| **Cover URL returned directly** | The cover URL is pre-built from the cover art data. No manual URL construction. |
| **Rich manga metadata** | Every row includes descriptions in English and Japanese, tags, ratings, author and artist names, and publication details. |
| **No authentication required** | The public MangaDex API needs no login, API key, or rate limiting. run. |
| **Bulk export ready** | Output can be saved as CSV, JSON, Excel, or XML. Sample output shown below. |

### How it compares

This actor focuses on manga cover art plus rich metadata, while other MangaDex scrapers are broader (chapters, tags) or narrower (search only).

| Feature | ParseForge | MangaDex Titles Search Scraper | MangaDex Scraper - Manga, Chapters, Tags via Public API | MangaDex Manga Scraper |
|---|---|---|---|---|
| Direct cover image URL returned | Yes | Not listed | Not listed | Not listed |
| Filter by tags (include/exclude) | Yes | Not listed | Not listed | Yes |
| Filter by publication demographic | Yes | Not listed | Not listed | Yes |
| Filter by original language | Yes | Not listed | Not listed | Not listed |
| Filter by available translated language | Yes | Not listed | Not listed | Not listed |
| Search by title | Yes | Yes | Not listed | Yes |
| Export to multiple formats (CSV, JSON, Excel, XML) | Yes | Not listed | Not listed | Not listed |

### What a MangaDex record looks like

Every record returns as one flat JSON row. Here is a real one from a run:

```json
{
 "imageUrl": "https://uploads.mangadex.org/covers/c727d921-4294-455b-9bcc-2f0c7d29cd9a/f8417c29-4848-406b-a1bf-e3d6c38f4d91.jpg",
 "title": "Rokudenashi Blues",
 "url": "https://mangadex.org/title/c727d921-4294-455b-9bcc-2f0c7d29cd9a",
 "id": "c727d921-4294-455b-9bcc-2f0c7d29cd9a",
 "status": "completed",
 "descriptionEn": "Maeda is a new student in the Teiken High School. He stutters when he's nervous and he's rather clumsy. He gets noted immediately because he hits a teacher during the entrance ceremony. Some clubs search to enlist him as they see in him a force they can use to get even with other clubs. But Maeda is a loner and has only one dream: becoming boxing champion. His first objective is to beat the leader of the boxing club. \"Rokudenashi\" translates as \"good for nothing\". \n \nThe manga focuses more on gang warfare than boxing.",
 "originalLanguage": "ja",
 "lastVolume": "25",
 "lastChapter": "421",
 "publicationDemographic": "shounen",
 "year": 1988,
 "contentRating": "suggestive",
 "state": "published",
 "createdAt": "2018-04-21T10:39:08+00:00",
 "updatedAt": "2026-05-17T23:16:47+00:00"
}
```

Every value above comes from a real run. A field a record does not have comes back as `null`.

### Configure the run

Drive the Actor from a search query or leave it blank to scrape all manga, then narrow results by content rating, demographic, status, language, year, and tags. Filters are applied server-side by the MangaDex API so only matching manga reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "maxItems": 10,
 "contentRating": [
 "safe",
 "suggestive"
 ],
 "publicationDemographic": [],
 "status": [],
 "originalLanguage": [],
 "year": 0,
 "availableTranslatedLanguage": [],
 "includeTags": [],
 "excludeTags": []
}
```

A larger pull:

```json
{
 "maxItems": 200,
 "contentRating": [
 "safe",
 "suggestive"
 ],
 "publicationDemographic": [],
 "status": [],
 "originalLanguage": [],
 "year": 0,
 "availableTranslatedLanguage": [],
 "includeTags": [],
 "excludeTags": []
}
```

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Set your inputs and any filters, then click **Start**.
3. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to MangaDex through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Your filters may be too restrictive. Try removing filters one at a time. Also ensure the search query is spelled correctly - MangaDex's search is exact and case-sensitive.

**The cover URL is incomplete or invalid.**

The actor constructs the cover URL using the cover art filename from the API. If the filename is missing, the cover URL field will be empty. This is rare but can happen for manga that have no uploaded cover.

**I set maxItems to 1000000 but got only 10 results.**

Make sure you are logged in and have a paid Apify subscription. Free accounts are limited to 10 items as a preview.

**The run seems to hang or takes too long.**

If you are scraping all manga without filters, the API returns many pages. Reduce maxItems or apply filters to limit the dataset. The actor uses pagination and respects API rate limits.

**My tag filter doesn't work as expected.**

Tag IDs must be the UUIDs used by MangaDex, not tag names. Check the MangaDex API documentation or a tag list to get the correct IDs.

### FAQ

| Question | Answer |
|---|---|
| What data does this scraper return? | For each manga, it returns the cover art URL, manga ID, title in Japanese romanized and other languages, descriptions (English and Japanese), author, artist, tags, content rating, publication status, year, and more. |
| Do I need an API key or login? | No. The actor uses the public MangaDex API which is open and does not require any credentials. |
| How many manga can I scrape in one run? | Free users are limited to 10 items for preview. Paid users can set maxItems up to 1,000,000, depending on their subscription plan. |
| How do I filter by a specific tag? | Use the 'Include tags' field with the tag ID (e.g., from MangaDex). You can also use 'Exclude tags' to remove manga with certain tags. |
| Can I search by manga title? | Yes, enter a search query in the 'Search query' field. Leave it empty to get all manga. |
| What is the cover art URL format? | The actor returns the full URL to the cover image (e.g., https://uploads.mangadex.org/covers/manga-id/filename.jpg). You can use it directly in a browser or download it. |
| Does it support filters like demographic or status? | Yes. You can filter by publication demographic (shounen, shoujo, etc.), publication status (ongoing, completed, etc.), content rating, year, original language, and available translated languages. |
| Can I get covers for manga only in a specific language? | Yes, use the 'Original language' filter to get manga originally published in Japanese, Korean, Chinese, etc., or the 'Available translated language' filter to get manga that have translations in a given language. |
| What export formats are available? | The actor supports CSV, JSON, Excel (XLSX), and XML. The sample output shown on the actor page demonstrates the JSON structure. |
| Is the MangaDex API reliable? | The official MangaDex API is stable and publicly documented. The actor handles pagination and retries to ensure you get a complete dataset. |
| What if I get no results? | Double-check your filters. For example, if you set a content rating of 'safe' and also include a tag that is only used in 'suggestive' manga, you might get zero results. Try removing filters one by one. |
| Can I scrape cover art for every chapter or volume? | No, this scraper returns the main cover for each manga. Chapter-level covers are not available through this actor. |

### Related actors

- [myanimelist-scraper](https://apify.com/parseforge/myanimelist-scraper?fpr=vmoqkp): Use this instead if you need anime and manga data from MyAnimeList, with ratings and recommendations.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by MangaDex. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `searchQuery` (type: `string`):

Optional search term to filter manga by title. Leave empty to get all manga.

## `contentRating` (type: `array`):

Filter manga by content rating. Choose one or more ratings.

## `publicationDemographic` (type: `array`):

Filter manga by target demographic. Choose one or more demographics.

## `status` (type: `array`):

Filter manga by publication status. Choose one or more statuses.

## `originalLanguage` (type: `array`):

Filter manga by original language code (e.g., 'ja', 'ko', 'zh'). Leave empty for all.

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

Filter manga by publication year. Leave empty for all years.

## `availableTranslatedLanguage` (type: `array`):

Filter manga by available translated language code (e.g., 'en', 'es'). Leave empty for all.

## `includeTags` (type: `array`):

List of tag IDs to include. Only manga with all specified tags will be returned.

## `excludeTags` (type: `array`):

List of tag IDs to exclude. Manga with any of these tags will be excluded.

## Actor input object example

```json
{
  "maxItems": 10,
  "contentRating": [
    "safe",
    "suggestive"
  ],
  "publicationDemographic": [],
  "status": [],
  "originalLanguage": [],
  "availableTranslatedLanguage": [],
  "includeTags": [],
  "excludeTags": []
}
```

# Actor output Schema

## `results` (type: `string`):

Complete dataset of all scraped records.

# 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 = {
    "maxItems": 10,
    "searchQuery": "",
    "contentRating": [
        "safe",
        "suggestive"
    ],
    "publicationDemographic": [],
    "status": [],
    "originalLanguage": [],
    "year": 0,
    "availableTranslatedLanguage": [],
    "includeTags": [],
    "excludeTags": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/mangadex-manga-cover-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 = {
    "maxItems": 10,
    "searchQuery": "",
    "contentRating": [
        "safe",
        "suggestive",
    ],
    "publicationDemographic": [],
    "status": [],
    "originalLanguage": [],
    "year": 0,
    "availableTranslatedLanguage": [],
    "includeTags": [],
    "excludeTags": [],
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/mangadex-manga-cover-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 '{
  "maxItems": 10,
  "searchQuery": "",
  "contentRating": [
    "safe",
    "suggestive"
  ],
  "publicationDemographic": [],
  "status": [],
  "originalLanguage": [],
  "year": 0,
  "availableTranslatedLanguage": [],
  "includeTags": [],
  "excludeTags": []
}' |
apify call parseforge/mangadex-manga-cover-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/mangadex-manga-cover-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/Upu3J91GikbPF2Z3g/builds/MSgp3bUHKX7NPdQYC/openapi.json
