Intro
We worked with Luxury Boat Tours— a global, award-winning marine-tour operator running yacht cruises and guided snorkeling day-trips, with a category-leading product: a 4.9-star rating across 10,000+ reviews. The experience sold itself — but the growth engine didn't. Demand leaned heavily on the booking aggregators (the OTAs), an unhealthy dependence that quietly rented out margin the operator should have owned, while paid spend, especially on social, had burned budget with nothing to show for it and no one could read what any of it was doing.
This page is the Data & Analytics lens: the measurement layer underneath everything else — why the numbers couldn't be trusted, how we rebuilt the read, and why that was the first move, not the last. The channels it made legible live inPerformance Marketing; the funnel it made measurable lives in Funnel & CRO.
Meet the operator.
Luxury Boat Tours runs premium island day-trips — yacht cruises, manta snorkeling, cliff-view excursions, all-inclusive — with a category-leading 4.9-star rating across 10,000+ reviews, a wall of global awards, and strong organic and direct demand. The product is excellent and the brand is loved; the gap was never the experience — it was a growth engine that leaned too hard on the booking aggregators.
The gap was a read no one could trust. Bookings closed over separate messaging numbers that never flowed back to the ad platforms, paid touches went untagged, and there was no stage tracking from inquiry to booking — so every performance figure, high or low, was lying. They didn't need another agency handed the ad accounts; they needed the measurement rebuilt first, so the rest of the work could be steered by something real.
The challenge — a stack that lost the sale.
Here's the path a booking actually took — and where it broke. The conversion happened over messaging and never flowed back, so the platforms kept spending the budget blind.

The account didn't lack data — it lacked data you could trust. The chain from a paid click to a booking broke in five places, and a broken chain produces confident, wrong numbers.
- Bookings closed off-platform. Most conversions happened over separate messaging numbers that never reported back to the ad platforms — the moment of truth was invisible to the systems spending the budget.
- Every return figure was unreliable. With conversions missing, in-platform ROAS was wrong in both directions — flattering some campaigns, condemning others, and steering spend by noise.
- Paid touches went untagged. No consistent UTM structure across the channels, so even the touches that were tracked couldn't be tied to a source, a campaign, or an offer.
- No stage tracking, inquiry to booking. There was no scoreboard for how an inquiry became a conversation became a booking — so no one could see where the funnel actually moved.
- The aggregator leak was invisible. Because direct couldn't be measured cleanly, no one could see how much of the full-margin channel was quietly leaking to the OTAs.
Our approach — measurement before spend.
We didn't touch the budget for the first stretch. A dashboard built on broken attribution is worse than none — it makes confident, wrong decisions. So the first job was earning a read.
- Closed the loop where it broke — the messaging step. The chain snapped at the exact moment the booking happened, so that's where we worked first. We routed the scattered messaging numbers into a single tracked flow and wired stage tracking from inquiry through conversation to confirmed booking — so the conversion the platforms could never see finally flowed back into one place we could read.
- Tagged every paid touch and rebuilt the website's read. A conversion you can see is only half the loop — you also need to know what earned it. We deployed a consistent UTM structure across every paid touchpoint and rebuilt how the website tracks itself, so each booking carries its source, campaign, and offer all the way through to the CRM. That's what turns “a booking happened” into “this campaign earned it.”
- Validated the read against the operator's own baseline. A new measurement system has to prove it's telling the truth before anyone scales spend on it. Rather than trust in-platform ROAS — still unreliable in a messaging-led business — we measured the channel where the margin lives, direct website revenue, against the same window last year. That's a comparison the data can't flatter, and it's what makes the growth number defensible instead of hopeful.
The read, rebuilt — the loop that closes.
Before, the chain broke at the messaging step and nothing flowed back, so the platforms optimised blind. We rebuilt the path so the conversation returns to a tracked booking flow — and every step carries its source the whole way through.

The shift, before → after.
| Dimension | Before | After |
|---|---|---|
| The conversion | Closed over messaging, invisible to the platforms | Captured in one tracked flow and attributed to source |
| Attribution | Every return figure unreliable — spend steered by noise | Every booking traced end to end to the campaign that earned it |
| Tagging | No consistent UTM structure across channels | Every paid touch tagged — source, campaign, and offer carried through |
| Stage tracking | No read on inquiry → booking | CRM stage tracking from first inquiry to confirmed booking |
| The growth number | Unprovable — no baseline, no trustworthy read | Defensible — measured year over year, migration window excluded |
Results — the foundation, working.
The measurement layer is the result here — everything else in the engagement stands on it. Reported in relative terms and against the operator's own baseline.
Honest read: the loop is closed going forward, but it can't rewrite history — the pre-rebuild period stays partly dark, which is exactly why we report year over year rather than reconstructing old returns. And even now we set platform ROAS aside, because in a messaging-led business it still understates the bookings that close off-platform. The discipline is to measure what we can defend, and say plainly what we can't.
What rebuilding the read taught us.
- Fix the read before you fix the spend. — A dashboard built on broken attribution makes confident, wrong calls. Until the conversion flowed back through one tracked loop, every number lied — so measurement came before any budget moved.
- Close the loop where it breaks. — The chain snapped at the messaging step, so that's where we started. Find the exact link that's broken and rebuild it first — everything downstream depends on it.
- Measure against your own baseline. — In-platform ROAS can be flattered. A year-over-year read against the operator's own prior window can't — which is what makes the growth number defensible instead of hopeful.
- Be honest about what you can't see. — The read can't rewrite the past, and platform ROAS still understates messaging-led bookings. Saying so plainly is what makes the numbers you do report trustworthy.
A read that lied is now one tracked loop — every booking traced to the campaign that earned it, and a growth number that holds up.
The measurement came first, so everything built on top of it — the channels, the funnel, the margin defense — can be steered by something real. That's the foundation Month 2 compounds on.
Book a strategy call →The rest of the engagement.
Keep readingThis is one lens on the same build. SeePerformance Marketingfor the channels this read made legible andFunnel & CROfor the funnel it made measurable — or return to theoverview.