NCL Cruises Scraper — Itineraries, Cabin Prices & Deals avatar

NCL Cruises Scraper — Itineraries, Cabin Prices & Deals

Pricing

from $4.00 / 1,000 results

Go to Apify Store
NCL Cruises Scraper — Itineraries, Cabin Prices & Deals

NCL Cruises Scraper — Itineraries, Cabin Prices & Deals

Scrape Norwegian Cruise Line (NCL) itineraries by destination, port, ship, date and duration. Extract full cruise details: sailing dates, ports of call, the complete stateroom price grid and deals.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

VulnV

VulnV

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

5 days ago

Last modified

Share

NCL Cruises Scraper

Search Norwegian Cruise Line (NCL) cruises and extract full itinerary details — ship, ports of call, sailing dates, duration and the complete stateroom price grid (Inside, Oceanview, Balcony, Club Balcony Suite, Suite, The Haven) — as clean, structured JSON.

The scraper mirrors the filters on the NCL vacations search (destination, departure port, ship, dates, duration, price and cabin type) and returns one record per itinerary.

🚀 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 available 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, max price, cabin type and guest count.
  • 🚢 Rich per-itinerary data — ship, embarkation port, ordered ports of call, duration, destination regions and every sailing date.
  • 💶 Complete stateroom pricing — lowest available price per cabin category across all sailings, plus per-sailing pricing for each stateroom type.
  • 🗓️ Details page scraping — for each cruise it visits the details page and adds the title, hero/map images, full ship and ports-of-call info, taxes & fees and the detailed stateroom price grid (base price, offers and availability per sailing).
  • 🔗 Detail page URL — a ready-to-open link to each cruise on ncl.com.
  • 🌍 Market-aware — NCL picks the storefront from your IP address, not from an input. The Actor asks for a US egress, checks which currency actually came back, and tells you.

🧭 Input

All fields are optional. Run with no input to scrape all available cruises.

FieldTypeDescription
destinationsarrayDestination regions, e.g. CARIBBEAN, ALASKA, MEDITERRANEAN.
embarkationPortsarrayDeparture port codes, e.g. MIA, TPA, BCN.
shipsarrayShip codes, e.g. ENCORE, PRIMA, GEM.
cabinTypesarrayINSIDE, OCEANVIEW, BALCONY, MINISUITE, SUITE, HAVEN.
minNights / maxNightsintegerCruise duration range, in nights.
departureDateFrom / departureDateTostring (YYYY-MM-DD)Keep cruises with a sailing departing in this range.
maxPriceintegerKeep cruises with an available cabin at or below this price.
guestsintegerGuests the prices are calculated for (default 2, 1–4).
scrapeDetailsbooleanVisit each cruise's details page for images, ship/ports detail and the full price grid (default true).
maxResultsintegerMaximum number of itineraries to store (default 100).
baseUrlstringStorefront base URL. Defaults to https://www.ncl.com.
marketPathstringPath segment only — it does not choose the market (see below). Defaults to empty.
expectedCurrencystringCurrency the catalogue is checked against, default USD. Never used as a label.
proxyConfigurationobjectOptional proxy for outbound requests.

Example input

{
"destinations": ["CARIBBEAN"],
"minNights": 7,
"maxNights": 7,
"departureDateFrom": "2026-11-01",
"departureDateTo": "2027-03-31",
"scrapeDetails": true,
"maxResults": 50
}

📦 Output

Each dataset item is one itinerary. The example below was captured from a EUR storefront; currency always states what the site that answered actually quoted. Abridged example:

{
"code": "GEM7TPABPIRTBCZMTPA",
"title": "7-day-caribbean-round-trip-tampa-harvest-caye-cozumel-and-roatan",
"shipCode": "GEM",
"shipName": "Norwegian Gem",
"duration": 7,
"embarkationPort": "TPA",
"destinations": ["Caribbean"],
"portsOfCall": ["TPA", "BPI", "RTB", "CZM", "TPA"],
"portsOfCallText": "Tampa, Florida → Harvest Caye, Belize → Roatán, Honduras → Cozumel, Mexico → Tampa, Florida",
"sailingsCount": 5,
"firstDeparture": "2026-11-21",
"lastDeparture": "2027-03-27",
"lowestPrice": 605,
"currency": "EUR",
"priceFromInside": 605,
"priceFromBalcony": 1100,
"priceFromTheHaven": 3870,
"detailUrl": "https://www.ncl.com/fr/en/cruises/7-day-caribbean-...-GEM7TPABPIRTBCZMTPA?itineraryCode=GEM7TPABPIRTBCZMTPA",
"sailings": [
{ "sailId": 61766, "departureDate": 1795237200000, "pricing": [ { "code": "INSIDE", "combinedPrice": 605 } ] }
],
"cruiseDetails": {
"title": "7-Day Caribbean Round-trip Tampa",
"ship": { "code": "GEM", "title": "Norwegian Gem" },
"portsOfCall": [ { "code": "TPA", "title": "Tampa, Florida" } ],
"sailings": [ { "sailId": 61766, "staterooms": [ { "code": "INSIDE", "combinedPrice": 605, "basePrice": 999 } ] } ]
}
}

The most useful detail facts (ship, ports, per-cabin "from" prices, departure dates) are flattened to the top level so they appear directly in the dataset table; the full nested details live under cruiseDetails. The dataset has two views: Overview (flat table) and Cruise details (full nested object).

💡 Use cases

  • Monitor NCL cruise prices and Free at Sea deals for specific routes or ships.
  • Build a cruise comparison or price-alerting tool.
  • Analyse itineraries, ports of call and sailing durations across a season.
  • Feed structured cruise data into a travel agency or affiliate site.

💳 Pricing

This Actor is monetized on a pay-per-result + usage basis: you pay a small fee per itinerary 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 for the current rate.

❓ FAQ

Is scraping NCL data legal? The Actor collects only publicly available information shown on the NCL website. Use the data responsibly and in line with applicable laws and the site's terms.

Which market is scraped? Whichever one NCL decides, from the address the request comes from. marketPath looks like the lever and is not: the edge rewrites the segment before the API sees it. Measured 2026-08-09 from a single address, fr/en, uk/en, de/de and the empty default all returned the same 2,529,425-byte payload of 481 itineraries priced in GBP — and us/en returns 404 from every address. Roughly a dozen other levers (Accept-Language, currency and geo cookies, country/X-Country/CF-IPCountry headers, ?market=us, ?countryCode=US, ?locale=en_US) change nothing either.

What does have an effect is the egress address, so the Actor requests a US one when you enable Apify Proxy without naming a country. That makes USD likely, not certain — two addresses in the same country have landed on different storefronts (one on the USD catalogue of 611 itineraries, one on a EUR catalogue of 483). So the run also checks: if the catalogue does not come back in expectedCurrency it re-asks on a fresh proxy session a few times, then stores what it got and logs a warning.

currency on every record is read from the itinerary's own currency.code, so a record never claims a currency the site did not quote.

Can I get all cabin prices and the full itinerary? Yes — keep scrapeDetails enabled (the default). Each cruise then includes the full stateroom price grid and ports-of-call details.

🛠️ Our Other Scrapers

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

📬 Need help or have a feature request? Contact us at support@vulnv.com or visit our Apify profile.