
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape Royal Caribbean cruises: every sailing with interior, ocean view, balcony and suite prices, discounts, cabin category codes, taxes, ports of call with times, ship, dates and booking links. 30 markets and currencies; filter by destination, port, ship, dates, nights and price.
Get every Royal Caribbean sailing with live prices for interior, ocean view, balcony and suite cabins, the discount against the original fare, cabin category codes, taxes, ports of call with times, ship, dates and direct booking links. Pick one of 30 markets and get prices in that market's currency. No login, no browser, a few seconds per run.
ZI, XB, WS) for every cabin class on every sailing.You can also paste search URLs from royalcaribbean.com (for example https://www.royalcaribbean.com/cruises?search=destination:CARIB|nights:3~5): each URL runs as its own search with its own filters, market and sort. An itinerary or booking URL (or a cruise id like IC07MIA-2623281014) gives every departure date of that one cruise.
| Field | What it does |
|---|---|
market | Country site and currency: USA, GBR, CAN, AUS, DEU, FRA, ITA, ESP, MEX, BRA, SGP, ... (30 in total) |
destinations | Destination codes, e.g. CARIB, BAHAM, EUROP, ALCAN (Alaska), MEXCO |
departurePorts | Port codes, e.g. MIA, FLL, PCN, GAL, SEA, BCN, STH |
maxResults | Sailings per search (default 20, 0 = all) |
dateFrom / dateTo | Departure window: a month (2027-03) or a day (2027-03-15) |
minNights / maxNights | Cruise length |
ships | Ship codes, e.g. IC (Icon of the Seas), UT (Utopia), WN (Wonder) |
minPrice / maxPrice | Lowest cabin price range, in the market's currency |
includeSoldOut | Also save sailings with no bookable cabin |
sortBy | recommended, price_low, price_high, date, nights_low, nights_high (the site orders cruises; the sailings in each batch follow the same order) |
startUrls | royalcaribbean.com search, itinerary or booking URLs, or cruise ids |
{
"market": "USA",
"destinations": ["CARIB", "BAHAM"],
"departurePorts": ["MIA", "FLL"],
"dateFrom": "2027-01",
"dateTo": "2027-03",
"maxNights": 7,
"sortBy": "price_low",
"maxResults": 100
}
One row per sailing (one ship on one departure date).
| Field | Description |
|---|---|
cruiseId | Sailing id (itinerary code + date), e.g. IC07E479_2026-10-24 |
title, shipName, shipCode | Cruise name and ship |
departureDate, arrivalDate, sailingNights | Dates and length |
departurePort, arrivalPort | Port code, name and region |
destinationCode, destinationName | Destination |
price, originalPrice, discountAmount, lowestCabinClass, currency | Lowest cabin price on the sailing |
priceInterior, priceOceanView, priceBalcony, priceSuite | Price per cabin class (empty when that class is sold out) |
cabinPricing | Every cabin class with category code, price, original price, discount and availability |
taxesAndFees, taxesAndFeesIncluded | Taxes and port fees, and whether the prices include them |
status, soldOut, highlights | Booking status and the site's promo badges |
portsOfCall, portSequence, visitedRegions | Day-by-day itinerary with times |
stateroomClasses | Cabin classes on the ship with capacity and amenities |
imageUrl, images, itineraryUrl, bookingUrl | Pictures and links |
market, locale, scrapedAt | Where and when it was read |
Example from a test run (trimmed):
{
"cruiseId": "IC07E479_2026-10-24",
"groupId": "IC07MIA-2623281014",
"title": "Eastern Caribbean & Perfect Day",
"shipName": "Icon of the Seas",
"departureDate": "2026-10-24",
"arrivalDate": "2026-10-31",
"sailingNights": 7,
"destinationName": "Caribbean",
"departurePort": { "code": "MIA", "name": "Miami", "region": "Florida" },
"price": 974.42,
"originalPrice": 1472.42,
"discountAmount": 498,
"lowestCabinClass": "Interior",
"currency": "USD",
"priceInterior": 974.42,
"priceOceanView": 1484.92,
"priceBalcony": 1827.42,
"priceSuite": null,
"taxesAndFees": 188.42,
"taxesAndFeesIncluded": true,
"status": "OPEN",
"cabinPricing": [
{ "cabinClass": "INTERIOR", "cabinClassName": "Interior", "categoryCode": "V4", "available": true,
"price": 974.42, "originalPrice": 1472.42, "discountAmount": 498 }
],
"highlights": ["Last Minute Cruise Deals", "Early Booking Bonus"],
"portsOfCall": [
{ "day": 1, "code": "MIA", "name": "Miami", "region": "Florida", "activity": "EMBARK", "arrivalTime": null, "departureTime": "16:30" }
],
"itineraryUrl": "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",
"bookingUrl": "https://www.royalcaribbean.com/booking/landing?groupId=IC07MIA-2623281014&sailDate=2026-10-24&shipCode=IC&packageCode=IC07E479&destinationCode=CARIB&selectedCurrencyCode=USD&country=USA",
"market": "USA"
}
The dataset has three views: Sailings (one row per sailing), Cabin prices (one row per cabin class) and Ports of call (one row per itinerary day).
$0.80 per 1,000 sailings ($0.0008 per sailing), plus a small amount of platform usage. Example: 1,000 sailings ≈ $0.80 in results, plus well under one cent of compute and proxy traffic (a measured 1,000-sailing run used about $0.003). Sailings skipped by your price filter are not charged.
Is it legal? The actor reads public cruise and price information that Royal Caribbean shows to every visitor, without logging in. Check that your use of the data complies with the site's terms and the laws that apply to you.
Do I need an account or proxy? No account. The default datacenter proxy works well; you don't need to change it.
How many results can I get? Everything the site lists for your search. The whole US market was about 3,500 sailings when we tested. Set maxResults to 0 for all of them.
Which price is shown? The same lowest fare per cabin class that the market's search page shows, in that market's currency. taxesAndFeesIncluded tells you whether taxes and port fees are already in the price, and taxesAndFees gives the amount.
Why is a cabin price empty? That cabin class is sold out or not offered on that sailing. cabinPricing[].available is false for it.
Can I schedule it or use the API? Yes. Save your input as a task, schedule it daily, and read the dataset through the API or an integration.
scrapedAt timestamp.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
marketenumOptionaldefault "USA"Market
The Royal Caribbean country site to read. Prices come back in that market's currency, with that market's offers.
destinationsarrayOptionalDestinations
Only cruises to these destinations. Leave empty for every destination.
departurePortsarrayOptionalDeparture ports
Only cruises leaving from these ports. The line-up is seasonal, so a port can have no sailings for a while. Leave empty for every port.
maxResultsintegerOptionaldefault 20Max sailings per search
How many sailings (one row per ship + departure date) to save per search. 0 means all of them (the whole US market is about 3,500 sailings).
Every filter is optional. Leave a field empty to not filter on it.
dateFromstringOptionalDeparting from
Earliest departure date: a month (2027-03) or a day (2027-03-15). Leave empty for no limit.
dateTostringOptionalDeparting until
Latest departure date: a month (2027-06 means up to 30 June) or a day (2027-06-15). Leave empty for no limit.
minNightsintegerOptionalMin nights
Shortest cruise length in nights.
maxNightsintegerOptionalMax nights
Longest cruise length in nights.
shipsarrayOptionalShips
Only sailings on these ships. Leave empty for every ship.
minPriceintegerOptionalMin price
Lowest cabin price of the sailing, in the market's currency (as the search page shows it).
maxPriceintegerOptionalMax price
Highest cabin price of the sailing, in the market's currency (as the search page shows it). Sailings above it are skipped and not charged.
includeSoldOutbooleanOptionaldefault falseInclude sold-out sailings
Also save sailings that have no bookable cabin right now (no prices).
sortByenumOptionaldefault "recommended"Sort by
Order of the results, as on the site. With a limit, this decides which sailings you get.
startUrlsarrayOptionalSearch or cruise URLs
Optional: paste royalcaribbean.com cruise search URLs (e.g. https://www.royalcaribbean.com/cruises?search=destination:CARIB|nights:3~5), itinerary or booking URLs, or cruise ids like IC07MIA-2623281014. A search URL keeps its own filters, market and sort; an itinerary URL gives every departure date of that cruise. The destination, port, ship, date and nights fields above are then ignored.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work well for this site.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| cruiseId | string | |
| title | string | null | |
| shipName | string | null | |
| departureDate | string | null | |
| price | number | null | |
| currency | string | null | |
| cabinPricing | array | |
| portsOfCall | array |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Sailing | One Royal Caribbean sailing (ship + departure date) with its cabin prices saved to the dataset. | $0.0008 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/royal-caribbean-scraper').call({
"destinations": [
"CARIB"
],
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/royal-caribbean-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/royal-caribbean-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Miami, Fort Lauderdale and Port Canaveral departures in 2027, cheapest first.
Ten Europe sailings from the United Kingdom market.
Every departure date of Royal Caribbean's newest ship class.
Short Bahamas cruises (3-5 nights), cheapest first, straight from a search link.
Australia market, prices in AUD, soonest departures first.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.