CruiseMapper Port Schedules Scraper avatar

CruiseMapper Port Schedules Scraper

Pricing

Pay per event

Go to Apify Store
CruiseMapper Port Schedules Scraper

CruiseMapper Port Schedules Scraper

Extract ship arrivals, departures, cruise lines, and dates from public CruiseMapper port schedules for tourism planning and itinerary analysis.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Categories

Share

Extract structured cruise ship arrivals and departures from public CruiseMapper port schedules.

Use this Apify Actor to turn monthly port calendars into a clean dataset for destination planning, cruise analysis, transport operations, itinerary apps, or recurring traffic monitoring.

Provide one or more CruiseMapper port URLs and choose specific months or a continuous month range. The Actor saves one row per ship call with the port, date, vessel, cruise line, arrival, departure, and source links.

What does CruiseMapper Port Schedules Scraper do?

The Actor reads server-rendered CruiseMapper port schedule pages over HTTP.

It extracts:

  • ⚓ port name and region
  • 📅 call date and weekday
  • 🚢 ship name and ship page URL
  • 🏢 cruise line when displayed
  • 🕐 arrival and departure times
  • 🌙 an overnight indicator
  • 🔗 canonical port and source URLs
  • 🧾 requested month and scrape timestamp

Results are available as JSON, CSV, Excel, XML, RSS, and other Apify Dataset exports.

Who is it for?

Destination management organizations

Estimate visitor peaks and coordinate local services around expected ship calls.

Ground-tour and transport vendors

Plan staffing, vehicles, guides, and pickup capacity using arrival and departure windows.

Port and maritime analysts

Create repeatable snapshots of scheduled calls across ports and months.

Travel application developers

Feed structured port schedules into itinerary tools, dashboards, alerts, or internal APIs.

Cruise researchers

Compare ship presence, line activity, seasonality, and port traffic without manually copying calendars.

Why use this Actor?

  • Structured output: each port call becomes one consistent record.
  • Multi-port runs: process several destination pages together.
  • Flexible periods: request explicit months or an inclusive month range.
  • Source traceability: retain links back to the exact schedule and ship.
  • Automation ready: schedule recurring runs or trigger them through the API.
  • Cost efficient: HTTP extraction avoids browser startup overhead.
  • Resilient: bounded retries, validation, deduplication, and optional proxies are built in.

How to scrape CruiseMapper port schedules

  1. Open the Actor input page.
  2. Add one or more CruiseMapper port URLs.
  3. Enter months in YYYY-MM format.
  4. Choose a maximum number of port calls.
  5. Click Start.
  6. Open the Dataset when the run finishes.
  7. Export or integrate the records in your preferred format.

A small first run can use Ajaccio and one month.

Input

FieldTypeDescription
portUrlsarrayPublic CruiseMapper port page URLs.
monthsstring arrayExplicit months in YYYY-MM format.
startMonthstringOptional first month of an inclusive range.
endMonthstringOptional last month of an inclusive range.
maxItemsintegerGlobal maximum number of saved port calls.
requestDelaySecsnumberDelay between monthly schedule requests.
proxyConfigurationobjectOptional Apify Proxy settings.

When months contains values, it takes precedence over startMonth and endMonth.

A date range may contain up to 36 months.

Example input

{
"portUrls": [
{ "url": "https://www.cruisemapper.com/ports/ajaccio-port-67" }
],
"months": ["2026-07", "2026-08"],
"maxItems": 250,
"requestDelaySecs": 0.5,
"proxyConfiguration": {
"useApifyProxy": false
}
}

For a continuous period, leave months empty:

{
"portUrls": [
{ "url": "https://www.cruisemapper.com/ports/ajaccio-port-67" }
],
"months": [],
"startMonth": "2026-07",
"endMonth": "2026-12",
"maxItems": 1000
}

Output data

FieldTypeMeaning
portNamestringPort title shown by CruiseMapper.
portUrlstringCanonical port page URL.
regionstring or nullCruiseMapper region label.
callDatestringPort-call date in YYYY-MM-DD format.
weekdaystring or nullDisplayed weekday.
shipNamestringVessel name.
shipUrlstringCruiseMapper ship page URL.
cruiseLinestring or nullCruise line when exposed by the schedule.
arrivalstring or nullDisplayed local arrival time.
departurestring or nullDisplayed local departure time.
overnightbooleanWhether departure appears to roll into the next day.
requestedMonthstringMonth used to fetch this schedule.
sourceUrlstringExact monthly schedule source.
scrapedAtstringUTC extraction timestamp.

Example output

{
"portName": "Ajaccio (Corsica France)",
"portUrl": "https://www.cruisemapper.com/ports/ajaccio-port-67",
"region": "Mediterranean - Black Sea",
"callDate": "2026-07-01",
"weekday": "Wednesday",
"shipName": "AIDAcosma",
"shipUrl": "https://www.cruisemapper.com/ships/AIDAcosma-2076",
"cruiseLine": "AIDA Cruises",
"arrival": "09:00",
"departure": "22:00",
"overnight": false,
"requestedMonth": "2026-07",
"sourceUrl": "https://www.cruisemapper.com/ports/ajaccio-port-67?month=2026-07#schedule",
"scrapedAt": "2026-07-13T03:00:00.000Z"
}

How much does it cost to scrape cruise port schedules?

This Actor uses pay-per-event pricing.

A $0.005 run-start fee is charged once, followed by a per-port-call event for records produced.

Apify tierPrice per port call
FREE$0.000026595
BRONZE$0.000023126
SILVER$0.000018038
GOLD$0.000013875
PLATINUM$0.00001
DIAMOND$0.00001

For example, 1,000 calls cost about $0.03160 on FREE or $0.02813 on BRONZE, including one start fee.

Tier discounts reduce the unit price for higher Apify plans. The Console displays the exact current price before every run.

To reduce cost:

  • group several months into one run
  • avoid repeatedly requesting unchanged historical periods
  • use maxItems for previews
  • keep proxy use disabled unless it is needed

Schedule monthly port monitoring

Create an Apify Schedule to refresh future calls weekly or monthly.

A common workflow is:

  1. save one Actor Task per region or destination group
  2. use a rolling set of future months
  3. run the task every week
  4. export the Dataset to your warehouse
  5. compare new rows with the previous snapshot
  6. notify operations teams when schedules change

Cruise schedules can change, so downstream systems should treat each extraction as a snapshot.

Integrations

Google Sheets

Use the Dataset export URL or an Apify integration to refresh planning spreadsheets.

Make and Zapier

Trigger workflows after successful runs and route new calls into calendars, CRMs, or notifications.

Webhooks

Send run-completion events to your own service, then fetch the Dataset through the API.

Data warehouses

Load JSON or CSV exports into BigQuery, Snowflake, PostgreSQL, or another analytics store.

Slack and email alerts

Compare snapshots and notify teams about newly listed vessels or revised times.

API usage

JavaScript API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/cruisemapper-port-schedules-scraper').call({
portUrls: [{ url: 'https://www.cruisemapper.com/ports/ajaccio-port-67' }],
months: ['2026-07'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python API example

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/cruisemapper-port-schedules-scraper').call(run_input={
'portUrls': [{'url': 'https://www.cruisemapper.com/ports/ajaccio-port-67'}],
'months': ['2026-07'],
'maxItems': 100,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

cURL API example

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~cruisemapper-port-schedules-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"portUrls": [{"url": "https://www.cruisemapper.com/ports/ajaccio-port-67"}],
"months": ["2026-07"],
"maxItems": 100
}'

Use with Apify MCP

Connect the Actor to AI assistants through Apify MCP. The hosted endpoint is:

https://mcp.apify.com?tools=automation-lab/cruisemapper-port-schedules-scraper

Claude Code

Add the hosted MCP server from a terminal:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/cruisemapper-port-schedules-scraper"

Claude Desktop, Cursor, and VS Code

Add this hosted HTTP server to the MCP configuration in Claude Desktop, Cursor, or VS Code. Each client accepts the same server definition:

{
"mcpServers": {
"apify-cruisemapper-port-schedules": {
"url": "https://mcp.apify.com?tools=automation-lab/cruisemapper-port-schedules-scraper"
}
}
}

Restart or reload the client after saving the configuration, then select apify-cruisemapper-port-schedules when prompted to enable tools.

If your client only supports local stdio servers, use the Apify MCP package instead:

npx -y @apify/actors-mcp-server \
--tools automation-lab/cruisemapper-port-schedules-scraper

Example prompts:

  • “Extract July arrivals for this CruiseMapper port.”
  • “Create a CSV of expected ship calls for the next three months.”
  • “Which cruise lines call at this port most often?”
  • “Find days with multiple ships arriving before 10:00.”

Data quality notes

Times are copied as displayed by CruiseMapper and should be interpreted in the port's local context.

Cruise line is nullable because not every row is guaranteed to expose a line label.

The Actor deduplicates records using port, date, ship, arrival, and departure.

The overnight field is inferred when a valid departure time is earlier than or equal to arrival.

Always retain sourceUrl when auditability matters.

Tips for reliable runs

  • Use canonical URLs containing /ports/...-port-ID.
  • Start with one port and one month.
  • Increase maxItems only after reviewing sample output.
  • Keep a modest request delay for larger month ranges.
  • Enable Apify Proxy if direct requests become unreliable.
  • Split very large portfolios into region-based tasks.
  • Store snapshots instead of overwriting historical datasets.

Limitations

  • The Actor extracts schedules that CruiseMapper publicly displays.
  • It does not predict cancellations or operational changes.
  • It does not enrich records with live AIS positions.
  • It does not convert displayed local times into UTC.
  • Empty months produce no records.
  • Markup changes can temporarily affect extraction.
  • The Actor accepts port URLs rather than free-text destination search.

Troubleshooting

“Not a CruiseMapper port URL”

Use a URL shaped like https://www.cruisemapper.com/ports/ajaccio-port-67.

Remove schedule tabs, hotel links, and unrelated CruiseMapper pages.

The Dataset is empty

Check that the requested month has published calls on the source page.

Open the sourceUrl manually and confirm a schedule table exists.

Try a future high-season month or another port.

Requests fail intermittently

Increase requestDelaySecs and enable Apify Proxy.

Review logs for response status and retry details.

The run stops before all months

Increase maxItems; the limit applies across all ports and months.

Legality

This Actor accesses publicly available pages without login.

Web scraping laws and website terms vary by jurisdiction and use case.

You are responsible for ensuring that your collection, storage, and use of data is lawful and respects applicable terms, privacy rules, and intellectual-property rights.

Avoid collecting personal data that you do not need.

Use conservative request rates and do not disrupt the target service.

FAQ

Can I scrape several ports in one run?

Yes. Add multiple canonical pages to portUrls.

Can I request a whole season?

Yes. Set months to an empty array and provide startMonth and endMonth.

How far can the range extend?

One run accepts up to 36 months.

Are arrival and departure times UTC?

No. They are the times displayed for the port schedule and normally represent local context.

Does it extract every CruiseMapper port automatically?

No. You choose the port URLs, which keeps runs focused and predictable.

Can I run it every week?

Yes. Save the input as an Actor Task and attach an Apify Schedule.

Why is cruise line sometimes null?

The line is emitted only when the schedule row exposes a usable label.

How do I export to CSV?

Open the run Dataset, select Export, then choose CSV.

Explore other travel and location data tools from Automation Lab.

Combine this Actor with itinerary, hotel, or destination datasets when those sources fit your workflow.

Only use related Actors that match the lawful purpose and data quality requirements of your project.

Support

If you encounter an unexpected result, include:

  • the Actor run URL
  • a sample port URL
  • the requested month
  • the expected record
  • the observed output or error

That context makes investigation faster and reproducible.