# Caribbean Cruise Ship Schedules: Cozumel, Barbados, Aruba (`lyfe_tools/caribbean-cruise-ship-schedules`) Actor

Cruise ship schedules for Cozumel, Barbados and Aruba: which ships are in port on which day, with arrival, departure, pier and passenger capacity, read from the port authorities' own public schedules.

- **URL**: https://apify.com/lyfe_tools/caribbean-cruise-ship-schedules.md
- **Developed by:** [LYFE Offshore](https://apify.com/lyfe_tools) (community)
- **Categories:** Travel, Automation, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 port call returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Caribbean Cruise Ship Schedules: Cozumel, Barbados, Aruba

Cruise ship schedule API for three Caribbean ports: the port schedule of Cozumel (Mexico),
Oranjestad (Aruba) and Bridgetown (Barbados) as one table of ship calls, read from each port
authority's own published schedule.

Which cruise ships are in port on which day: ship, arrival, departure, pier and (where the
source gives it) passenger capacity. The data is read from each port authority's own public
schedule and returned as one clean table, with the source named on every row.

### One day, three ports (real run)

Input: all three ports, `fromDate` and `toDate` both `2026-10-07`. Run on 4 October 2026.

| Port | Ship | Arrives | Departs | Pier / berth | Capacity |
|---|---|---|---|---|---|
| Cozumel | MSC Seashore | 07:30 | 19:00 | Punta Langosta | n/a |
| Cozumel | Carnival Breeze | 08:30 | 17:00 | Puerta Maya | n/a |
| Cozumel | Celebrity Reflection | 09:00 | 20:00 | International Pier (SSA) | n/a |
| Oranjestad (Aruba) | Freewinds | 06:00 | n/a | E | n/a |
| Oranjestad (Aruba) | Allure of the Seas | 07:00 | 16:00 | I | n/a |
| Oranjestad (Aruba) | Carnival Vista | 13:00 | 23:00 | C | n/a |
| Bridgetown (Barbados) | SH Vega | n/a | 17:00 | n/a | 152 |

Seven calls, three ports, one request each (Aruba: the index page and the month's PDF). Cozumel and
Aruba do not publish passenger capacity. `SH Vega` and `Freewinds` show a single time because the ship
arrives the day before or leaves the day after: an overnight stay is listed on both days, and the
second day is marked `departingOnly: true`.

### Input example

This is the input of the run above (`INPUT.json`):

```json
{ "ports": ["cozumel", "barbados", "aruba"], "fromDate": "2026-10-07", "toDate": "2026-10-07" }
```

- `ports`: any of `cozumel`, `barbados`, `aruba`. Empty means all three.
- `fromDate`, `toDate`: `YYYY-MM-DD`. Defaults: today, and 60 days after the first day.
- `shipName`: optional, keeps only ships whose name contains this text (case-insensitive), e.g. `"msc"`.

### Output example

Each row is one JSON object. Two rows from the run above, a Cozumel call and the Barbados overnight:

```json
{ "rowType": "call", "port": "cozumel", "portName": "Cozumel", "country": "Mexico", "date": "2026-10-07",
  "ship": "MSC Seashore", "arrive": "07:30", "depart": "19:00", "berth": "Punta Langosta",
  "departingOnly": false, "source": "APIQROO (Quintana Roo port authority)",
  "sourceUrl": "https://servicios.apiqroo.com.mx/programacion/" }
```

```json
{ "rowType": "call", "port": "barbados", "portName": "Bridgetown", "country": "Barbados", "date": "2026-10-07",
  "ship": "SH Vega", "line": "Swan Hellenic", "guests": 152, "callType": "Transit", "arrive": null,
  "depart": "17:00", "berth": null, "departingOnly": true, "source": "Barbados Port Inc.",
  "sourceUrl": "https://barbadosport.com/bpi-cruise-schedule/" }
```

### Output fields

| Field | Meaning |
|---|---|
| `rowType` | `call` (a ship call, charged) or `port-status` (a port that could not be read, free) |
| `port`, `portName`, `country` | port ID (`cozumel`, `barbados`, `aruba`), port name and country |
| `date` | day of the call, `YYYY-MM-DD`, as printed by the port |
| `ship` | ship name, normalised to title case (`MSC`, `AIDA` kept as written) |
| `arrive`, `depart` | local port time `HH:MM`, or `null` when the source gives none |
| `berth` | pier or berth: Cozumel pier name, Aruba berth letter; `null` for Barbados |
| `departingOnly` | `true` on the second day of an overnight stay |
| `guests` | passenger capacity (Barbados only, else `null` or absent) |
| `line`, `callType` | cruise line and call type such as `Transit` (Barbados only) |
| `firstCall` | `true` when the Aruba PDF marks a first or maiden call (Aruba only) |
| `source`, `sourceUrl` | the port authority and the page the row was read from |
| `status`, `error` | on `port-status` rows only: `unreachable` and the reason |

A run summary (date range, per-port status and row count) is stored in the key-value store under `SUMMARY`.

### What it does

- Reads the public schedule of each port you ask for, once per run, with an identifying
  User-Agent (`tools@lyfeoffshore.com`).
- Filters by date range and, optionally, by ship name.
- A port that cannot be read does **not** stop the run: it returns a free `port-status` row with the
  error, and the other ports come back as normal. If **no** port can be read, the run fails with the reason.

| Port | Source | How far ahead |
|---|---|---|
| Cozumel, Mexico | APIQROO, the Quintana Roo port authority: all three piers (Punta Langosta, International Pier, Puerta Maya) | about a week |
| Bridgetown, Barbados | Barbados Port Inc., with passenger capacity | the whole season |
| Oranjestad, Aruba | Aruba Ports Authority, monthly PDF (the Authority calls it provisional) | months |

### What it does not do

- **Only these three ports.** Other Caribbean ports either publish no schedule that can be read
  automatically or restrict reuse. Bonaire, Curaçao, Nassau, San Juan, Grand Cayman and St. Maarten are not included.
- **Schedules change.** The data is what the port published when the run happened, and ships are rerouted
  or cancelled. Do not treat it as a live feed. Cancelled calls Cozumel marks as cancelled are dropped.
- Times are local port time as printed by the source. Aruba prints `24.00` for midnight, which comes
  back as `24:00`.
- A change to a source page or PDF can break parsing. A port that parses to nothing is reported as
  `unreachable`, never as an empty list.

### Price

Price per 1,000 by your Apify plan (Apify applies the right column automatically):

| | Free | Starter | Scale | Business and up |
|---|---|---|---|---|
| Port call returned, per 1,000 | $1.00 | $0.90 | $0.80 | $0.70 |

No start fee. The figures below use the Free-plan price; on a paid plan the same run costs less.

**$0.001 per port-call row** (event `port-call`), platform usage included. Status rows are free.

- 1,000 rows ≈ $1.
- The one-day run above: 7 rows ≈ $0.007.
- A week of all three ports (7 to 13 October 2026, run on 5 October): 26 rows (14 Cozumel, 10 Aruba,
  2 Barbados) ≈ $0.026.
- The default range (today plus 60 days, run on 5 October 2026): 187 rows ≈ $0.19. Cozumel only
  contributes its first week or so.

A run's maximum-charge limit caps the number of rows returned; the log says how many were left out.

### Use it from code or an AI agent

One HTTP call runs the Actor and returns the rows:

```bash
curl -X POST "https://api.apify.com/v2/acts/lyfe_tools~caribbean-cruise-ship-schedules/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ports": ["cozumel"], "fromDate": "2026-10-07", "toDate": "2026-10-07"}'
```

AI agents (Claude, Cursor and other MCP clients) can call it through the Apify MCP server at
https://mcp.apify.com: the agent sends `ports`, `fromDate`, `toDate` and optionally `shipName`, and reads
`date`, `portName`, `ship`, `arrive`, `depart` and `berth` from the rows.

### Who uses this

[caribbeanportday.com](https://caribbeanportday.com), a port-day guide for cruise passengers, is built on the same three official schedules.

### FAQ

**Which cruise ports are covered?**
Cozumel (Mexico, all three piers), Bridgetown (Barbados) and Oranjestad (Aruba). Nothing else; see above.

**How far ahead do the schedules go?**
Cozumel about a week, Aruba months (one PDF per month), Barbados the whole season. The default range is
today plus 60 days.

**Can I schedule it daily?**
Yes. With an Apify schedule and no dates in the input, each run covers today plus 60 days. Calls change,
so compare runs rather than trusting an old one.

**Does it show how many passengers are on board?**
No. Barbados publishes passenger capacity (`guests`), not the actual number on board. Cozumel and Aruba
publish neither.

**Can I look up one ship?**
Yes: `shipName` keeps only calls whose ship name contains that text, for example `"allure"`.

**What happens if a port's website is down?**
That port returns a free `port-status` row with the error and the other ports come back as normal.

### Sources and terms

Each row carries `source` and `sourceUrl`; please keep the attribution when you republish. We found no
terms forbidding automated reading of these three pages, and robots.txt on the Barbados site allows it.
That is the absence of a prohibition, **not a licence or permission** from the port authorities. If an
authority objects, tell us at tools@lyfeoffshore.com and the port is removed.

Issues and questions: tools@lyfeoffshore.com.

# Actor input Schema

## `ports` (type: `array`):

Which ports to read. Leave empty for all three. cozumel = APIQROO (all three piers, about a week ahead). barbados = Barbados Port Inc. (whole season, with passenger capacity). aruba = Aruba Ports Authority (monthly PDFs, months ahead).

## `fromDate` (type: `string`):

First day of the schedule to return, as YYYY-MM-DD (for example 2026-10-07). Leave empty for today (UTC date). Dates are the local port dates printed by each port authority. Together with To date this sets the range; a single day means the same date in both fields.

## `toDate` (type: `string`):

Last day, YYYY-MM-DD. Default: 60 days after the first day. Cozumel only publishes about a week ahead, so later dates return no Cozumel rows.

## `shipName` (type: `string`):

Optional. Only calls whose ship name contains this text, for example 'princess' or 'msc'.

## Actor input object example

```json
{
  "ports": [
    "cozumel",
    "barbados",
    "aruba"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

Ship calls per port and day, with source attribution.

## `summary` (type: `string`):

Per port: status and number of rows, plus the date range.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "ports": [
        "cozumel",
        "barbados",
        "aruba"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lyfe_tools/caribbean-cruise-ship-schedules").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "ports": [
        "cozumel",
        "barbados",
        "aruba",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("lyfe_tools/caribbean-cruise-ship-schedules").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "ports": [
    "cozumel",
    "barbados",
    "aruba"
  ]
}' |
apify call lyfe_tools/caribbean-cruise-ship-schedules --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lyfe_tools/caribbean-cruise-ship-schedules"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IQM5LgUj7jNX0H6gc/builds/Ln6pTkPUH0cGCVxn0/openapi.json
