{
  "openapi": "3.0.1",
  "info": {
    "title": "MyAnimeList Scraper",
    "description": "[💰 $2.5 / 1K] Extract anime and manga from MyAnimeList — scores, rankings, genres, studios, episodes, synopsis, member counts, and full user reviews. Filter by format, status, genre, score, and age rating, search by keyword, or paste MyAnimeList URLs. Titles and reviews returned as separate rows.",
    "version": "1.0",
    "x-build-id": "0HvpriSGkqczgnIuC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~myanimelist-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-myanimelist-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/solidcode~myanimelist-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-myanimelist-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/solidcode~myanimelist-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-myanimelist-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "contentType": {
            "title": "Anime or Manga",
            "enum": [
              "anime",
              "manga"
            ],
            "type": "string",
            "description": "Choose which catalogue to pull from. This applies to searches and rankings — if you paste URLs below, each URL decides its own type automatically."
          },
          "startUrls": {
            "title": "MyAnimeList URLs",
            "type": "array",
            "description": "Paste one or more MyAnimeList page links (for example https://myanimelist.net/anime/21/One_Piece or https://myanimelist.net/manga/13/One_Piece). Leave this blank to use the search terms or rankings instead.",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search Terms",
            "type": "array",
            "description": "Titles or keywords to look up, for example 'one piece', 'attack on titan', 'ghibli'. Each term is searched separately and the matching titles are collected. Leave blank — and leave URLs blank too — to pull the rankings instead.",
            "items": {
              "type": "string"
            }
          },
          "format": {
            "title": "Format",
            "enum": [
              "tv",
              "movie",
              "ova",
              "ona",
              "special",
              "music",
              "manga",
              "novel",
              "lightnovel",
              "oneshot",
              "doujin",
              "manhwa",
              "manhua"
            ],
            "type": "string",
            "description": "Keep only titles of this format. Anime formats apply when you pick Anime above, manga formats when you pick Manga. Leave blank for every format."
          },
          "status": {
            "title": "Release Status",
            "enum": [
              "airing",
              "complete",
              "upcoming",
              "hiatus",
              "discontinued"
            ],
            "type": "string",
            "description": "Keep only titles at this stage of release. Leave blank for any status."
          },
          "genres": {
            "title": "Genres",
            "type": "array",
            "description": "Keep only titles tagged with these genres. A title must match ALL of the genres you pick, so each extra genre narrows the results further — pick one or two for a broad list. Leave blank for every genre.",
            "items": {
              "type": "string",
              "enum": [
                "action",
                "adventure",
                "avant-garde",
                "award-winning",
                "boys-love",
                "comedy",
                "drama",
                "ecchi",
                "fantasy",
                "girls-love",
                "gourmet",
                "horror",
                "mystery",
                "romance",
                "sci-fi",
                "slice-of-life",
                "sports",
                "supernatural",
                "suspense"
              ],
              "enumTitles": [
                "Action",
                "Adventure",
                "Avant Garde",
                "Award Winning",
                "Boys Love",
                "Comedy",
                "Drama",
                "Ecchi",
                "Fantasy",
                "Girls Love",
                "Gourmet",
                "Horror",
                "Mystery",
                "Romance",
                "Sci-Fi",
                "Slice of Life",
                "Sports",
                "Supernatural",
                "Suspense"
              ]
            }
          },
          "minScore": {
            "title": "Minimum Score",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Keep only titles rated at or above this community score, on MyAnimeList's 1–10 scale. For reference, 8 and above is very well regarded. Leave blank for any score."
          },
          "ageRating": {
            "title": "Age Rating",
            "enum": [
              "g",
              "pg",
              "pg13",
              "r17",
              "r"
            ],
            "type": "string",
            "description": "Keep only titles with this audience rating. Applies to anime only — MyAnimeList does not rate manga this way. Leave blank for any rating."
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "score",
              "popularity",
              "start_date",
              "title"
            ],
            "type": "string",
            "description": "The order titles come back in when browsing or filtering. 'Highest score' with no search term and no filters gives you the MyAnimeList Top Anime or Top Manga ranking. 'Most popular' orders by how many members are tracking the title. Not used when you enter search terms above — keyword searches are always ordered by MyAnimeList's own best-match ranking."
          },
          "includeReviews": {
            "title": "Include User Reviews",
            "type": "boolean",
            "description": "Also collect user reviews for every title, returned as their own rows with the reviewer, score, full review text, spoiler flag, and date. Each review counts as a separate result. Turn this off for a faster, cheaper run that returns titles only."
          },
          "maxReviewsPerTitle": {
            "title": "Max Reviews Per Title",
            "minimum": 0,
            "type": "integer",
            "description": "How many reviews to collect for each title, most helpful first. Set to 0 to collect every review available (up to a safety ceiling of 2,000 per title — MyAnimeList's most-reviewed title currently has around 965, so this ceiling is not normally reached). Reviews are read 20 at a time, so a cap of 10 costs one extra page per title while an uncapped long-running series can cost 50. Each title also gets its own collection time budget, which grows with the number of reviews you ask for; on a rare title with many hundreds of reviews it can end that title early, and the run tells you when it does. Spoiler and preliminary reviews are always included. Ignored when 'Include User Reviews' is off."
          },
          "includeCharacters": {
            "title": "Include Main Characters",
            "type": "boolean",
            "description": "Add the main cast to each title's row — character names plus their Japanese voice actors. Only main characters are included, not the full supporting roster. This adds detail to existing rows and does not create extra results, but MyAnimeList serves the entire cast list in one go, so it makes each title noticeably slower to collect on long-running series. Applies to anime only — manga has no cast listing."
          },
          "maxResults": {
            "title": "Max Titles",
            "minimum": 0,
            "type": "integer",
            "description": "The total number of anime or manga titles to collect across every URL, search term, and ranking. Reviews do not count against this number — they have their own limit above. Set to 0 to collect every match, up to a ceiling of 60,000 titles per search term or ranking (comfortably more than MyAnimeList's whole catalogue). Be aware that MyAnimeList matches search terms loosely: a broad term can match thousands of titles and take over an hour, and the run may stop at its time limit before finishing — everything collected up to that point is still saved. Set a number here if you're unsure."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}