Revenue management for ferry operators

Increase revenue
Fill more sailings

Ferry Profit Optimizer is a revenue management system for ferry operators. We forecast demand per departure and recommend the fare that maximises contribution, on your own data.

01The problem

Pricing is the only lever that moves contribution this fast

0kr

An empty berth is worth nothing

Once the ramp lifts, the berth cannot be sold. There is no inventory to carry forward, no second chance at that sailing.

~90%

The cost is already committed

Fuel, crew and harbour fees barely move with occupancy. Nearly every additional berth sold is close to pure contribution.

2limits

Ferries are harder than flights

Passengers and vehicles sell together against two separate ceilings. A family in a campervan takes one lane metre and four seats.

Forecast error, mean
5.5% MAPE
Predict-the-average baseline
33.0%
Mean absolute error, of capacity
3.3pp
P80 interval coverage
82%

Measured on held-out sailings, the later period of the data, never trained on. Accuracy differs per operator and these are averages: across the fleets measured, forecast error ranges from 4.4 % to 7.4 % MAPE, and the model beats the predict-the-average baseline by 81–85 %. Route mix, how far ahead a fleet sells and how often sailings fill all move the number, so your own figures are established on your own history during onboarding rather than promised in advance.

02Platform

Buy the models you need, not the suite

Every module is entitled per operator. A freight-led route can run deck demand alone; a large operator runs the catalogue. Nothing switches on without the model it reads from a module without its inputs does not fail, it quietly emits a rule of thumb wearing a model’s name.

How full the berths will be

A P10–P90 band per departure rather than a single number. The band is the decision: 62–91 says the sailing can still go either way, 88–96 says it is settled. The model reads the SLOPE of the booking curve, because 40 % is strong sixty days out and alarming at five.

  • Conditional quantile table, pooled by route, season and day type
  • Sold-out departures unconstrained before training
  • Split on departure date, so no sailing sits on both sides
MAE, held-out departures3.2 ppmeasured on held-out departures

03Console

One sailing, and the arithmetic behind its fare

Stockholm Åbo

STO-TKU · M/S Aurora · departs in 12 days

Recommended52

Booking build-up against forecast

  • Booked
  • Forecast P50
  • P10–P90
  • Last year
  • Capacity
3992.8ksells out
4599.5k
52111.7k
59106.8k

Why€39 fills the ship but leaves money on the table: demand at that price exceeds the 2,420 berths available, so the cheapest seats crowd out travellers who would have paid more. €52 clears close to capacity at the highest total contribution.

Booked against forecast, departure by departure

  • Booked now
  • Forecast P50
  • Above capacity
  • Capacity

04Model

Measured against the baseline, not against a promise

MAPE5.5%Mean absolute percentage error on held-out sailings
MAE3.3 ppMean absolute error, in percentage points of capacity
RMSE6.4 ppPenalises the large misses more than MAE does
P80 coverage82%Share of outcomes inside P10–P90. Should be ≈80%
Baseline33.0%Predict the historical average, same sailings
vs baseline−84%Error reduction against that baseline

Forecast error over 24 months

  • Model (MAPE)
  • Predict-the-average baseline
  • Improvement

What the forecast leans on

  • Days to departure20.8%
  • Historical load (route × weekday)17.1%
  • Deviation from booking curve13.4%
  • Calendar, holidays and school terms11.2%
  • Competitor pricing on the route8.9%
  • Seasonality index7.8%
  • Weather forecast at departure port6.1%
  • Bunker price4.8%
  • Campaign exposure4.4%
  • SEK/EUR exchange rate3.2%
  • Other2.3%
  • Time profile
  • History
  • External
  • Market
  • Other

05Network

Every route, with the ones losing yield first

RouteServiceDeparturesLoadYield indexTrend
Stockholm – HelsinkiNLK 1012 daily6292.1%128+4.2%
Trelleborg – RostockNLK 2044 daily12477.4%112+2.8%
Kapellskär – MariehamnNLK 3103 daily9361.2%94-1.4%
Gothenburg – FrederikshavnNLK 4155 daily15584.8%119+3.6%
Ystad – ŚwinoujścieNLK 5223 daily9370.6%103+1.1%
Umeå – VaasaNLK 6302 daily6251.7%87-2.2%

Yield index by route and week

Yield index 100 = route budget 
W24
W25
W26
W27
W28
W29
W30
W31
W32
W33
W34
W35
W36
W37
W38
W39
NLK 101Stockholm – Helsinki
NLK 204Trelleborg – Rostock
NLK 310Kapellskär – Mariehamn
NLK 415Gothenburg – Frederikshavn
NLK 522Ystad – Świnoujście
NLK 630Umeå – Vaasa
55170

06How it fits

We read. You decide. Nothing of ours writes a fare.

You keep the booking system you already run. We take a read-only copy of what it already knows, and hand back a number your team or your system can act on.

  1. 1

    Nightly, read-only

    A job reads what changed since last night over a read-only account, or from files you drop if your IT will not open the database. It lands raw before anything interprets it, so a mapping error is replayed against our copy instead of costing you another extract.

    • Your Postgres, SQL Server or MySQL
    • SFTP or object storage
    • Reconciled against your own totals
  2. 2

    The console, for your revenue team

    Every departure a hundred days out, ranked by where the money is. Open one and you get the band, the pace against comparable sailings, the price ladder so far, and how much demand was turned away last time it sold out.

    • Forecast bands per departure
    • Filter by potential, sell-out risk or date
    • Every figure traceable to the model version behind it
  3. 3

    The API, for your systems

    Operators with their own IT do not want a second screen. They pull a recommendation per departure and product each morning, put it into their own approval flow, and tell us what they did with it. That last part is what lets us show, on your data, whether following the recommendation paid.

    • One contract for every operator, your codes echoed back
    • Your floors, caps and max step enforced server-side
    • Advisory first, automatic within your limits later
Read-only

Nothing on our side writes a fare, releases capacity or touches a booking. If we are down, you keep selling on yesterday’s prices and fetch again tomorrow.

ERP and finance

We read the revenue plan and actuals. Nothing is written back.

  • SAP S/4HANA
  • Microsoft Dynamics 365
  • Infor M3
  • IFS Cloud

Booking and departure systems

Capacity and live bookings in. Price changes stay yours to make.

  • Carus CRS
  • Paxport
  • Hogia Ferry
  • Your own booking flow

Warehouses and streams

Read straight from the warehouse you already run.

  • Snowflake
  • Databricks
  • Azure Synapse
  • Apache Kafka

Transport and formats

Start with files, move to streaming when volume justifies it.

  • REST
  • OData v4
  • SFTP / CSV
  • Webhooks
  • Isolation per operatorEvery dataset is bound to a tenant and filtered in the database layer. With no tenant context, zero rows come back isolation is fail-closed, not dependent on every query being written correctly.
  • Your models, your storageModel artefacts and forecasts live under a per-operator prefix. Your data trains your models. No model is shared across customers.
  • Traceable decisionsEvery recommendation traces back to a model version, its inputs and a timestamp and rolls back without retraining.
  • Read-only by designWe hold read access and nothing more. No code path from us changes a fare, releases capacity or touches a booking the platform cannot act on your behalf even by mistake.

07FAQ

The questions that decide it

How much history do you need?

18–24 months per route gives stable seasonal patterns. Twelve works, but the intervals widen and routes with little history borrow structure from comparable ones.

What happens when reality stops resembling history?

Drift detection compares incoming demand against the forecast distribution. On sustained deviation the intervals widen, recommendations are damped and the departure is flagged for review rather than the model carrying on with false confidence.

Does the system change our prices?

No. Our integration is read-only in both directions of meaning: we read your data, and we never write to your systems. You get the forecast, the recommended fare and the reasoning in the dashboard or over the API and your team decides what to do with it in the booking or payment system you already use.

How is this different from our BI reports?

BI describes what happened. This estimates what happens next and recomputes what the next unit sold is worth. The difference is displacement cost what you lose by selling cheap now instead of dear later.

See it against
your own sailings

Bring one route and a year of booking history. We show you the forecast it would have produced, and what it would have been worth.

Book a walkthrough