{
  "openapi": "3.0.1",
  "info": {
    "title": "MyAnimeList Scraper - Anime, Manga, Rankings & Scores",
    "description": "Scrape MyAnimeList anime and manga by keyword, ranking chart or URL. Extract titles, scores, ranks, members, genres, studios, authors, synonyms and full synopses. Supports top, airing, upcoming, popular and favorite rankings, plus resume and incremental monitoring.",
    "version": "0.1",
    "x-build-id": "ViCEhzoGxQ4bgJ1OH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~myanimelist-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-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/abotapi~myanimelist-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-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/abotapi~myanimelist-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Collection mode",
            "enum": [
              "search",
              "charts",
              "url"
            ],
            "type": "string",
            "description": "Search MyAnimeList by keyword, walk a ranking chart, or read detail pages you paste.",
            "default": "search"
          },
          "mediaType": {
            "title": "Media type",
            "enum": [
              "anime",
              "manga",
              "both"
            ],
            "type": "string",
            "description": "Applies to search and charts. 'Both' walks anime then manga. URL mode detects anime or manga from each URL.",
            "default": "anime"
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "One or more keywords. Each keyword is its own walk; results are de-duplicated across keywords.",
            "default": [
              "Frieren"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "Search type filter",
            "enum": [
              "",
              "tv",
              "ova",
              "movie",
              "special",
              "ona",
              "music",
              "manga",
              "novel",
              "one-shot",
              "doujinshi",
              "manhwa",
              "manhua"
            ],
            "type": "string",
            "description": "MyAnimeList's own type filter for keyword search. A value that does not apply to the media type (for example TV on manga) is ignored for that media type.",
            "default": ""
          },
          "searchQueries": {
            "title": "Search queries (alias)",
            "type": "array",
            "description": "Alias of Search keywords; both lists are merged.",
            "items": {
              "type": "string"
            }
          },
          "chartKind": {
            "title": "Chart",
            "enum": [
              "top",
              "airing",
              "upcoming",
              "bypopularity",
              "favorite"
            ],
            "type": "string",
            "description": "Which ranking chart to walk in Charts mode.",
            "default": "top"
          },
          "topType": {
            "title": "Top list (alias)",
            "enum": [
              "",
              "anime",
              "manga"
            ],
            "type": "string",
            "description": "Shortcut for Charts mode with the Top ranking of this media type. Use Top list limit to set how many ranked titles.",
            "default": ""
          },
          "topLimit": {
            "title": "Top list limit (alias)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "With Top list: number of ranked titles. It sets the item cap whenever Maximum items is left at its default of 20; a Maximum items value other than 20 wins. 0 = use Maximum items.",
            "default": 0
          },
          "urls": {
            "title": "MyAnimeList URLs",
            "type": "array",
            "description": "Links to read: anime/manga detail pages (with or without slug), their reviews pages, keyword-search pages, top charts, genre, season and studio listings. The mobile host m.myanimelist.net is mapped to www. Unsupported links are skipped with a warning in the log. Left untouched, this holds one example of every supported shape (Maximum items still caps the total). That untouched default list is not run when Anime ids, Manga ids, Search queries or Top list are set.",
            "default": [
              "https://myanimelist.net/anime/5114/Fullmetal_Alchemist__Brotherhood",
              "https://myanimelist.net/anime/5114",
              "https://myanimelist.net/manga/2/Berserk",
              "https://myanimelist.net/manga/2",
              "https://myanimelist.net/anime.php?q=Frieren&cat=anime",
              "https://myanimelist.net/anime.php?cat=anime&q=Frieren&type=0",
              "https://myanimelist.net/anime.php?q=Frieren&cat=anime&show=0",
              "https://myanimelist.net/manga.php?q=berserk&cat=manga",
              "https://myanimelist.net/topanime.php",
              "https://myanimelist.net/topanime.php?type=airing&limit=50",
              "https://myanimelist.net/topanime.php?limit=50",
              "https://myanimelist.net/topmanga.php?type=bypopularity",
              "https://myanimelist.net/anime/5114/Fullmetal_Alchemist__Brotherhood/reviews",
              "https://myanimelist.net/anime/5114/x/reviews?p=2",
              "https://myanimelist.net/manga/2/Berserk/reviews",
              "https://myanimelist.net/anime/genre/1/Action",
              "https://myanimelist.net/anime/season",
              "https://myanimelist.net/anime/season/2024/fall",
              "https://myanimelist.net/anime/producer/1/Studio_Pierrot"
            ],
            "items": {
              "type": "string"
            }
          },
          "animeIds": {
            "title": "Anime IDs",
            "type": "array",
            "description": "MyAnimeList anime ids (for example 5114). Read as detail pages, in addition to the selected mode (or alone when no mode is set). Anime and manga ids are separate numbering: anime 21 and manga 21 are different titles.",
            "items": {
              "type": "string"
            }
          },
          "mangaIds": {
            "title": "Manga IDs",
            "type": "array",
            "description": "MyAnimeList manga ids (for example 2). Read as detail pages, in addition to the selected mode.",
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch full details for every record",
            "type": "boolean",
            "description": "Adds synopsis, full stats, related entries, character and staff previews, voice actors, and three review previews from each record's page. Use Maximum reviews to collect more. Adds a per-record detail-enrichment surcharge (see Output).",
            "default": true
          },
          "maxReviews": {
            "title": "Maximum reviews per record",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "3 (default) uses title-page previews with no extra review-page requests. Set a larger number (up to 5000) to collect that many reviews, or 0 for the most available review pages up to the same 5000-review ceiling. Applies only when details are fetched; each returned review, including a preview, adds one review-enrichment event.",
            "default": 3
          },
          "maxItems": {
            "title": "Maximum records",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many records across all keywords or links. 0 means no limit: the run ends at the natural end of results.",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum pages per keyword or chart",
            "minimum": 0,
            "type": "integer",
            "description": "Pages to walk per keyword or chart. 0 (default) keeps walking until the item cap or the natural end of results; Max records remains the only cap that stops a run early.",
            "default": 0
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Use the default connection settings, or adjust them for your run.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run id (or dataset id) to skip the records it already collected and return only new ones."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring runs)",
            "type": "boolean",
            "description": "For scheduled runs of the same scope: classify each record as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against the previous run's baseline. Compared: every output field of the record except the incremental bookkeeping keys (changeType, changedFields, firstSeenAt, lastSeenAt), the fields that are always left out (reviews.reactionCount, reviews.reactions, malId, titleSynonyms, airedFrom, airedTo, season, year, trailerUrl and scrapedAt; rank is compared: it is the chart position on chart rows and mirrors the overall score rank only on rows without a chart position) and any field listed in Ignore fields; whole-number values compare equal whether written 25 or 25.0. Excluded fields stay in the output. Records whose content did not change are suppressed unless Emit unchanged is on.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Stable name for a monitoring campaign. Leave empty to key the baseline automatically on the mode, media type and scope."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records",
            "type": "boolean",
            "description": "With incremental mode on, also return records whose content did not change, marked UNCHANGED. These are extra rows: they are returned AND billed.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired records",
            "type": "boolean",
            "description": "With incremental mode on, also return records no longer found, marked EXPIRED. Only after a complete uncapped scan of the scope; these are extra rows: they are returned AND billed.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Incremental mode only: field names that must not count as a change, for example a fast-moving counter. Use dotted paths for nested fields (reviews.rating); lists are searched element by element. These fields are always left out already: reviews.reactionCount, reviews.reactions, malId, titleSynonyms, airedFrom, airedTo, season, year, trailerUrl and scrapedAt. rank is not among them: it is the chart position on chart rows and mirrors the overall score rank (ranked) only on rows without a chart position. The fields stay in the output, they are just left out of change detection and changedFields.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Send results into your apps (optional)",
            "type": "array",
            "description": "Connector ids to also export results into after the run. Dataset output is unchanged.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (optional)",
            "type": "string",
            "description": "Parent page for the Notion connector export."
          },
          "maxNotifyListings": {
            "title": "Maximum connector items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum items sent to each connector. Does not change the dataset.",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}