Direct Ferries Scraper - Schedules & Operators avatar

Direct Ferries Scraper - Schedules & Operators

Pricing

Pay per event

Go to Apify Store
Direct Ferries Scraper - Schedules & Operators

Direct Ferries Scraper - Schedules & Operators

Scrape directferries.com global ferry aggregator (2,500+ routes, 800+ ports, 400+ operators). Extract timetables, operators, vessels, and aggregate fares for Mediterranean, UK-EU, Scandinavian, and worldwide ferry routes.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Direct Ferries Scraper

Scrapes ferry routes, schedules, and operator data from Direct Ferries — the world's largest ferry-ticket aggregator. Returns 2,500+ routes across 800+ ports and 400+ operators, covering Mediterranean island-hopping, UK-EU crossings, Scandinavian, Baltic, and worldwide ferry traffic.


Direct Ferries Scraper Features

  • Returns one aggregate route record per route — operators, average price, daily and weekly sailing counts, fastest and average duration, distance in nautical miles, first and last ferry of the day.
  • Returns one record per scheduled crossing in the published timetable — operator, departure time, arrival time, duration, sailing days.
  • Names the vessels operating each route. P&O Liberté, Spirit of France, Calais Seaways, the lot.
  • Four input modes — single route lookup, every outbound route from a port, every route an operator runs, every route within a country.
  • Pure HTML scraping over the public site. No headless browser, no booking-widget reverse engineering, no theatrics.
  • Apify residential proxy by default. Cloudflare is permissive on Direct Ferries, but residential keeps origin throttling out of the picture.

Who Uses Direct Ferries Data?

  • Travel-tech startups — wire ferry routes into multi-modal trip planners alongside flights and trains, instead of stopping the user at the coast.
  • Island-hopping & RV travel apps — power Greek-island, Croatian-island, Balearic, and Cycladic itinerary builders with real schedules and operator coverage.
  • Comparison & booking sites — keep a refreshed reference of every published ferry route, average fare, and sailing frequency.
  • RO-RO freight planners — cross-reference truck-and-trailer routes (Dover-Calais, Dunkirk, Portsmouth-Santander, Adriatic Ro-Pax) without scraping each operator separately.
  • Travel research — study network coverage, seasonal frequency, and operator competition across the global ferry market.

How Direct Ferries Scraper Works

  1. Pick a mode — single route, port departures, operator routes, or country routes.
  2. The scraper visits the appropriate Direct Ferries page (e.g. /dover_calais_ferry.htm, /france.htm, /dfds.htm) and walks the listed routes.
  3. For each route page it pulls the aggregate route summary, the published timetable, and the vessel list.
  4. Emits one route_summary record per route plus one sailing record per timetable row, capped by maxItems.

The actor uses standard Cheerio HTML scraping with the Apify residential proxy preset. Per-sailing live fares come from the booking widget API and are intentionally out of scope — the actor returns the published static data, which is enough for catalog work, route research, and comparison feeds.


Input

{
"mode": "route_search",
"originPort": "Dover",
"destinationPort": "Calais",
"maxItems": 15,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
FieldTypeDefaultDescription
modestringroute_searchOne of route_search, port_departures, operator_routes, country_routes.
originPortstringDoverOrigin port name. Used in route_search and port_departures. Examples: Dover, Calais, Piraeus, Naples.
destinationPortstringCalaisDestination port name. Used in route_search only.
countrystringfranceCountry slug. Used in country_routes. Examples: france, greece, italy, croatia, united-kingdom.
operatorstringdfdsOperator slug. Used in operator_routes. Examples: dfds, poferries, irish, brittany, stena, minoan, grimaldi, vikingline.
maxItemsinteger15Cap on total records (route summaries + sailings combined). Set higher to fan out across a country or operator.
proxyConfigurationobjectApify residentialStandard Apify proxy block. Residential is recommended for sustained crawls.

Single route

{
"mode": "route_search",
"originPort": "Piraeus",
"destinationPort": "Mykonos",
"maxItems": 20
}

Every outbound route from a port

{
"mode": "port_departures",
"originPort": "Piraeus",
"maxItems": 50
}

Every route an operator runs

{
"mode": "operator_routes",
"operator": "dfds",
"maxItems": 100
}

Every route within a country

{
"mode": "country_routes",
"country": "greece",
"maxItems": 200
}

Direct Ferries Scraper Output Fields

Records carry a record_type of either route_summary (aggregate route stats) or sailing (one timetable row). Summary fields are populated for summaries; sailing fields are populated for sailings; the unused side is empty.

Route summary record example

{
"record_type": "route_summary",
"route_url": "https://www.directferries.com/dover_calais_ferry.htm",
"route_name": "Dover - Calais",
"origin_port": "Dover",
"origin_country": "England",
"destination_port": "Calais",
"destination_country": "France",
"operator": "Irish Ferries, P&O Ferries & DFDS Seaways",
"operators_count": 3,
"avg_price_text": "$258",
"avg_price_value": 258,
"avg_price_currency": "$",
"avg_daily_sailings": 31,
"avg_weekly_sailings": 211,
"duration_text": "1 h 30 m",
"duration_minutes": 90,
"fastest_duration_text": "1 h 25 m",
"fastest_duration_minutes": 85,
"first_ferry": "00:15",
"last_ferry": "23:55",
"distance_nautical_miles": 33,
"vessels": "Spirit of France, P&O Liberté, P&O Pioneer, Calais Seaways, Malo Seaways, C Class, Isle Of Innisfree, Isle of Inisheer",
"booking_url": "https://www.directferries.com/dover_calais_ferry.htm",
"scraped_at": "2026-05-02T13:32:58.533Z"
}

Sailing record example

{
"record_type": "sailing",
"route_url": "https://www.directferries.com/dover_calais_ferry.htm",
"route_name": "Dover - Calais",
"origin_port": "Dover",
"origin_country": "England",
"destination_port": "Calais",
"destination_country": "France",
"operator": "DFDS Seaways",
"departure_time": "10:40",
"arrival_time": "12:20",
"duration_text": "1 hour 40 minutes",
"duration_minutes": 100,
"sailing_days": "Mon, Tue, Wed, Fri, Sat, Sun",
"booking_url": "https://www.directferries.com/dover_calais_ferry.htm",
"scraped_at": "2026-05-02T13:32:58.533Z"
}
FieldTypeDescription
record_typestringroute_summary or sailing.
route_urlstringDirect Ferries route page URL.
route_namestringRoute name in Origin - Destination form.
origin_portstringOrigin port name.
origin_countrystringOrigin country (as Direct Ferries lists it — e.g. England, France, Greece).
destination_portstringDestination port name.
destination_countrystringDestination country.
operatorstringComma-joined operator list (summary rows) or single operator (sailing rows).
operators_countnumberNumber of operators on this route (summary rows).
departure_timestringScheduled departure HH:MM (sailing rows).
arrival_timestringScheduled arrival HH:MM (sailing rows).
duration_textstringCrossing duration as displayed (1 hour 30 minutes, 1 h 30 m).
duration_minutesnumberCrossing duration in minutes, parsed.
sailing_daysstringDays the sailing operates (Everyday, Mon, Fri, Sat, Sun, etc.).
avg_price_textstringAverage route fare as displayed by Direct Ferries (summary rows).
avg_price_valuenumberAverage route fare numeric value (summary rows).
avg_price_currencystringCurrency symbol or ISO (summary rows).
avg_daily_sailingsnumberAverage daily sailings on this route.
avg_weekly_sailingsnumberAverage weekly sailings on this route.
fastest_duration_textstringFastest crossing duration as displayed.
fastest_duration_minutesnumberFastest crossing duration in minutes, parsed.
first_ferrystringFirst daily sailing (summary rows, HH:MM).
last_ferrystringLast daily sailing (summary rows, HH:MM).
distance_nautical_milesnumberRoute distance in nautical miles.
vesselsstringComma-joined vessel list operating the route.
booking_urlstringDirect Ferries booking page URL.
scraped_atstringISO 8601 timestamp when the record was scraped.

FAQ

How do I scrape Direct Ferries?

Direct Ferries Scraper takes a mode and a target — a port pair, a single port, an operator slug, or a country — and returns the route summary plus every published timetable row. Pick a mode in the input, set maxItems, and run it.

Does Direct Ferries Scraper return live per-sailing fares?

No. Per-sailing prices are only computed at booking time by the Direct Ferries widget — they're not in the static page HTML. The actor returns the published average fare per route plus the full timetable, which is enough for catalog work, route comparison, and aggregate market analysis.

Does Direct Ferries Scraper need proxies?

Direct Ferries Scraper ships with the Apify residential proxy preset enabled by default. Cloudflare is permissive on Direct Ferries — plain GETs come back with full HTML — but residential keeps origin-side throttling out of the picture for sustained crawls.

Can I scrape every route in Greece or every route DFDS operates?

Yes. Use mode: country_routes with country: greece to fan out across every Greek route, or mode: operator_routes with operator: dfds to fan out across every DFDS Seaways crossing. Set maxItems high enough to cover what you need.

How many records does a full run produce?

A single Dover-Calais run yields about 33 records — one summary plus 32 timetable rows. A full country fan-out (e.g. France) covers ~70 routes and runs into the low thousands of records once each route's timetable is included. Set maxItems accordingly. Default is 15 to keep test runs fast.

How fresh is the data?

Route topology and operator coverage are stable year-over-year. Timetables refresh weekly on Direct Ferries' side. Aggregate fare averages are published with a footnote naming the 30-day window they're sampled from.


Need More Features?

Need vessel-level cabin and amenity matrices, the Ferryhopper Mediterranean dataset, or a different operator slug list? File an issue or get in touch.

Why Use Direct Ferries Scraper?

  • Only ferry scraper on the Apify store — zero competing actors, zero supply for a $150B global market.
  • Clean flat output — one record per route summary, one record per sailing, consistent field names, durations parsed to minutes, fares parsed to numeric value plus currency. You spend less time normalizing and more time using the data.
  • Cheap and stable — pay-per-event pricing at the standard $0.001/record. No headless browser, no captcha solving, no booking-widget reverse engineering. Just public HTML over HTTP.