Skip to content
Solutions Blueprint

Salesforce Marketing Cloud Migration for a Passenger Ferry Operator

Hero featured image

A government-owned ferry operator ran email journeys, post-trip surveys and a loyalty voucher programme on Salesforce Marketing Cloud. The platform's rigid, siloed structure meant every campaign change depended on a specialist. We rebuilt the marketing automation natively in HubSpot Marketing Hub Enterprise ahead of a Salesforce licence expiry. It replaced 21 daily email journeys and the trip-count-triggered loyalty voucher with logic tied directly to the booking record on each Contact.

Executive Summary

context-header-icon

Context

A government-owned ferry operator ran its passenger marketing on Salesforce Marketing Cloud, alongside a Salesforce CRM nearing the end of its purchased licence term. Every email journey, post-trip survey and loyalty send ran on a platform the marketing team found rigid and siloed. Changing one campaign meant routing the request through a small group of specialists.

what-we-built-header-icon

What We Built

We rebuilt the operator's email marketing programme natively inside HubSpot Marketing Hub Enterprise. It replaced all 21 daily journeys that had run on Salesforce Marketing Cloud, and we rebuilt the loyalty voucher automation on a Bookings custom object tied to each Contact record.

tech-stack-header-icon

Tech Stack

  • Salesforce Sales Cloud, Salesforce Service Cloud, Salesforce Marketing Cloud, HubSpot Marketing Hub Enterprise, HubSpot Sales Hub Enterprise, HubSpot Service Hub Enterprise, HubSpot Data Hub Enterprise, HubSpot Smart CRM Enterprise, Bookings custom object

Not a fit if your CRM and marketing platform migration has no hard licence-expiry deadline forcing a fixed cutover date, because the sequencing here assumes a fixed window and not an indefinite parallel run. Also not a fit if you don't already hold Enterprise-tier hubs across marketing, sales and service, since the rebuilt journeys and loyalty automation depend on features gated to that tier.

the-challenge-header-icon

The Challenge

Salesforce Marketing Cloud held every one of the operator's email journeys, its post-trip survey sends, and the loyalty voucher logic that tracked how many trips a passenger had taken. The platform's rigid, siloed structure meant a change to one journey needed someone who understood its configuration. So day-to-day optimisation of 21 daily sends depended on a small group of Marketing Cloud specialists, not on the marketing team itself.

A Salesforce licence due to expire within months turned that dependency into a deadline. The CRM data underneath the journeys, and the survey and loyalty logic built on it, all had to move before the licence lapsed. That meant we couldn't treat the loyalty voucher and the 21 journeys as one open-ended migration. Each had to go live against the deadline while the existing Marketing Cloud sends kept running.

our-approach-header-icon

Our Approach

We couldn't treat the Salesforce-to-HubSpot cutover as a lift-and-shift of the existing Marketing Cloud configuration, because the deadline left no time to debug a rebuilt copy of a platform that was already being retired. Instead we rebuilt each of the 21 daily journeys natively in HubSpot Marketing Hub Enterprise, triggered off the same post-trip survey sends and scheduled sends the programme used. We keyed each one to the booking and trip record tied to the Contact, not to a Marketing Cloud data extension.

The loyalty voucher logic moved onto a Bookings custom object. A workflow trigger fires when a contact's cumulative trip count crosses a threshold, and a separate gate checks voucher eligibility before the voucher is issued. That replaced a scoring model inside Marketing Cloud's journey builder. We carried the post-trip survey sends across as their own journeys, so the eligibility gate stays specific to the voucher and isn't shared logic that a future survey change could break.

We built the trigger against the Bookings object rather than importing a snapshot of historical trip counts. The trade-off is that the voucher logic is only as current as the underlying bookings sync, but we never have to reconcile two trip-count sources again.

impact-header-icon

Impact

check-icon

Campaign changes stop waiting on a Marketing Cloud specialist

Each of the 21 daily email journeys now runs on HubSpot Marketing Hub Enterprise, built against the triggers the marketing team already worked with rather than a data extension only a handful of people could edit. The team can change a send or adjust targeting directly, because the rebuild removed the layer of specialist configuration the old siloed structure required.

check-icon

The loyalty voucher fires off live trip data instead of a snapshot

The Ten Trip Voucher programme now reads its cumulative trip count directly off the Bookings custom object tied to each Contact, so a passenger crosses the threshold and clears the eligibility gate against actual booking history rather than a periodically refreshed import. That keeps the voucher logic current with bookings as they happen, which the prior version couldn't do.

check-icon

Consolidated records sharpen who a campaign actually reaches

Migrating more than 92,000 contact records into HubSpot for real-time sync with the CRM gave the rebuilt journeys one consolidated data set to target from, rather than the marketing platform and the CRM holding separate, occasionally conflicting pictures of the same passenger. Targeting accuracy improved because the journeys read from the record the sales and service teams update, not a copy synced on its own schedule.

check-icon

One deadline cleared two platforms instead of one

Because the CRM migration and the Marketing Cloud rebuild shared the same licence-expiry deadline, we sequenced the journeys and loyalty automation to go live before the cutover rather than running a second migration later. The marketing team never operated against a CRM that had already moved while its journeys still waited on Marketing Cloud.

Technical Blueprint
1

Each of the 21 daily email journeys runs on the same post-trip survey sends and scheduled sends the programme used, rebuilt natively in HubSpot Marketing Hub Enterprise rather than imported as a configuration snapshot. Every journey keys off the booking and trip record tied to the Contact, so a send reflects the passenger's actual trip history rather than a value copied over in a prior sync.

2

The Ten Trip Voucher automation reads a cumulative trip-count property on each Contact and fires an event-based workflow when a passenger crosses the loyalty threshold. A separate eligibility gate checks the voucher rules before issuing it, keeping the trigger and the check as two distinct steps rather than one rule.

3

A Bookings custom object associated to the Contact record stores trip counts and booking history, replacing the trip data Marketing Cloud held in its own data extensions. The loyalty and journey logic both read from this object, so a booking recorded once updates every automation keyed to trip count.

4

The rebuilt journeys, the survey sends, and the loyalty voucher key off the same Contact record rather than three separate identifiers carried over from Marketing Cloud. Consolidating onto one key let more than 92,000 migrated contact records feed every journey without a separate matching step per automation.

Contact record linked to a Bookings object feeding HubSpot journeys and a loyalty voucher workflow that replaced Salesforce Marketing Cloud.

Salesforce Marketing Cloud is the retired source: its data extensions held the trip data and its journey builder ran the sends. In HubSpot, the 21 daily email journeys send post-trip and scheduled emails keyed to the booking record on each passenger's Contact. A Bookings custom object holds trip count and booking history, and when the cumulative trip count crosses the threshold, the Ten Trip Voucher workflow fires and a separate eligibility gate checks the rules before the voucher is issued.

FAQ

Why rebuild the marketing automation instead of migrating the existing Marketing Cloud configuration as is?

A straight migration would have carried over the same siloed structure that made changing a journey dependent on a specialist. The licence deadline also left no time to debug a rebuilt copy of a platform that was already being retired. Rebuilding each journey natively in HubSpot let us key every send to the Contact record directly, so a journey can be adjusted without routing it through anyone else.

What happened to the loyalty voucher programme during the migration?

The Ten Trip Voucher automation moved off Marketing Cloud's journey builder onto a Bookings custom object, with the cumulative trip count and the voucher eligibility gate built as two separate steps. That means a passenger's voucher status follows their actual booking history rather than a count Marketing Cloud calculated on its own schedule.

Continue reading

Hero featured image
209049082793

Luxury yacht manufacturer: CRM governance, 16.9% MQL-to-SQL

Hero featured image
209049052783

$500M+ telecom provider: one CPQ for MSP and ISP catalogs

Hero featured image
209049052785

Health insurance web broker: NPN hierarchies in HubSpot

Hero featured image
209049052787

$50M+ telehealth provider: HIPAA-compliant clinical ERP sync

Hero featured image
209049052787

$50M+ telehealth provider: attribution recovered via API fix

Hero featured image
209049052786

Environmental IoT provider: partner directory routes leads

Hero featured image
209053190299

$100M+ real estate tech firm: automated KYC gates and SSO

Hero featured image
209049052785

$1B+ financial data provider: Pardot and Eloqua into HubSpot

Hero featured image
209053177394

Global abrasives producer: 40+ sites from Kentico to HubSpot

Hero featured image
209049082792

Global abrasives producer: 13 dashboards consolidated to one

Hero featured image
209049052787

Medical device maker: five regional domains into one CMS

Hero featured image
209049052787

Medical device maker: automated clinical triage in HubSpot

Hero featured image
209049052787

Multi-site dental group: lifecycle logic rebuilt, true ROI

Hero featured image
209049052787

Multi-site dental group: assessment tool for lead quality

Hero featured image
209049082794

K-12 Catholic diocese: 80 schools on one HubDB lead system

Hero featured image
209049052787

Cell therapy biotech: HubSpot CMS migration, 92 speed score

Hero featured image
209049052787

Cell therapy biotech: 40-hour enablement and lead routing

Hero featured image
209049082794

Wellness training provider: 925k records moved to HubSpot

Hero featured image
209049052786

Cybersecurity trainer: 595 workflows audited for debt

Hero featured image
209049052785

Tier 1 auto F&I provider: 14,000% CTA lift, 21% PVR lift

Hero featured image
209049052785

Mexican retail bank: Infobip to Intercom via Apache NiFi

Hero featured image
209049052786

Global streaming platform: ETL middleware feeds Customer.io

Hero featured image
209049052786

Global streaming platform: usage milestones trigger upsell

Hero featured image
209049052786

Cloud and edge provider: Intercom to Salesforce via MuleSoft

Hero featured image
209049052785

$50M+ FinTech SaaS provider: advisor onboarding 30% faster

Hero featured image
209049082792

Mining autonomy provider: global consent and data governance

Hero featured image
209053177394

Industrial IoT division: compliant list purge, leads 3 to 62

Hero featured image
209053177394

Industrial IoT division: 25,000 records merged, one portal

Hero featured image
209049052786

Logistics SaaS portfolio: Salesforce sync rebuilt on Tray.io

Hero featured image
209049052786

Logistics SaaS portfolio: brands consolidated into HubSpot

footerCTA footerCTA-mobile
Spice up your inbox
Sign up for our newsletter
Don't worry - we only average, like, two emojis per subject line.