Direct Ferries Scraper - Schedules & Operators
Pricing
from $0.80 / 1,000 record scrapeds
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
from $0.80 / 1,000 record scrapeds
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
17
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Security
Limited permissionsShare
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.
- Fast and cheap over the public site. No theatrics.
- Sustained crawls stay clear of origin-side throttling.
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
- Pick a mode — single route, port departures, operator routes, or country routes.
- The scraper visits the appropriate Direct Ferries page (e.g.
/dover_calais_ferry.htm,/france.htm,/dfds.htm) and walks the listed routes. - For each route page it pulls the aggregate route summary, the published timetable, and the vessel list.
- Emits one
route_summaryrecord per route plus onesailingrecord per timetable row, capped bymaxItems.
Need the sailings and prices for one specific day? Set departureDate on a route_search and the actor returns one dated_sailing record per bookable sailing on that date, each with its fare for 1 adult on foot (no vehicle). See Dated sailings and fares.
Input
{"mode": "route_search","originPort": "Dover","destinationPort": "Calais","maxItems": 15}
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | route_search | One of route_search, port_departures, operator_routes, country_routes. |
originPort | string | Dover | Origin port name. Used in route_search and port_departures. Examples: Dover, Calais, Piraeus, Naples. |
destinationPort | string | Calais | Destination port name. Used in route_search only. |
departureDate | string | (empty) | route_search only. YYYY-MM-DD, today or later. Returns that day's bookable sailings with a 1-adult foot-passenger fare instead of the timetable. Leave empty for the usual output. |
country | string | france | Country slug. Used in country_routes. Examples: france, greece, italy, croatia, united-kingdom. |
operator | string | dfds | Operator slug. Used in operator_routes. Examples: dfds, poferries, irish, brittany, stena, minoan, grimaldi, vikingline. |
maxItems | integer | 15 | Cap on total records (route summaries + sailings combined). Set higher to fan out across a country or operator. |
Single route
{"mode": "route_search","originPort": "Piraeus","destinationPort": "Mykonos","maxItems": 20}
Dated sailings and fares
{"mode": "route_search","originPort": "Barcelona","destinationPort": "Palma","departureDate": "2026-11-02"}
Returns one dated_sailing record per sailing bookable on that date: departure and arrival, operator, vessel, duration, and the fare for 1 adult on foot with no vehicle, in EUR. Sailings that need a vehicle, and sailings with no available fare, are left out. With departureDate set the run returns these records only (no route_summary or timetable rows). maxItems caps the count. Fares exclude Direct Ferries service fees and are the price at the moment of the run.
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 route_summary (aggregate route stats), sailing (one timetable row) or dated_sailing (one bookable sailing on departureDate, with its fare). Summary fields are populated for summaries; sailing fields are populated for sailings; the unused side is empty.
Dated sailing record example
{"record_type": "dated_sailing","route_url": "https://www.directferries.com/barcelona_palma_ferry.htm","route_name": "Barcelona - Palma","origin_port": "Barcelona","destination_port": "Palma de Mallorca","departure_date": "2026-11-02","departure_time": "21:30","arrival_date": "2026-11-03","arrival_time": "06:00","duration_text": "8 hours 30 min","duration_minutes": 510,"operator": "Grandi Navi Veloci","vessel": "Tenacia","fare_amount": 38,"fare_currency": "EUR","fare_basis": "seat deck","ticket_type": "BoardingCard","booking_url": "https://booking.directferries.com/app/booking/search?t=BRC+PAL+2026-11-02+DIR+00:00+24:00&ccy=EUR&c=EUR&adult=1&pas=1","scraped_at": "2026-10-19T02:03:09.903Z"}
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"}
| Field | Type | Description |
|---|---|---|
record_type | string | route_summary, sailing or dated_sailing. |
route_url | string | Direct Ferries route page URL. |
route_name | string | Route name in Origin - Destination form. |
origin_port | string | Origin port name. |
origin_country | string | Origin country (as Direct Ferries lists it — e.g. England, France, Greece). |
destination_port | string | Destination port name. |
destination_country | string | Destination country. |
operator | string | Comma-joined operator list (summary rows) or single operator (sailing rows). |
operators_count | number | Number of operators on this route (summary rows). |
departure_time | string | Scheduled departure HH:MM (sailing rows). |
arrival_time | string | Scheduled arrival HH:MM (sailing rows). |
departure_date | string | YYYY-MM-DD you asked for (dated_sailing rows). |
arrival_date | string | YYYY-MM-DD of arrival; the next day on overnight crossings (dated_sailing). |
vessel | string | Vessel name (dated_sailing rows). |
fare_amount | number | Fare for 1 adult on foot, no vehicle, excluding service fees (dated_sailing). |
fare_currency | string | ISO currency of fare_amount (EUR). |
fare_basis | string | Fare class as Direct Ferries labels it, e.g. seat deck. |
ticket_type | string | Ticket form the operator issues, e.g. BoardingCard. |
duration_text | string | Crossing duration as displayed (1 hour 30 minutes, 1 h 30 m). |
duration_minutes | number | Crossing duration in minutes, parsed. |
sailing_days | string | Days the sailing operates (Everyday, Mon, Fri, Sat, Sun, etc.). |
avg_price_text | string | Average route fare as displayed by Direct Ferries (summary rows). |
avg_price_value | number | Average route fare numeric value (summary rows). |
avg_price_currency | string | Currency symbol or ISO (summary rows). |
avg_daily_sailings | number | Average daily sailings on this route. |
avg_weekly_sailings | number | Average weekly sailings on this route. |
fastest_duration_text | string | Fastest crossing duration as displayed. |
fastest_duration_minutes | number | Fastest crossing duration in minutes, parsed. |
first_ferry | string | First daily sailing (summary rows, HH:MM). |
last_ferry | string | Last daily sailing (summary rows, HH:MM). |
distance_nautical_miles | number | Route distance in nautical miles. |
vessels | string | Comma-joined vessel list operating the route. |
booking_url | string | Direct Ferries booking page URL. |
scraped_at | string | ISO 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?
Yes, for one route and one date at a time. Set departureDate on a route_search and each bookable sailing that day comes back with its fare for 1 adult on foot (no vehicle), in EUR. Without a date 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. Passenger counts and vehicles are not configurable.
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.
Related Actors
- 12go.asia Scraper - Train, Bus, Ferry, Flight Schedules (Asia) — Scrape multimodal transport from 12go.asia: trains, buses, ferries, flights, vans, and private transfers across 40+ Asian countries.
- Philippines Transit Scraper — Ferries, PNR, MRT, LRT, PITX Bus — Scrape Philippines transit: inter-island ferries (2GO, Montenegro, Oceanjet, FastCat, Starlite) with cabin-class breakdown and RORO…