{
  "openapi": "3.0.1",
  "info": {
    "title": "CruiseMapper Scraper - Cruises, Itineraries & Ship Tracker",
    "description": "Scrape CruiseMapper cruises by date, region, ship, line or port: full itinerary with port times, nights, lowest price. Plus ship specs (IMO, MMSI, tonnage, capacity), live positions of 1,100+ cruise ships and port schedules. Accepts the input of the old CruiseMapper actor.",
    "version": "0.1",
    "x-build-id": "kBc0XmUHNePe7e1JT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~cruisemapper-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-cruisemapper-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/scrapewise~cruisemapper-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-cruisemapper-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/scrapewise~cruisemapper-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-cruisemapper-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "cruises",
              "ships",
              "fleetPositions",
              "portSchedule"
            ],
            "type": "string",
            "description": "Cruises: the CruiseMapper cruise finder with the filters below, one row per sailing with its full itinerary. Ships: one row per ship with IMO, MMSI, specs, current position and upcoming cruises. Live fleet positions: every ship on CruiseMapper's live map (about 1,100) with latitude, longitude, speed, course and destination. Port schedule: every ship calling at the ports you list, with arrival and departure times, month by month.",
            "default": "cruises"
          },
          "startUrls": {
            "title": "CruiseMapper links (optional)",
            "type": "array",
            "description": "Links copied from cruisemapper.com: a cruise finder results page (its filters are kept), a ship page (https://www.cruisemapper.com/ships/Allure-Of-The-Seas-662), a cruise line page or a port page (https://www.cruisemapper.com/ports/miami-port-40). Ship and line links give cruises in 'Cruises' mode and ship rows in 'Ships' mode; port links give the port schedule.",
            "items": {
              "type": "string"
            }
          },
          "region": {
            "title": "Destination",
            "enum": [
              "0",
              "8",
              "4",
              "22",
              "2",
              "20",
              "23",
              "6",
              "5",
              "7",
              "11",
              "13",
              "9",
              "21",
              "12",
              "1",
              "10",
              "14",
              "24",
              "15",
              "16",
              "17",
              "18",
              "26"
            ],
            "type": "string",
            "description": "CruiseMapper's destination regions. Leave empty for all destinations. The 'destination' field of older CruiseMapper actors (codes such as \"8\" or names such as \"Caribbean\") is also read."
          },
          "startDate": {
            "title": "Departing from",
            "type": "string",
            "description": "First departure date, YYYY-MM-DD (for example 2026-12-01). Empty = today. DD-MMM-YYYY (01-Dec-2026) also works."
          },
          "endDate": {
            "title": "Departing until",
            "type": "string",
            "description": "Last departure date, YYYY-MM-DD. Results come in date order and the run stops after this date. Empty = no end date (use 'Days ahead' or 'Max results')."
          },
          "daysAhead": {
            "title": "Days ahead",
            "minimum": 0,
            "maximum": 1500,
            "type": "integer",
            "description": "Window of departure dates counted from 'Departing from' (or today), used when 'Departing until' is empty. 60 = cruises leaving in the next 60 days."
          },
          "cruiseLength": {
            "title": "Cruise length (nights)",
            "enum": [
              "any",
              "1-2",
              "3-5",
              "6-10",
              "11-14",
              "15+"
            ],
            "type": "string",
            "description": "Length filter of the site. Codes \"0\" to \"5\" from older actors are read too."
          },
          "shipName": {
            "title": "Ship",
            "type": "string",
            "description": "Ship name as on CruiseMapper, for example Allure Of The Seas or Celebrity Edge. Capital letters do not matter; an unknown name returns a free error row with suggestions instead of every cruise."
          },
          "cruiseLine": {
            "title": "Cruise line",
            "type": "string",
            "description": "Cruise line, for example Royal Caribbean, Carnival Cruise Line, MSC Cruises, Viking River Cruises. In 'Ships' mode it lists the whole fleet of the line."
          },
          "departurePort": {
            "title": "Departure port",
            "type": "string",
            "description": "Port the cruise leaves from, for example Miami, Fort Lauderdale, Barcelona, Southampton."
          },
          "portOfCall": {
            "title": "Port of call",
            "type": "string",
            "description": "Only cruises that stop at this port, for example Nassau, Cozumel, Santorini."
          },
          "shipType": {
            "title": "Ship type",
            "enum": [
              "any",
              "ocean",
              "river"
            ],
            "type": "string",
            "description": "CruiseMapper has no ship type filter, so the Actor checks each ship against the site's live map category (river cruise ships are their own category). Filtered cruises are not charged.",
            "default": "any"
          },
          "cruiseType": {
            "title": "Cruise type",
            "enum": [
              "any",
              "transatlantic",
              "transpacific",
              "panama-canal-transit",
              "suez-canal",
              "world",
              "christmas",
              "new-year",
              "christmas-new-year",
              "thanksgiving",
              "halloween",
              "easter",
              "independence-day",
              "chinese-new-year",
              "uk-school-breaks",
              "northern-lights",
              "food-wine",
              "music",
              "sport",
              "party",
              "mini",
              "nowhere",
              "reposition-spring",
              "reposition-summer",
              "reposition-autumn",
              "reposition-winter"
            ],
            "type": "string",
            "description": "Themed and holiday cruises, ocean crossings and repositioning cruises, as in the site's finder."
          },
          "maxPricePerPerson": {
            "title": "Max price per person (USD)",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Lowest advertised price per person, in US dollars, as the site filters it. Cruises with no price shown are kept by the site."
          },
          "includeItinerary": {
            "title": "Full itinerary",
            "type": "boolean",
            "description": "On (default): every cruise gets its ports with arrival and departure times, countries, port links, return date and arrival port (a little slower, same price). Off: faster, only the search row.",
            "default": true
          },
          "shipNames": {
            "title": "Ships",
            "type": "array",
            "description": "For 'Ships' and 'Live fleet positions': ship names (Allure Of The Seas), IMO numbers (9383948) or MMSI numbers, one per line. In 'Ships' mode, 'Cruise line' adds the whole fleet of that line.",
            "items": {
              "type": "string"
            }
          },
          "includeShipDetails": {
            "title": "Ship details",
            "type": "boolean",
            "description": "On (default): opens each ship page for IMO, MMSI, specs, current position and cruise list. Off: only name, link and line, from the ship list (fast).",
            "default": true
          },
          "includeUpcomingCruises": {
            "title": "Upcoming cruises of each ship",
            "type": "boolean",
            "description": "Adds every upcoming cruise listed on the ship page (date, title, departure port, lowest price, link) to ship rows.",
            "default": true
          },
          "ports": {
            "title": "Ports",
            "type": "array",
            "description": "For 'Port schedule': port names (Miami, Barcelona, Nassau), port ids or port links, one per line. Empty = Miami as an example.",
            "items": {
              "type": "string"
            }
          },
          "month": {
            "title": "First month",
            "pattern": "^$|^\\d{4}-\\d{1,2}$",
            "type": "string",
            "description": "First month of the port schedule, YYYY-MM (2026-12). Empty = the month of 'Departing from', or this month."
          },
          "numberOfMonths": {
            "title": "Number of months",
            "minimum": 1,
            "maximum": 36,
            "type": "integer",
            "description": "How many months of schedule to read per port, starting from 'First month'.",
            "default": 1
          },
          "maxItems": {
            "title": "Max results per input",
            "minimum": 1,
            "maximum": 60000,
            "type": "integer",
            "description": "Results per search, ship list or port. Empty = 50 (all ships in 'Live fleet positions'). The old 'max_number_of_pages' (15 cruises per page, -1 = all) is read too."
          },
          "onlyNew": {
            "title": "Only new since the last run",
            "type": "boolean",
            "description": "For scheduled runs. Remembers what each search (filters, not dates) already returned, in a key-value store in your account ('cruisemapper-scraper-state'), and delivers only cruises, ships or port calls not seen before. Already seen results are not delivered and not charged. Delete the store to start over.",
            "default": false
          },
          "compareWithPreviousRun": {
            "title": "Track price changes",
            "type": "boolean",
            "description": "Compares each cruise's lowest price with your previous runs of the same search and adds is_new, first_seen_at, previous_price_usd, price_change, price_change_pct and is_price_drop. With 'Only new' on too, you get new cruises plus the ones whose price changed.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed: CruiseMapper answers without a proxy (tested from datacenter and residential IPs too). Turn on Apify Proxy only if your runs get refused.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}