# MSC Cruises Scraper (`vulnv/msc-cruises-scraper`) Actor

Search MSC Cruises sailings by destination, port, ship, date and duration, and extract full cruise details including day-by-day itineraries and pricing.

- **URL**: https://apify.com/vulnv/msc-cruises-scraper.md
- **Developed by:** [VulnV](https://apify.com/vulnv) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## MSC Cruises Scraper

Search **MSC Cruises** sailings and extract full cruise details — ship, ports, dates,
duration, cabin pricing, promotions and the complete **day-by-day itinerary** shown on
each cruise's detail page — as clean, structured JSON.

The scraper mirrors the filters on the MSC Cruises search page (destination, departure
port, ship, departure dates, duration, cabin type and guest count) and returns one
record per sailing.

### 🚀 How to use

1. Click **Try for free** / **Start**.
2. Pick your filters — destination, departure port, ship, dates, duration, cabin type
   (or leave them empty to scrape all upcoming cruises).
3. Run the Actor and download the results as **JSON, CSV, Excel, HTML or via API**.

### ✨ Features

- 🔎 **Full search filtering** — destination, departure port, ship, departure date range,
  number of nights, cabin type and number of guests.
- 🚢 **Rich per-sailing data** — ship, embarkation/disembarkation ports, ports of call,
  number of nights, season, availability, ribbons/promotions and flight options.
- 💶 **Pricing** — best price per adult and per cabin, strike-through (was) prices,
  port charges and discounts for the requested guest configuration.
- 🗓️ **Details page scraping** — for each cruise it visits the details page and extracts
  the full **day-by-day itinerary** (port, arrival/departure times, descriptions) and the
  complete **cabin price matrix** (every cabin category, experience and rate, with
  strike-through prices).
- 🔗 **Detail page URL** — a ready-to-open link to each cruise on msccruises.eu.
- 🌍 **Any MSC storefront** — defaults to the Eastern Europe storefront but every market
  (base URL, locale, currency) is configurable.

### 🧭 Input

All fields are optional. Run with no input to scrape upcoming cruises for the default
storefront.

| Field | Type | Description |
|-------|------|-------------|
| `departureDateFrom` | string (YYYY-MM-DD) | Earliest departure date. Defaults to today. |
| `departureDateTo` | string (YYYY-MM-DD) | Latest departure date. Defaults to ~2 years out. |
| `destinations` | array | Destination area codes, e.g. `MED`, `NOR`, `CAR`. |
| `departurePorts` | array | Embarkation port codes, e.g. `PIR`, `BCN`, `GOA`. |
| `ships` | array | Ship codes, e.g. `SX` (MSC Sinfonia), `EU` (MSC World Europa). |
| `cabinTypes` | array | `INS` (Interior), `OUT` (Ocean View), `BAL` (Balcony), `SUI` (Suite), `YTC` (Yacht Club). |
| `minNights` / `maxNights` | integer | Cruise duration range, in nights. |
| `adults` | integer | Adults the prices are calculated for (default `2`). |
| `juniors` / `minors` | integer | Younger guests / children in the cabin (default `0`). |
| `availableOnly` | boolean | Only return bookable sailings (default `true`). |
| `scrapeDetails` | boolean | Visit each cruise's details page for the day-by-day itinerary and full cabin price matrix (default `true`). |
| `maxResults` | integer | Maximum number of records to store (default `100`). |
| `advancedFilter` | string | Raw Algolia filter clause appended with `AND`. Power users. |
| `baseUrl`, `marketPath`, `locale`, `currencyCode`, `languageCode`, `countryCode` | string | Storefront / market overrides. Defaults target `https://www.msccruises.eu` Eastern Europe. |
| `proxyConfiguration` | object | Optional proxy for outbound requests. |

#### Example input

```json
{
  "departurePorts": ["PIR"],
  "departureDateFrom": "2026-10-01",
  "departureDateTo": "2026-11-30",
  "adults": 2,
  "scrapeDetails": true,
  "maxResults": 50
}
````

### 📦 Output

Each dataset item is one sailing. Abridged example:

```json
{
  "cruiseID": "SX20261020PIRPIR",
  "itinCd": "UYOR",
  "itineraryName": "Mediterranean",
  "shipCd": { "key": "SX", "value": "MSC Sinfonia" },
  "embkPort": { "key": "PIR", "value": "Piraeus" },
  "disembkPort": { "key": "PIR", "value": "Piraeus" },
  "departureStartDate": "2026-10-20",
  "numberOfNights": 6,
  "macroCategory": { "key": "INS", "value": "Interior" },
  "portOfCalls": ["SEADAY", "CFU", "KAK", "BRI", "ARM"],
  "bestSavingPricePerAdult": 210,
  "bestSavingPricePerCabin": 420,
  "prices": {
    "cabinPrice": 862,
    "adultPrice": 431,
    "portCharges": 150,
    "strikethroughPrice": { "cabinPrice": 1282, "adultPrice": 641 }
  },
  "detailUrl": "https://www.msccruises.eu/easterneurope/search/itinerary?cruiseId=SX20261020PIRPIR&itineraryCode=UYOR&...",
  "cruiseDetails": {
    "itinerary": {
      "code": "UYOR",
      "cruiseDuration": 6,
      "days": [
        {
          "date": "2026-10-20",
          "dayOfWeek": "TUESDAY",
          "departureTime": "17:00:00",
          "port": { "code": "PIR", "name": "Piraeus", "description": "..." }
        }
      ]
    },
    "cabinPrices": [
      {
        "category": { "key": "IB", "value": "Interior" },
        "macroCategory": { "key": "INS", "value": "Interior" },
        "priceCode": "SXC00209AR6036FL",
        "priceType": "FLASH",
        "prices": {
          "adultPrice": 431,
          "cabinPrice": 862,
          "portCharges": 150,
          "strikethroughPrice": { "adultPrice": 641, "cabinPrice": 1282 }
        }
      }
    ]
  }
}
```

When `scrapeDetails` is enabled, `cruiseDetails.cabinPrices` contains **every** cabin
category / experience / rate combination available for the sailing (e.g. ~40 options),
exactly as listed on the cruise's details page.

For convenience, the most useful detail facts are also flattened to the **top level** of
each record (so they appear directly in the dataset table view, not only in the nested
`cruiseDetails`):

| Field | Description |
|-------|-------------|
| `itineraryDayCount` | Number of days in the day-by-day itinerary. |
| `itineraryPorts` / `itineraryPortsText` | Ordered list of port names / a `A → B → C` string. |
| `cabinOptionsCount` | Number of cabin/rate options found on the details page. |
| `priceFromInterior`, `priceFromOceanView`, `priceFromBalcony`, `priceFromSuite`, `priceFromYachtClub` | Lowest per-adult price for each cabin category. |
| `lowestCabinPriceAdult` | Lowest per-adult price across all cabins. |

The dataset has two views: **Overview** (flat table with the summary columns above) and
**Cruise details** (includes the full nested `cruiseDetails`).

### 💡 Use cases

- Monitor MSC cruise prices and promotions for specific routes or ships.
- Build a cruise comparison or alerting tool.
- Analyse itineraries, ports of call and sailing durations across a season.
- Feed structured cruise data into travel agency or affiliate sites.

### ⚙️ Notes

- The search API caps deep pagination at 1,000 results per query, so the scraper
  automatically pages through results **month by month** and de-duplicates to retrieve
  large ranges. Narrow the date range or filters for very broad searches.
- Destination, port and ship codes are listed in the input form's dropdowns.

### 💳 Pricing

This Actor is monetized on a **pay-per-result + usage** basis: you pay a small fee per
cruise result, plus the Apify platform usage your run consumes. Runs are lightweight —
direct API calls with no headless browser — so usage stays low. New users can try it on
the Apify free tier (capped sample). See the **Pricing** tab on the Actor's page for the
current rate.

### ❓ FAQ

**Is scraping MSC Cruises data legal?**
The Actor collects only publicly available information shown on the MSC Cruises website.
As with any scraping, use the data responsibly and in line with applicable laws and the
site's terms.

**Which markets are supported?**
It defaults to the Eastern Europe storefront (`msccruises.eu`, EUR), and the market,
locale and currency are fully configurable to target other MSC storefronts.

**Can I get the day-by-day itinerary and all cabin prices?**
Yes — keep `scrapeDetails` enabled (the default). Each cruise then includes the full
day-by-day itinerary and the complete cabin price matrix.

**How do I scrape only a few results to test?**
Set `maxResults` to a small number (e.g. 5) and add a narrow date range or a single
departure port.

### 🛠️ Our Other Scrapers

Explore our full suite of scraping tools to power your data needs:

- **[Booking.com Cruises Scraper](https://apify.com/vulnv/booking-cruises-scraper)** — Extract cruise deals, prices and itineraries from Booking.com.
- **[Yelp Business Scraper](https://apify.com/vulnv/yelp-scraper)** — Scrape Yelp business listings, ratings and contact details.
- **[Amazon Product Scraper](https://apify.com/vulnv/amazon-product-scraper)** — Extract Amazon product data, pricing and reviews.
- **[Email Validator](https://apify.com/vulnv/email-validator)** — Validate and verify email addresses at scale.

📬 **Need help or have a feature request?** Contact us at <support@vulnv.com> or visit our [Apify profile](https://apify.com/vulnv).

# Actor input Schema

## `departureDateFrom` (type: `string`):

Earliest cruise departure date to include (format: YYYY-MM-DD). Defaults to today.

## `departureDateTo` (type: `string`):

Latest cruise departure date to include (format: YYYY-MM-DD). Defaults to ~2 years from today.

## `destinations` (type: `array`):

Filter by destination area. Leave empty for all destinations.

## `departurePorts` (type: `array`):

Filter by embarkation port. Leave empty for all ports.

## `ships` (type: `array`):

Filter by MSC ship. Leave empty for all ships.

## `cabinTypes` (type: `array`):

Filter by cabin/stateroom category. Leave empty for all.

## `minNights` (type: `integer`):

Only include cruises with at least this many nights.

## `maxNights` (type: `integer`):

Only include cruises with at most this many nights.

## `adults` (type: `integer`):

Number of adults the displayed prices are calculated for.

## `juniors` (type: `integer`):

Number of juniors (younger guests) in the cabin.

## `minors` (type: `integer`):

Number of minors (children) in the cabin.

## `availableOnly` (type: `boolean`):

Only return sailings that are currently available to book.

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

Visit each cruise's details page to extract the full day-by-day itinerary (ports, arrival/departure times and descriptions) and the complete cabin price matrix (every cabin category, experience and rate). Slower, but captures everything on the details page.

## `maxResults` (type: `integer`):

Maximum number of cruise records to store.

## `advancedFilter` (type: `string`):

Optional raw Algolia filter clause appended (AND) to the generated filters, e.g. priceType:"FLASH". For power users.

## `baseUrl` (type: `string`):

Storefront base URL.

## `marketPath` (type: `string`):

Storefront market path segment (e.g. easterneurope).

## `locale` (type: `string`):

Market locale code (e.g. en\_PL). Determines the search index and language.

## `currencyCode` (type: `string`):

ISO currency code for prices in the itinerary detail API (e.g. EUR).

## `languageCode` (type: `string`):

3-letter language code for the itinerary detail API (e.g. eng).

## `countryCode` (type: `string`):

2-letter country code for the itinerary detail API (e.g. PL).

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

Optional proxy used for all outbound requests. Apify Proxy (datacenter) is usually sufficient.

## Actor input object example

```json
{
  "adults": 2,
  "juniors": 0,
  "minors": 0,
  "availableOnly": true,
  "scrapeDetails": true,
  "maxResults": 50,
  "baseUrl": "https://www.msccruises.eu",
  "marketPath": "easterneurope",
  "locale": "en_PL",
  "currencyCode": "EUR",
  "languageCode": "eng",
  "countryCode": "PL",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vulnv/msc-cruises-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 = {
    "maxResults": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vulnv/msc-cruises-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 '{
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vulnv/msc-cruises-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "MSC Cruises Scraper",
        "description": "Search MSC Cruises sailings by destination, port, ship, date and duration, and extract full cruise details including day-by-day itineraries and pricing.",
        "version": "1.0",
        "x-build-id": "sGJ5JCF1kYmegdnJr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/vulnv~msc-cruises-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-vulnv-msc-cruises-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/vulnv~msc-cruises-scraper/runs": {
            "post": {
                "operationId": "runs-sync-vulnv-msc-cruises-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/vulnv~msc-cruises-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-vulnv-msc-cruises-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": {
                    "departureDateFrom": {
                        "title": "Departure date from",
                        "type": "string",
                        "description": "Earliest cruise departure date to include (format: YYYY-MM-DD). Defaults to today."
                    },
                    "departureDateTo": {
                        "title": "Departure date to",
                        "type": "string",
                        "description": "Latest cruise departure date to include (format: YYYY-MM-DD). Defaults to ~2 years from today."
                    },
                    "destinations": {
                        "title": "Destinations",
                        "type": "array",
                        "description": "Filter by destination area. Leave empty for all destinations.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "MED",
                                "NOR",
                                "WEE",
                                "CAR",
                                "SOC",
                                "EMW",
                                "FAE",
                                "ALA",
                                "PAN",
                                "SOA",
                                "POS"
                            ],
                            "enumTitles": [
                                "Mediterranean",
                                "Northern Europe",
                                "Canary Islands & Madeira",
                                "Caribbean",
                                "South Caribbean",
                                "Dubai, Abu Dhabi & Qatar",
                                "Asia",
                                "Alaska",
                                "Panama Canal",
                                "South America",
                                "MSC Grand Voyages"
                            ]
                        }
                    },
                    "departurePorts": {
                        "title": "Departure ports",
                        "type": "array",
                        "description": "Filter by embarkation port. Leave empty for all ports.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "PIR",
                                "BCN",
                                "GOA",
                                "CVV",
                                "VCE",
                                "TRS",
                                "NAP",
                                "MSN",
                                "PMO",
                                "MLA",
                                "MRS",
                                "CAG",
                                "BRI",
                                "BDS",
                                "SPE",
                                "LIV",
                                "AOI",
                                "SPU",
                                "IST",
                                "KUS",
                                "MRM",
                                "AMS",
                                "HAM",
                                "KEL",
                                "WAR",
                                "CPH",
                                "OSL",
                                "STO",
                                "SOU",
                                "LEH",
                                "CER",
                                "RTM",
                                "LIS",
                                "PMI",
                                "VLC",
                                "ALC",
                                "AGP",
                                "TAR",
                                "CEQ",
                                "LPA",
                                "SCT",
                                "ACE",
                                "FNC",
                                "DXB",
                                "AUH",
                                "DOH",
                                "MIA",
                                "CPV",
                                "GLS",
                                "LRM",
                                "PTP",
                                "FDF",
                                "SAN",
                                "LAX",
                                "SEA",
                                "RIO",
                                "SSZ",
                                "SSA",
                                "MCZ",
                                "ITJ",
                                "CBU",
                                "PNG",
                                "BUE",
                                "BGI",
                                "SHA",
                                "KEE",
                                "TYO",
                                "NAH"
                            ],
                            "enumTitles": [
                                "Piraeus (Athens)",
                                "Barcelona",
                                "Genoa",
                                "Civitavecchia (Rome)",
                                "Venice",
                                "Trieste",
                                "Naples",
                                "Messina",
                                "Palermo",
                                "Valletta",
                                "Marseille",
                                "Cagliari",
                                "Bari",
                                "Brindisi",
                                "La Spezia",
                                "Livorno",
                                "Ancona",
                                "Split",
                                "Istanbul",
                                "Kusadasi",
                                "Marmaris",
                                "Amsterdam",
                                "Hamburg",
                                "Kiel",
                                "Warnemunde",
                                "Copenhagen",
                                "Oslo",
                                "Stockholm",
                                "Southampton",
                                "Le Havre",
                                "Cherbourg",
                                "Rotterdam",
                                "Lisbon",
                                "Palma de Mallorca",
                                "Valencia",
                                "Alicante",
                                "Malaga",
                                "Tarragona",
                                "Cannes",
                                "Las Palmas",
                                "Santa Cruz de Tenerife",
                                "Arrecife (Lanzarote)",
                                "Funchal (Madeira)",
                                "Dubai",
                                "Abu Dhabi",
                                "Doha",
                                "Miami",
                                "Port Canaveral",
                                "Galveston",
                                "La Romana",
                                "Pointe-a-Pitre",
                                "Fort-de-France",
                                "San Diego",
                                "Los Angeles",
                                "Seattle",
                                "Rio de Janeiro",
                                "Santos",
                                "Salvador",
                                "Maceio",
                                "Itajai",
                                "Camboriu",
                                "Paranagua",
                                "Buenos Aires",
                                "Bridgetown",
                                "Shanghai",
                                "Keelung (Taipei)",
                                "Tokyo",
                                "Naha"
                            ]
                        }
                    },
                    "ships": {
                        "title": "Ships",
                        "type": "array",
                        "description": "Filter by MSC ship. Leave empty for all ships.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "EU",
                                "AM",
                                "AS",
                                "AT",
                                "GR",
                                "VI",
                                "SH",
                                "SC",
                                "SE",
                                "SV",
                                "BE",
                                "MR",
                                "PR",
                                "DI",
                                "FA",
                                "SP",
                                "PO",
                                "MU",
                                "MA",
                                "OR",
                                "AX",
                                "LX",
                                "OX",
                                "SX",
                                "ER"
                            ],
                            "enumTitles": [
                                "MSC World Europa",
                                "MSC World America",
                                "MSC World Asia",
                                "MSC World Atlantic",
                                "MSC Grandiosa",
                                "MSC Virtuosa",
                                "MSC Seashore",
                                "MSC Seascape",
                                "MSC Seaside",
                                "MSC Seaview",
                                "MSC Bellissima",
                                "MSC Meraviglia",
                                "MSC Preziosa",
                                "MSC Divina",
                                "MSC Fantasia",
                                "MSC Splendida",
                                "MSC Poesia",
                                "MSC Musica",
                                "MSC Magnifica",
                                "MSC Orchestra",
                                "MSC Armonia",
                                "MSC Lirica",
                                "MSC Opera",
                                "MSC Sinfonia",
                                "MSC Euribia"
                            ]
                        }
                    },
                    "cabinTypes": {
                        "title": "Cabin types",
                        "type": "array",
                        "description": "Filter by cabin/stateroom category. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "INS",
                                "OUT",
                                "BAL",
                                "SUI",
                                "YTC"
                            ],
                            "enumTitles": [
                                "Interior",
                                "Ocean View",
                                "Balcony",
                                "Suite",
                                "MSC Yacht Club"
                            ]
                        }
                    },
                    "minNights": {
                        "title": "Minimum nights",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Only include cruises with at least this many nights."
                    },
                    "maxNights": {
                        "title": "Maximum nights",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Only include cruises with at most this many nights."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 4,
                        "type": "integer",
                        "description": "Number of adults the displayed prices are calculated for.",
                        "default": 2
                    },
                    "juniors": {
                        "title": "Juniors",
                        "minimum": 0,
                        "maximum": 4,
                        "type": "integer",
                        "description": "Number of juniors (younger guests) in the cabin.",
                        "default": 0
                    },
                    "minors": {
                        "title": "Minors",
                        "minimum": 0,
                        "maximum": 4,
                        "type": "integer",
                        "description": "Number of minors (children) in the cabin.",
                        "default": 0
                    },
                    "availableOnly": {
                        "title": "Available cruises only",
                        "type": "boolean",
                        "description": "Only return sailings that are currently available to book.",
                        "default": true
                    },
                    "scrapeDetails": {
                        "title": "Scrape cruise details page",
                        "type": "boolean",
                        "description": "Visit each cruise's details page to extract the full day-by-day itinerary (ports, arrival/departure times and descriptions) and the complete cabin price matrix (every cabin category, experience and rate). Slower, but captures everything on the details page.",
                        "default": true
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of cruise records to store.",
                        "default": 100
                    },
                    "advancedFilter": {
                        "title": "Advanced Algolia filter",
                        "type": "string",
                        "description": "Optional raw Algolia filter clause appended (AND) to the generated filters, e.g. priceType:\"FLASH\". For power users."
                    },
                    "baseUrl": {
                        "title": "Base URL",
                        "type": "string",
                        "description": "Storefront base URL.",
                        "default": "https://www.msccruises.eu"
                    },
                    "marketPath": {
                        "title": "Market path",
                        "type": "string",
                        "description": "Storefront market path segment (e.g. easterneurope).",
                        "default": "easterneurope"
                    },
                    "locale": {
                        "title": "Locale",
                        "type": "string",
                        "description": "Market locale code (e.g. en_PL). Determines the search index and language.",
                        "default": "en_PL"
                    },
                    "currencyCode": {
                        "title": "Currency code",
                        "type": "string",
                        "description": "ISO currency code for prices in the itinerary detail API (e.g. EUR).",
                        "default": "EUR"
                    },
                    "languageCode": {
                        "title": "Language code",
                        "type": "string",
                        "description": "3-letter language code for the itinerary detail API (e.g. eng).",
                        "default": "eng"
                    },
                    "countryCode": {
                        "title": "Country code",
                        "type": "string",
                        "description": "2-letter country code for the itinerary detail API (e.g. PL).",
                        "default": "PL"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy used for all outbound requests. Apify Proxy (datacenter) is usually sufficient.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
