CruiseCritic Scraper [💰$1/1K] | Reviews | Itineraries avatar

CruiseCritic Scraper [💰$1/1K] | Reviews | Itineraries

Pricing

from $0.90 / 1,000 reviews

Go to Apify Store
CruiseCritic Scraper [💰$1/1K] | Reviews | Itineraries

CruiseCritic Scraper [💰$1/1K] | Reviews | Itineraries

Scrape CruiseCritic.com in three datasets: cruise ship profiles with ratings, review counts, size, ratio and price per night; member reviews with full text, rating, cruise date and author; and itineraries with day-by-day ports of call, searchable by destination.

Pricing

from $0.90 / 1,000 reviews

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

CruiseCritic Scraper — Ship Profiles, Member Reviews & Cruise Itineraries

Scrape CruiseCritic.com in three datasets: cruise ship profiles (always), member reviews and cruise itineraries (optional). Ship profiles carry ratings, review counts, size, passenger ratio, maiden year, lowest price per night and type flags; reviews carry the full review text, rating, cruise date and length, author, destination, departure port and photos; itineraries carry the day-by-day route with every port of call. Listing URLs are resolved automatically and pagination is followed until your item caps are reached.

Built for cruise-line market research, travel agencies and OTA product teams, itinerary-comparison tools, and reputation teams tracking member sentiment across a fleet.

Scrape Cruise Ship Profiles, Reviews & Itineraries For Market Research

  • Cruise ship database — ratings, review counts, size category, passenger ratio, maiden year and lowest price per night per ship
  • Member review mining — full review text with rating, cruise date and length, author age band, experience level, destination, departure port and photos
  • Itinerary and route research — day-by-day ports of call, departure and arrival ports, destination region, ship and cruise line, searchable by destination
  • Sentiment analysis on cruise lines — memberLovePercentage, professionalRating and average member rating per ship
  • Competitive fleet analysis — ship type flags (isRiver, isExpedition, isFamily, isLuxury) across a whole cruise line in one run
  • Building a cruise comparison dataset — price-per-night, size and ratio fields combine with reviews and itineraries for full-fleet coverage

How It Works

How the CruiseCritic Scraper works: cruise pages become ship profiles, member reviews and day-by-day itineraries.

The Actor calls the same Next.js data endpoint the CruiseCritic frontend uses. One request returns every ship in a line, up to 100 full reviews or 25 itineraries, with pagination followed to the caps you set.

Each ship row carries ratings, review volume, size, maiden year and lowest nightly price. Reviews and itineraries are written to their own datasets, ready for sentiment and route analysis.

CruiseCritic.com is a Next.js application backed by a public data endpoint. The Actor talks to that endpoint directly — the same one the site's own frontend uses — instead of rendering pages in a browser:

  • One JSON request returns all ships of a cruise line, or up to 100 full reviews (title, complete body text, rating, author, ship, destination, photos) — roughly ten times more per request than an HTML page.
  • Itinerary search resolves a destination keyword to a destination ID and then returns 25 itineraries per request, each with its full day-by-day route.
  • Listing URLs are resolved automatically (cruiselineBySlug / shipBySlug), and review and itinerary pagination is followed until the item caps are reached.
  • Pages without a data shortcut (for example a single review detail URL) fall back to parsing the JSON embedded in the page's __NEXT_DATA__ script tag.

No browser, no CSS selectors, low memory. A 10,000-review job takes around 100 requests.

Input Parameters

FieldTypeRequiredDefaultNotes
startUrlsarrayYes—Cruise page or review-listing URLs. Review listings support the rating and page query parameters.
includeReviewsbooleanNofalseAlso scrape member reviews into the reviews dataset. Charged per review saved. When no review URLs are given, reviews of the ships found in the itineraries are collected automatically.
sortByenumNonewestReview order: newest, oldest, mostHelpful, highestRated, lowestRated.
includeItinerariesbooleanNofalseAlso search cruise itineraries into the itineraries dataset. Charged per itinerary saved. Enabled automatically when a find-a-cruise start URL is provided.
itineraryDestinationstringNoallDestination to search itineraries for, matched against CruiseCritic destinations (e.g. croatia, alaska, caribbean). Empty means all destinations.
itinerarySortByenumNopopularityItinerary order: popularity, price, departureDate, rating, length.
maxItemsintegerNo100Maximum ship profiles in the default dataset.
maxReviewsintegerNomaxItemsMaximum reviews per ship profile in the reviews dataset.
maxItinerariesintegerNomaxItemsMaximum itineraries in the itineraries dataset.
maxRequestsPerCrawlintegerNo50Maximum requests; each returns a whole ship list, up to 100 reviews or 25 itineraries.
maxConcurrencyintegerNo4Concurrent requests.
proxyobjectNoApify ProxyStandard Apify proxy configuration; Apify Proxy is enabled by default and used for page fetches when the target site blocks the Actor's IP range.

Free-plan runs are limited to 10 items per dataset; paying runs get the configured caps.

Output Fields

Ship profiles (default dataset)

FieldDescription
shipIdCruiseCritic ship ID.
name, slug, urlShip name and page URL.
line, lineSlugCruise line name and slug.
imageUrlMain ship photo.
averageRatingAverage member rating (1–5).
memberLovePercentageShare of members who loved the ship.
professionalRatingEditors' rating.
totalReviewsNumber of member reviews.
size, ratioSize category and passenger ratio.
maidenYearYear of the maiden voyage.
lowestPricePerNightLowest price per night, when available.
isRiver, isExpedition, isFamily, isLuxuryShip type flags.
scrapedAtScrape timestamp.

Member reviews (reviews dataset)

FieldDescription
reviewIdCruiseCritic review ID.
urlSource URL of the review.
ship, lineCruise ship and cruise line name.
titleReview title.
ratingOverall rating (1–5).
reviewTextFull review text.
cruiseDateDate of the cruise.
cruiseLengthCruise length in nights.
cruiseExperienceLevelReviewer's experience level.
author, authorAgeReviewer username and age band, when provided.
destination, departurePortCruise destination and departure port.
helpfulVotesHelpful votes on the review.
totalImages / imagesReview photos.
scrapedAtScrape timestamp.

Cruise itineraries (itineraries dataset)

FieldDescription
itineraryIdCruiseCritic itinerary ID.
titleItinerary name.
lengthCruise length in nights.
cruiseLineId, cruiseLineCruise line ID and name.
shipId, ship, shipImageUrlShip ID, name and photo.
departurePortId, departurePort, departurePortSlugEmbarkation port and its slug.
arrivalPortId, arrivalPort, arrivalPortSlugFinal port and its slug.
destinationId, destinationDestination region.
routePorts of call in order, one entry per day (day, port, portId, portSlug).
scrapedAtScrape timestamp.

Example Input

All ships of a cruise line, plus its top-rated reviews and Alaska itineraries:

{
"startUrls": [
{ "url": "https://www.cruisecritic.com/cruise/celebrity/cruises" },
{ "url": "https://www.cruisecritic.com/cruise/celebrity/reviews?rating=excellent,very-good" }
],
"includeReviews": true,
"sortBy": "highestRated",
"includeItineraries": true,
"itineraryDestination": "alaska",
"itinerarySortBy": "rating",
"maxItems": 50,
"maxReviews": 20
}

Example Output

{
"shipId": "20046",
"name": "Celebrity Edge",
"slug": "celebrity-edge",
"url": "https://www.cruisecritic.com/cruise/celebrity/celebrity-edge",
"line": "Celebrity Cruises",
"lineSlug": "celebrity",
"imageUrl": "https://www.cruisecritic.com/img/ships/celebrity-edge.jpg",
"averageRating": 4.5,
"memberLovePercentage": 87,
"professionalRating": 4.5,
"totalReviews": 1243,
"size": "Large",
"ratio": 2.0,
"maidenYear": "2018",
"lowestPricePerNight": 189,
"isRiver": false,
"isExpedition": false,
"isFamily": false,
"isLuxury": true,
"scrapedAt": "2026-10-17T12:00:00.000Z"
}

Automate Cruise Monitoring With Schedules & Webhooks

  • Schedule the Actor monthly to re-crawl a fleet and detect new ships, new reviews and updated ratings or price-per-night.
  • Webhooks — configure a run-success webhook so each finished run POSTs to n8n, Make or Zapier and lands in a CRM, spreadsheet or data warehouse.
  • Apify API — pull any of the three datasets programmatically with the JavaScript or Python client, or export JSON / CSV / Excel from the console.
  • Recurring runs are what keep a cruise database current; ships, ratings and itineraries change across seasons.

Frequently Asked Questions

Why use this Actor instead of the official CruiseCritic API?

CruiseCritic publishes no public developer API for ship profiles, reviews or itineraries. Its pages are additionally protected by DataDome bot mitigation, and review listing pages can exceed 1 MB of HTML. This Actor instead reads the same public JSON data endpoint the site's own Next.js frontend calls — so one request returns up to 100 full reviews or every ship of a cruise line, with no API key, no browser rendering and no DOM scraping setup.

What are alternatives to CruiseCritic for cruise data?

Three routes exist. First, the cruise lines' own booking sites (Royal Caribbean, Celebrity, Carnival, Norwegian, MSC, Princess, Disney), which publish per-cabin pricing and sailings but no third-party reviews. Second, CruiseMapper and Viamaster, which cover itineraries, ships and ports but not member sentiment. Third, third-party CruiseCritic API resellers, which proxy the site's data at a higher per-record price. This Actor covers the reviews and ship-profile side that the booking sites cannot.

Does CruiseCritic have an official API?

No. There is no published CruiseCritic developer API. Its public site is served by a Next.js application with a JSON data endpoint that the frontend itself calls, which is what this Actor reads. Third-party vendors sell "CruiseCritic APIs" that proxy the site's pages — they are not official.

Can I filter reviews by rating?

Yes. Review listing URLs accept the site's own rating query parameter, for example .../celebrity/reviews?rating=excellent,very-good. Valid values are excellent, very-good, average, poor and terrible. Combined with sortBy, this lets you extract only positive or only negative sentiment for a line or a ship.

Can I collect itineraries by destination?

Yes — enable includeItineraries and set itineraryDestination to a CruiseCritic destination such as croatia, alaska or caribbean, leaving it empty for all destinations. You can also paste a find-a-cruise URL as a start URL; its filters (destination, cruise line, ports of call, departure port, length, page) are read and applied automatically, and the option turns itself on. Each saved itinerary is charged.

Can an AI agent call this Actor?

Yes. It is a standard Apify Actor, so any MCP client or agent can start a run through the Apify API or the Apify MCP server, wait for it to finish, and read the dataset items. The minimal input and output field list are in the next section.

How much does it cost?

Pay-per-event: ship profiles are charged per profile saved, member reviews per review saved and itineraries per itinerary saved ($1 per 1,000 items), plus a small Actor-start event scaled by memory. If the run's spending limit is reached, the Actor stops cleanly: already saved items were billed, nothing further is fetched.

For AI Agents & LLM Apps

Purpose: return structured cruise data from cruisecritic.com as three separate datasets — ship profiles (default), member reviews and cruise itineraries — with ratings, review text, day-by-day routes and price-per-night.

Minimal input (all ships of a cruise line):

{ "startUrls": [{ "url": "https://www.cruisecritic.com/cruise/celebrity/cruises" }] }

Variant — ships, top-rated reviews and destination itineraries:

{
"startUrls": [
{ "url": "https://www.cruisecritic.com/cruise/celebrity/cruises" },
{ "url": "https://www.cruisecritic.com/cruise/celebrity/reviews?rating=excellent,very-good" }
],
"includeReviews": true,
"sortBy": "highestRated",
"includeItineraries": true,
"itineraryDestination": "alaska",
"maxItems": 50,
"maxReviews": 20
}

Output fields:

  • Default dataset (ship profiles): shipId, name, slug, url, line, lineSlug, imageUrl, averageRating, memberLovePercentage, professionalRating, totalReviews, size, ratio, maidenYear, lowestPricePerNight, isRiver, isExpedition, isFamily, isLuxury, scrapedAt.
  • reviews dataset: reviewId, url, ship, line, title, rating, reviewText, cruiseDate, cruiseLength, cruiseExperienceLevel, author, authorAge, destination, departurePort, helpfulVotes, totalImages, images, scrapedAt.
  • itineraries dataset: itineraryId, title, length, cruiseLineId, cruiseLine, shipId, ship, shipImageUrl, departurePortId, departurePort, departurePortSlug, arrivalPortId, arrivalPort, arrivalPortSlug, destinationId, destination, route, scrapedAt.

Behaviors an agent should know:

  • startUrls is required and drives everything. Accepted shapes: a cruise-line page (all ships), a single ship page, a review listing (with rating and page parameters) or a find-a-cruise URL.
  • Ship profiles always land in the default dataset; reviews and itineraries only when their include flags are on, and they land in separate reviews and itineraries datasets — not the default one.
  • includeReviews and includeItineraries each add per-item charges; leave them off when you only need ship profiles.
  • When a find-a-cruise URL is provided, includeItineraries enables itself and its filters are applied automatically; with no usable filters, itineraries are collected across all destinations.
  • When itineraries are collected, the Actor also fetches the profiles of the ships that appear in them (charged per profile) and, if reviews are enabled and no review URLs were given, reviews of those ships.
  • maxReviews and maxItineraries default to the value of maxItems, so setting one cap often sets all three — override them explicitly if you want asymmetric caps.
  • Free-plan runs are limited to 10 items per dataset.

Billing: pay-per-event — $1 per 1,000 items, charged separately per dataset type (profiles, reviews, itineraries), plus a small Actor-start event scaled by memory. Budget by item count per dataset, since each dataset bills independently.

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Cruise Critic or its parent company. It reads only publicly visible cruise pages, review listings and itinerary search results on cruisecritic.com — no login, no account and no access to private or member-only data, and it does not circumvent any authentication or access control. Reviewer usernames and any age band shown are already public on the review pages. You are responsible for your own compliance with CruiseCritic's Terms of Service and with applicable data-protection law (including the GDPR where personal data is present) when scaling or redistributing reviews.

SEO Keywords

cruisecritic scraper, cruise ship data, cruise reviews api, cruise itineraries scraper, cruise line market research, cruise ship database, member reviews scraper, cruise port of call data, cruise destination data, cruise review sentiment, cruise price per night, ship passenger ratio, cruise fleet analysis, cruise itinerary search, alaska cruise data, caribbean cruise data, mediterranean cruise data, cruise comparison data, cruisecritic api alternative, cruise line scraper, cruise travel research, river cruise data, expedition cruise data, cruise review database