CruiseCritic Scraper [💰$1/1K] | Reviews | Itineraries
Pricing
from $0.90 / 1,000 reviews
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
Maintained by CommunityActor 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,professionalRatingand 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

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
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
startUrls | array | Yes | — | Cruise page or review-listing URLs. Review listings support the rating and page query parameters. |
includeReviews | boolean | No | false | Also 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. |
sortBy | enum | No | newest | Review order: newest, oldest, mostHelpful, highestRated, lowestRated. |
includeItineraries | boolean | No | false | Also search cruise itineraries into the itineraries dataset. Charged per itinerary saved. Enabled automatically when a find-a-cruise start URL is provided. |
itineraryDestination | string | No | all | Destination to search itineraries for, matched against CruiseCritic destinations (e.g. croatia, alaska, caribbean). Empty means all destinations. |
itinerarySortBy | enum | No | popularity | Itinerary order: popularity, price, departureDate, rating, length. |
maxItems | integer | No | 100 | Maximum ship profiles in the default dataset. |
maxReviews | integer | No | maxItems | Maximum reviews per ship profile in the reviews dataset. |
maxItineraries | integer | No | maxItems | Maximum itineraries in the itineraries dataset. |
maxRequestsPerCrawl | integer | No | 50 | Maximum requests; each returns a whole ship list, up to 100 reviews or 25 itineraries. |
maxConcurrency | integer | No | 4 | Concurrent requests. |
proxy | object | No | Apify Proxy | Standard 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)
| Field | Description |
|---|---|
shipId | CruiseCritic ship ID. |
name, slug, url | Ship name and page URL. |
line, lineSlug | Cruise line name and slug. |
imageUrl | Main ship photo. |
averageRating | Average member rating (1–5). |
memberLovePercentage | Share of members who loved the ship. |
professionalRating | Editors' rating. |
totalReviews | Number of member reviews. |
size, ratio | Size category and passenger ratio. |
maidenYear | Year of the maiden voyage. |
lowestPricePerNight | Lowest price per night, when available. |
isRiver, isExpedition, isFamily, isLuxury | Ship type flags. |
scrapedAt | Scrape timestamp. |
Member reviews (reviews dataset)
| Field | Description |
|---|---|
reviewId | CruiseCritic review ID. |
url | Source URL of the review. |
ship, line | Cruise ship and cruise line name. |
title | Review title. |
rating | Overall rating (1–5). |
reviewText | Full review text. |
cruiseDate | Date of the cruise. |
cruiseLength | Cruise length in nights. |
cruiseExperienceLevel | Reviewer's experience level. |
author, authorAge | Reviewer username and age band, when provided. |
destination, departurePort | Cruise destination and departure port. |
helpfulVotes | Helpful votes on the review. |
totalImages / images | Review photos. |
scrapedAt | Scrape timestamp. |
Cruise itineraries (itineraries dataset)
| Field | Description |
|---|---|
itineraryId | CruiseCritic itinerary ID. |
title | Itinerary name. |
length | Cruise length in nights. |
cruiseLineId, cruiseLine | Cruise line ID and name. |
shipId, ship, shipImageUrl | Ship ID, name and photo. |
departurePortId, departurePort, departurePortSlug | Embarkation port and its slug. |
arrivalPortId, arrivalPort, arrivalPortSlug | Final port and its slug. |
destinationId, destination | Destination region. |
route | Ports of call in order, one entry per day (day, port, portId, portSlug). |
scrapedAt | Scrape 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.
Related Actors
- Cruisecritic Reviews Scraper — CruiseCritic member reviews by cruise line.
- CruiseCritic Ship Reviews & Itinerary Scraper — CruiseCritic ship reviews and itineraries.
- Royal Caribbean Scraper — Complete Cruise Data Extractor — Royal Caribbean sailings, per-cabin pricing and booking links across 9 markets.
- CruiseMapper Scraper — cruise itineraries, ships and ports from CruiseMapper.
- CruiseMapper Scraper (Alternative) — CruiseMapper itineraries, ship specs and port schedules.
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. reviewsdataset:reviewId,url,ship,line,title,rating,reviewText,cruiseDate,cruiseLength,cruiseExperienceLevel,author,authorAge,destination,departurePort,helpfulVotes,totalImages,images,scrapedAt.itinerariesdataset:itineraryId,title,length,cruiseLineId,cruiseLine,shipId,ship,shipImageUrl,departurePortId,departurePort,departurePortSlug,arrivalPortId,arrivalPort,arrivalPortSlug,destinationId,destination,route,scrapedAt.
Behaviors an agent should know:
startUrlsis required and drives everything. Accepted shapes: a cruise-line page (all ships), a single ship page, a review listing (withratingandpageparameters) 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
reviewsanditinerariesdatasets — not the default one. includeReviewsandincludeItinerarieseach add per-item charges; leave them off when you only need ship profiles.- When a find-a-cruise URL is provided,
includeItinerariesenables 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.
maxReviewsandmaxItinerariesdefault to the value ofmaxItems, 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.
Legal & Compliance Disclaimer
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