CruiseMapper Cruises Scraper Pro avatar

CruiseMapper Cruises Scraper Pro

Pricing

from $1.00 / 1,000 results

Go to Apify Store
CruiseMapper Cruises Scraper Pro

CruiseMapper Cruises Scraper Pro

Search CruiseMapper.com cruises by region, ship, line, port, length, date. Adds cruiseLineBlocklist, regionAllowlist, derived fields (nights, pricePerNightUsd), enrich-with-ship-data toggle. HTTP-only - no proxy, no cookies, no API key.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(17)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

17

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

CruiseMapper Cruises Scraper

Search CruiseMapper.com — the largest free public cruise database — by destination, ship, cruise line, length, type, and date. Returns one structured record per cruise with departure date, ship, duration, route, title, and starting price. HTTP-only — no proxy, no cookies, no API key.

What it does

You set any combination of filters; the actor:

  1. Submits the search to cruisemapper.com/cruise-search with your filters mapped to the site's form params.
  2. Walks paginated result pages (15 cruises per page) until maxResults is reached.
  3. Parses each result row into a flat record with date, ship, duration, route type, title, price, and ship-detail URL.
  4. Optionally narrows results by an endDate upper bound and cruiseLength bucket (client-side validation).

Empty fields are omitted (no nulls). Cruises without a published price still emit a record with priceFrom/currency absent.

Input

FieldTypeDefaultDescription
departureFromstringEarliest cruise departure date YYYY-MM-DD. Empty = no lower bound.
endDatestringLatest cruise departure date YYYY-MM-DD. Empty = no upper bound. Client-side filter.
cruiseLengthenumanyOne of any, 1-2, 3-5, 6-10, 11-14, 15+.
destinationenumanyCruise region (e.g. alaska, mediterranean-black-sea, bahamas-caribbean-bermuda, nile-river, arctic-antarctica, asia). 24 regions supported.
cruiseTypeenumanyTheme / category (e.g. transatlantic, christmas, food-wine, northern-lights, panama-canal, world). 25 types supported.
shipNamestringSubstring match against the ship name (e.g. Symphony of the Seas).
cruiseLinestringFilter by cruise line (e.g. Royal Caribbean, Carnival).
departurePortstringFilter by embarkation port (e.g. Miami, Barcelona).
portOfCallstringFilter by intermediate port-of-call (e.g. Cozumel).
maxPriceinteger10000 (100–100000)Drop cruises with starting price above this USD amount.
maxResultsinteger50 (1–500)Hard cap on records emitted across all pages.
enrichWithShipDatabooleanfalseWhen true, fetch the ship-detail page for each unique ship and add a shipDetails block (year built, builder, gross tonnage, passenger capacity, length, decks, cabins). Adds ~1 extra HTTP request per unique ship.
startUrlsarray of strings[]Paste full CruiseMapper search URLs (e.g. https://www.cruisemapper.com/cruise-search?finder=cruise&portRegion=22). Each URL's query params become a search; results merge + dedup with the main filter inputs.
pageConcurrencyinteger1 (1–10)Number of pages to fetch in parallel per query. Higher values speed up bulk runs; may trigger rate-limits.
cruiseLineBlocklistarray[]Pro. Drop cruises operated by any of these lines (case-insensitive substring). e.g. ["Celebrity", "Costa"].
regionAllowlistarray[]Pro. Only emit cruises whose route/region text contains one of these substrings. e.g. ["caribbean", "bahamas"].
minPriceUsdintegerPro. Drop cruises with starting price below this USD amount.
minNightsintegerPro. Drop cruises shorter than this many nights.
maxNightsintegerPro. Drop cruises longer than this many nights.

Example input

{
"departureFrom": "2026-06-01",
"endDate": "2026-09-30",
"cruiseLength": "6-10",
"destination": "alaska",
"cruiseType": "any",
"maxResults": 100
}

Output

One record per cruise. Empty fields are omitted (no nulls).

{
"departureDate": "2026-06-15",
"departureDateText": "2026 Jun 15",
"daysUntilDeparture": 14,
"shipName": "AmaLilia",
"shipUrl": "https://www.cruisemapper.com/ships/AmaLilia-1340",
"duration": 11,
"routeType": "round-trip",
"title": "Secrets of Egypt the Nile",
"priceFrom": 6334,
"currency": "USD",
"nights": 11,
"pricePerNightUsd": 575.82,
"shipDetails": {
"yearBuilt": 2024,
"builder": "Maasara Shipyard (Cairo, Egypt)",
"shipClass": "Nile River cruiser",
"speed": "9 kn / 17 km/h / 10 mph",
"lengthMeters": 72,
"beamMeters": 13,
"passengerCapacity": 68,
"crewCount": 62,
"deckCount": 5,
"cabinCount": 34
},
"scrapedAt": "2024-12-16T14:23:11+00:00"
}

Output fields

  • departureDate — ISO date YYYY-MM-DD of departure (parsed from the table's free-form text).
  • departureDateText — original date string from the page (e.g. "2026 Apr 27") — useful for QA / verification.
  • daysUntilDeparture — derived integer: days from now (UTC) to departureDate. Negative for departures in the past.
  • shipName — vessel name as listed by CruiseMapper.
  • shipUrl — direct link to the ship's CruiseMapper detail page (deck plans, photos, cabin info).
  • duration — cruise length in days (parsed from "N days, ...").
  • routeTyperound-trip, one-way, open-jaw, or transatlantic when present in the title prefix.
  • title — cruise itinerary title (e.g. "Secrets of Egypt the Nile", "Western Caribbean").
  • priceFrom — starting USD price as integer; absent when CruiseMapper doesn't publish a price for the cruise.
  • currencyUSD / EUR / GBP; absent when priceFrom is absent.
  • shipDetails — (only when enrichWithShipData: true) flat dict with yearBuilt, builder, shipClass, flagState, speed, lengthMeters, beamMeters, draftMeters, grossTonnage, passengerCapacity, crewCount, deckCount, cabinCount, decksWithCabins, engines, etc. Each ship is fetched once per run and cached.
  • nights — derived integer: cruise length in nights (parsed from the duration string). Identical to duration for standard cruises.
  • pricePerNightUsd — derived: priceFrom ÷ nights when both are available. Useful for comparing value across cruise lengths.
  • scrapedAt — ISO-8601 UTC timestamp.

Use cases

  • Travel-planning aggregation — feed your travel app with fresh CruiseMapper inventory.
  • Price-monitoring — track starting-price trends for specific ships / cruise lines / destinations over time.
  • Competitive research — see what competitors are pricing for the same routes.
  • Content / editorial — generate weekly "Cruises departing this month from Miami" digests.
  • Inventory enrichment — combine with a cruise-line site scraper to triangulate pricing across sources.

FAQ

Does it need a proxy or cookies? No. CruiseMapper search results are public and the actor connects directly with a Chrome-impersonated TLS fingerprint.

Why is priceFrom missing on some records? Roughly 30–40% of CruiseMapper listings don't publish a starting price (they require contacting the cruise line). The actor follows an omit-empty contract — fields not present on the source are simply absent from the record (no nulls).

Are the date / duration filters server-side or client-side? Mixed. departureFrom, cruiseLength, destination, cruiseType, shipName, cruiseLine, departurePort, portOfCall, and maxPrice are submitted as form params (server-side). endDate and the duration-bucket boundary check are applied client-side after parsing each result row, since CruiseMapper's form has no end-date field.

How many results can I get in one run? Up to maxResults (max 500). CruiseMapper paginates ~15 cruises per page; 500 records ≈ 34 pages × ~1.5s = under a minute on a clean run.

Can I scrape ship-detail pages too? This actor focuses on the search results table. Use the shipUrl field with a downstream actor (or a follow-up run) for ship deck plans, cabin layouts, and photos.

What if my filters return zero cruises? The run completes without fake rows and sets a status message explaining that no cruises matched the filters.

Why is the route type sometimes empty? CruiseMapper only embeds round-trip/one-way/open-jaw/transatlantic in the title for ~70% of cruises. When the title doesn't start with a known route-type prefix, the field is omitted.