Royal Caribbean Scraper avatar

Royal Caribbean Scraper

Pricing

from $0.69 / 1,000 royal caribbean sailings

Go to Apify Store
Royal Caribbean Scraper

Royal Caribbean Scraper

Scrape Royal Caribbean cruises: every sailing with ship, itinerary, ports with times, and per-cabin prices, discounts and category codes across 16 markets.

Pricing

from $0.69 / 1,000 royal caribbean sailings

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Royal Caribbean Scraper

Royal Caribbean Scraper extracts every cruise sailing from royalcaribbean.com — ship, itinerary, ports of call with arrival and departure times, and cabin prices with discounts and category codes — in 16 markets and their local currencies.

Filter by destination, departure port, ship, port of call, length, and sail dates, add senior, military, police/firefighter, or state-resident rates, and get one clean row per dated sailing with Interior, Ocean View, Balcony, and Suite prices side by side.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Use the Apify actor "parsebird/royal-caribbean-scraper" to scrape Royal Caribbean cruise sailings and cabin prices. Call it with the apify-client package: client.actor("parsebird/royal-caribbean-scraper").call(run_input={"region": "USA", "maxRows": 200, "destinations": ["CARIB", "BAHAM"], "departurePorts": ["MIA", "FLL"]}), then read results from client.dataset(run["defaultDatasetId"]).iterate_items(). Inputs: region (required, one of USA, CAN, GBR, IRL, AUS, NZL, SGP, DEU, ITA, FRA, ESP, NLD, NOR, SWE, MEX, BRA; sets prices and currency), maxRows (integer 1-10000, default 500, one row per sailing), destinations (array of codes: ALCAN, FAR.E, AUSTL, BAHAM, BERMU, ATLCO, CARIB, EUROP, HAWAI, MEXCO, PACIF, T.PAN, ISLAN, SOPAC, T.ATL, TPACI), departurePorts (array of port codes such as MIA, FLL, PCN, GAL, SEA, BCN, ROM, STH, SYD, SIN), ships (array of two-letter ship codes such as IC, UT, WN, OA), portsOfCall (array of port codes the cruise must visit, e.g. PCC, NAS, CZM), minNights and maxNights (integers), sailDateFrom and sailDateTo (YYYY-MM-DD), sortBy (RECOMMENDED, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, SAIL_DATE, DURATION_LOW_TO_HIGH, DURATION_HIGH_TO_LOW), seniorRate, militaryRate, policeRate (booleans), residentState (two-letter US state), nameLanguage ("english" default or "local"), maxRequestRetries (default 5), minConcurrency (1), maxConcurrency (10), requestHandlerTimeoutSecs (30), useApifyProxy (default false), proxyUrl, apifyProxyGroups (default ["RESIDENTIAL"]), apifyProxyCountryCode. Each row is one sailing with sailingId, cruiseId, itineraryName, shipName, destinationCode/Name, departurePortCode/Name, arrivalPortCode/Name, sailDate, endDate, nights, portsOfCall, lowestPrice, currency, taxesAndFees, dynamic per-cabin fields price_{CUR}_{I|O|B|D}, originalPrice_*, discount_*, categoryCode_*, classification_*, roomTypeId_*, organized_pricing.tiers, rcSailingStatus, rcGroupId, rcHighlights, rcStateroomClasses, rcBookingLink, rcItineraryLink, rcPortsDetailedInfo (day, activity, port, arrivalTime, departureTime). Pricing: pay per sailing saved. API docs: https://apify.com/parsebird/royal-caribbean-scraper/api — get an API token at https://console.apify.com/settings/integrations

What is Royal Caribbean Scraper?

Royal Caribbean Scraper is a Royal Caribbean cruise data extractor and API alternative. It reads the same cruise search that powers royalcaribbean.com/cruises and saves every dated sailing as a structured row: ship, itinerary, departure and arrival ports, ports of call with times, and the price of each cabin class — including the original price, the discount, and the exact cabin category code (like ZI, N1, D1, SF).

The easiest way to try it: open the Input tab, keep the United States market, and click Start. The example run saves 100 sailings in under a minute.

What can Royal Caribbean Scraper do?

  • 🌍 16 markets, local prices — United States, Canada, United Kingdom, Ireland, Australia, New Zealand, Singapore, Germany, Italy, France, Spain, Netherlands, Norway, Sweden, Mexico, and Brazil. Each market returns its own prices in its own currency (USD, CAD, GBP, EUR, AUD, NZD, SGD, NOK, SEK, MXN, BRL).
  • 🛳️ One row per sailing — each dated departure is its own row with a unique sailingId, so a 7-night cruise that sails every Saturday gives you one row per Saturday. No duplicate rows.
  • 💲 Full cabin pricing — Interior, Ocean View, Balcony, and Suite prices, the original (pre-discount) price, the discount amount, and the cabin category code, both as flat spreadsheet columns and as a nested organized_pricing object.
  • 🎟️ Special rates — see prices with senior (55+), military, police and firefighter, or US state-resident rates applied, the same options Royal Caribbean offers on its cruise search.
  • 🗺️ Accurate itineraries — ports of call, day by day, with arrival and departure times, embark/debark days, sea days, tendered stops, and cruisetour land days. Itineraries are read for each sailing, not copied from the first sailing of a cruise group, because dates of the same cruise can call at ports in a different order.
  • 🧭 Real arrival port — the arrival port is the port where guests disembark, so one-way cruises such as transatlantic crossings show both ends (for example Barcelona → Fort Lauderdale).
  • 🔤 Consistent names across markets — by default port and destination names are in English in every market, so "Athens (Piraeus)" in the US market is also "Athens (Piraeus)" in the German and Italian markets. Switch to the market's own language if you prefer. Port codes are always included.
  • 🔎 Filters — destination, departure port, ship, port of call, number of nights, and sail-date range, plus Royal Caribbean's sort orders.

Because it runs on the Apify platform, you also get:

  • Scheduling — run it daily or weekly with Apify Schedules to track cruise price changes.
  • API access — start runs and fetch results with the Apify API or the Python and JavaScript clients.
  • Integrations — send sailings to Google Sheets, Slack, Zapier, Make, n8n, or webhooks with Apify integrations.
  • Export formats — download results as JSON, CSV, Excel, XML, or HTML.

What data can you extract from Royal Caribbean?

FieldDescription
sailingIdUnique sailing ID (package code + sail date), e.g. IC07E479_2026-10-24
cruiseId / rcGroupIdRoyal Caribbean cruise group ID shared by all dates of the same cruise
itineraryCode, itineraryName, cruiseTypePackage code, itinerary title, and CRUISE or CRUISETOUR
shipCode, shipNameShip, e.g. IC / Icon of the Seas
destinationCode, destinationNameRoyal Caribbean destination, e.g. CARIB / Caribbean
departurePortCode, departurePortName, departurePortRegionWhere the cruise starts
arrivalPortCode, arrivalPortName, arrivalPortRegionWhere guests disembark
sailDate, startDate, endDate, nights, totalNightsDates and length (totalNights includes cruisetour land nights)
portSequence, portsOfCall, portsOfCallCountPort code sequence and the list of ports visited
lowestPrice, lowestPriceCabinCode, lowestPriceClassificationCheapest available cabin for this sailing
currency, taxesAndFees, taxesAndFeesIncludedMarket currency, taxes and fees, and whether prices include them
price_{CUR}_{CODE}Current price of a cabin class, e.g. price_USD_B
originalPrice_{CUR}_{CODE}, discount_{CUR}_{CODE}Price before the discount and the discount amount
categoryCode_{CUR}_{CODE}Cabin category code behind the price, e.g. ZI, 4N, XB, WS
classification_{CUR}_{CODE}, roomTypeId_{CUR}_{CODE}Cabin super category (e.g. Balcony) and class ID (e.g. BALCONY)
organized_pricingThe same pricing as a list of tiers with available flags
rateQualifiersSpecial rates applied to the prices (e.g. senior:true), or null
rcSailingStatusBooking status of the sailing, e.g. OPEN
rcHighlightsPromotion badges, e.g. "Early Booking Bonus"
rcStateroomClassesCabin classes on the ship with amenities, max guests, and a photo
rcPortsDetailedInfoDay-by-day ports with activity, arrival time, and departure time
rcBookingLink, rcItineraryLinkBooking page and itinerary page for this exact sailing
imageUrl, scrapedAtItinerary photo and the time the row was scraped

Cabin class codes are I (Interior), O (Ocean View / Outside), B (Balcony), and D (Suite / Deluxe). Prices are the average per-person prices shown in Royal Caribbean's cruise search. A class with no price (null, available: false) is not bookable online for that sailing — usually sold out.

How to scrape Royal Caribbean cruises

  1. Open Royal Caribbean Scraper and go to the Input tab.
  2. Pick a Market — this sets the prices and currency.
  3. Optionally pick Destinations, Departure ports, Ships, or Ports of call.
  4. Optionally set Min/Max nights and a Sailing from / to date range.
  5. Optionally turn on Special rates (senior, military, police & firefighter, or state of residence).
  6. Set Max sailings and click Start.
  7. Download the sailings from the Output tab as JSON, CSV, or Excel, or fetch them through the API.

Input parameters

ParameterTypeRequiredDefaultDescription
regionstringYesUSAMarket: USA, CAN, GBR, IRL, AUS, NZL, SGP, DEU, ITA, FRA, ESP, NLD, NOR, SWE, MEX, BRA
maxRowsintegerNo500Maximum sailings to save (1–10,000)
destinationsarrayNoallDestination codes (see below)
departurePortsarrayNoallDeparture port codes (see below)
shipsarrayNoallTwo-letter ship codes, e.g. IC, UT, WN, OA
portsOfCallarrayNo—Port codes the cruise must visit, e.g. PCC, NAS, CZM
minNights / maxNightsintegerNo—Length of the sailing
sailDateFrom / sailDateTostringNo—Departure date range, YYYY-MM-DD
sortBystringNoRECOMMENDEDRECOMMENDED, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW, SAIL_DATE, DURATION_LOW_TO_HIGH, DURATION_HIGH_TO_LOW
seniorRatebooleanNofalseApply senior (55+) rates
militaryRatebooleanNofalseApply military rates
policeRatebooleanNofalseApply police and firefighter rates
residentStatestringNo—Apply resident rates for a US state, e.g. FL
nameLanguagestringNoenglishenglish (same names in every market) or local
maxRequestRetriesintegerNo5Retries for a failed request
minConcurrencyintegerNo1Parallel requests to start with
maxConcurrencyintegerNo10Maximum parallel requests
requestHandlerTimeoutSecsintegerNo30Timeout for one request, in seconds
useApifyProxybooleanNofalseSend requests through Apify Proxy
proxyUrlstringNo—Your own proxy URL (takes priority over Apify Proxy)
apifyProxyGroupsarrayNo["RESIDENTIAL"]Apify Proxy groups
apifyProxyCountryCodestringNomatches marketProxy country, e.g. US, GB, AU

Destination codes (they mirror Royal Caribbean's own search filters):

CodeDestinationCodeDestination
ALCANAlaskaFAR.EAsia
AUSTLAustralia & New ZealandBAHAMBahamas
BERMUBermudaATLCOCanada & New England
CARIBCaribbeanEUROPEurope
HAWAIHawaiiMEXCOMexico
PACIFPacific NorthwestT.PANPanama Canal
ISLANRepositioningSOPACSouth Pacific
T.ATLTransatlanticTPACITranspacific

If you are moving from another tool that used ALASK, ASIA, NORDI, or TRANS, use ALCAN, FAR.E, EUROP, and T.ATL.

Departure port codes:

CodePortCodePort
MIAMiami, FLFLLFort Lauderdale, FL
PCNOrlando (Port Canaveral), FLTPATampa, FL
GALGalveston, TXMSYNew Orleans, LA
SJUSan Juan, Puerto RicoBYECape Liberty (New York), NJ
BWIBaltimore, MDSEASeattle, WA
LAXLos Angeles, CASANSan Diego, CA
HNLOahu (Honolulu), HISWDSeward, AK
YVRVancouver, CanadaSTHSouthampton, England
BCNBarcelona, SpainROMRome (Civitavecchia), Italy
BLQRavenna (Venice), ItalyATHAthens (Piraeus), Greece
ISTIstanbul, TurkeyLISLisbon, Portugal
CTGCartagena, ColombiaONXColón, Panama
SYDSydney, AustraliaBNEBrisbane, Australia
SINSingaporeHKGHong Kong
BAOShanghai (Baoshan), ChinaYOKTokyo (Yokohama), Japan

Royal Caribbean's port line-up is seasonal, so a valid port can return no sailings in some months. An unknown code stops the run with a message listing the valid codes, instead of silently returning an empty dataset.

Input examples

Caribbean and Bahamas cruises from Miami and Fort Lauderdale:

{
"region": "USA",
"maxRows": 200,
"destinations": ["CARIB", "EUROP", "BAHAM"],
"departurePorts": ["MIA", "FLL"]
}

Summer Europe cruises for the UK market, cheapest first:

{
"region": "GBR",
"destinations": ["EUROP"],
"sailDateFrom": "2027-06-01",
"sailDateTo": "2027-08-31",
"sortBy": "PRICE_LOW_TO_HIGH"
}

Senior rates for a Florida resident on Icon and Star of the Seas:

{
"region": "USA",
"ships": ["IC", "ST"],
"seniorRate": true,
"residentState": "FL"
}

Every cruise that stops at Perfect Day at CocoCay, 3–5 nights:

{
"region": "USA",
"portsOfCall": ["PCC"],
"minNights": 3,
"maxNights": 5,
"maxRows": 1000
}

Output example

One row per sailing. Arrays are shortened here.

{
"sailingId": "IC07E479_2026-10-24",
"cruiseId": "IC07MIA-2623281014",
"itineraryCode": "IC07E479",
"itineraryName": "Eastern Caribbean & Perfect Day",
"cruiseType": "CRUISE",
"shipCode": "IC",
"shipName": "Icon of the Seas",
"region": "USA",
"currency": "USD",
"destinationCode": "CARIB",
"destinationName": "Caribbean",
"departurePortCode": "MIA",
"departurePortName": "Miami",
"arrivalPortCode": "MIA",
"arrivalPortName": "Miami",
"sailDate": "2026-10-24",
"endDate": "2026-10-31",
"nights": 7,
"portSequence": "MIA_SXM_STT_PCC_MIA",
"portsOfCall": ["Philipsburg", "Charlotte Amalie", "Perfect Day CocoCay"],
"lowestPrice": 1287.42,
"lowestPriceClassification": "Interior",
"taxesAndFees": 188.42,
"taxesAndFeesIncluded": true,
"price_USD_I": 1287.42,
"originalPrice_USD_I": 1287.42,
"discount_USD_I": 0,
"categoryCode_USD_I": "ZI",
"classification_USD_I": "Interior",
"roomTypeId_USD_I": "INTERIOR",
"price_USD_B": 2046.42,
"originalPrice_USD_B": 3075.42,
"discount_USD_B": 1029,
"categoryCode_USD_B": "D1",
"classification_USD_B": "Balcony",
"roomTypeId_USD_B": "BALCONY",
"organized_pricing": {
"currency": "USD",
"tiers": [
{
"code": "B",
"roomTypeId": "BALCONY",
"name": "Balcony",
"classification": "Balcony",
"categoryCode": "D1",
"price": 2046.42,
"originalPrice": 3075.42,
"discountAmount": 1029,
"taxesAndFees": 188.42,
"available": true
}
]
},
"rateQualifiers": null,
"rcSailingStatus": "OPEN",
"rcGroupId": "IC07MIA-2623281014",
"rcHighlights": ["Last Minute Cruise Deals", "Early Booking Bonus", "President's Cruise"],
"rcStateroomClasses": [
{
"id": "INTERIOR",
"code": "I",
"name": "Interior",
"classification": "Interior",
"maxCapacity": 4,
"amenities": ["Our most budget-friendly option", "156 - 285 sq. ft. stateroom"]
}
],
"rcBookingLink": "https://www.royalcaribbean.com/booking/landing?groupId=IC07MIA-2623281014&sailDate=2026-10-24&shipCode=IC&packageCode=IC07E479&destinationCode=CARIB&selectedCurrencyCode=USD&country=USA",
"rcItineraryLink": "https://www.royalcaribbean.com/cruises/itinerary/7-night-eastern-caribbean-perfect-day-from-miami-on-icon-IC07E479?sailDate=2026-10-24&packageCode=IC07E479&groupId=IC07MIA-2623281014&country=USA",
"rcPortsDetailedInfo": [
{ "day": 1, "dayType": "PORT", "activity": "EMBARK", "portCode": "MIA", "portName": "Miami", "portRegion": "Florida", "arrivalTime": null, "departureTime": "16:30:00" },
{ "day": 2, "dayType": "CRUISING", "activity": "CRUISING", "portCode": "CRU", "portName": "Cruising", "portRegion": null, "arrivalTime": null, "departureTime": null }
],
"scrapedAt": "2026-09-29T23:09:22+00:00"
}

Use cases

  • Cruise price tracking — schedule daily runs and follow price and discount changes per cabin class and sailing.
  • Travel agencies and cruise sellers — keep an up-to-date catalog of Royal Caribbean sailings with booking links.
  • Deal alerts — watch discount_* fields and rcHighlights badges and push new deals to Slack or email.
  • Market comparison — run the same search in several markets and compare what each country pays for the same sailingId.
  • Special-rate analysis — compare standard prices with senior, military, or resident rates for the same sailing.
  • Travel data products — feed itineraries, ports, and prices into search tools, dashboards, or LLM apps.

How it works

  1. The actor builds a search from your filters, exactly like the filter panel on Royal Caribbean's cruise search page.
  2. It reads the search results for the chosen market page by page, starting with a few requests in parallel and adding more while they succeed.
  3. Each cruise group is split into its dated sailings, and each sailing gets its own itinerary, ports, and prices.
  4. For markets that show local-language names, it looks up the English names by port code (unless you choose the market language).
  5. Rows are saved to the dataset as they arrive, until maxRows is reached.

How much does it cost to scrape Royal Caribbean?

Royal Caribbean Scraper uses pay-per-event pricing: you pay for each sailing saved to the dataset, and nothing for requests that return no sailings.

EventFreeBronzeSilverGold
Sailing scraped (per 1,000)$0.99$0.89$0.79$0.69

A whole market is about 3,200 sailings, so a full United States catalog costs about $3.20 on the Free plan. The example run with 100 sailings costs about $0.10. You can set a maximum cost per run in the run options, and the actor stops when it is reached.

Python and JavaScript API examples

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/royal-caribbean-scraper").call(run_input={
"region": "USA",
"destinations": ["ALCAN"],
"departurePorts": ["SEA", "YVR"],
"maxRows": 300,
})
for sailing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(sailing["sailDate"], sailing["shipName"], sailing["lowestPrice"], sailing["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/royal-caribbean-scraper').call({
region: 'AUS',
destinations: ['SOPAC'],
maxRows: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((s) => console.log(s.sailDate, s.itineraryName, s.price_AUD_B));

See the API tab for more clients and endpoints.

FAQ

Can it get agency-only rates such as group, interline, or corporate rate codes? No. Royal Caribbean Scraper collects the public consumer prices shown on royalcaribbean.com. It can apply the public special rates the website offers — senior, military, police and firefighter, and state resident — but not rates that need an agency or account login.

Are prices per person? Yes. They are the average per-person prices Royal Caribbean shows in its cruise search. taxesAndFeesIncluded tells you whether taxes and fees are already included in the price, and taxesAndFees gives the amount.

Why are some cabin prices empty? When Royal Caribbean has no price for a cabin class on a sailing, the price is null and available is false in organized_pricing. This usually means that class is sold out or not bookable online.

Why do port names differ between markets? Royal Caribbean translates port and destination names in some markets (for example "Atene (Pireo)" in Italy). By default the actor returns the English names in every market so the same port has the same name everywhere. Set nameLanguage to local to keep the translated names. The port code (e.g. ATH) is always the same.

What is the difference between cruiseId and sailingId? cruiseId is Royal Caribbean's cruise group — the same cruise on many dates. sailingId identifies one dated departure. Use sailingId as the unique key.

How many sailings does Royal Caribbean have? About 940 cruise groups and 3,200 sailings per market when this actor was built. Set maxRows to 10,000 to get a whole market.

Do I need a proxy? Usually not. Proxy is off by default. If requests get blocked, turn on useApifyProxy; the proxy country is matched to the market automatically, or you can set apifyProxyCountryCode. You can also use your own proxy with proxyUrl.

Can I schedule runs and connect other tools? Yes. Use Apify Schedules for recurring runs and integrations for Google Sheets, Zapier, Make, n8n, Slack, or webhooks.

Something is missing or broken? Open an issue in the Issues tab. We read every report and fix problems quickly.

Royal Caribbean Scraper only collects publicly available cruise and price information that anyone can see on royalcaribbean.com without logging in. It does not collect personal data. You should still check that your use of the data follows Royal Caribbean's terms and the laws that apply to you, such as GDPR in the EU. If you are unsure, ask a lawyer. Read more in Apify's blog post Is web scraping legal?.

Other travel scrapers