Zerf home
Pablo Revale

By Pablo Revale

Your ROAS Deck and Your P&L Are Both Right

Four places hotel numbers break, one nobody instruments, and why the owners are correct to distrust the report.

July 31, 2026 · 7 Minutes

01

THE MEETING WHERE BOTH DECKS ARE RIGHT

You present a ROAS of 8. The owners’ P&L shows the property missed budget. Both documents are correct, and you are the one who has to explain the gap. Otelciro’s 2025 benchmark found that 82% of hotels run GA4 while only 23% have advanced e-commerce tracking and custom conversion goals configured correctly. That gap is the most expensive unpriced liability in hotel marketing, because everything downstream of it, budget allocation, channel mix, agency performance reviews, gets decided on its output. What follows are the four places the numbers actually break. None of them are anyone on your team being bad at the job. All four are wiring.

02

BREAK ONE: THE BOOKING ENGINE IS A DIFFERENT DOMAIN

The canonical hotel journey crosses two hosts, your website and your booking engine. Without cross domain measurement configured, GA4 treats that hop as a new session with a new source, and the source it records is your own site. One guest becomes two sessions, the conversion gets credited to a referral, and your top converting channel in the acquisition report becomes your own booking domain. The paid campaign that started the session gets nothing. The fixes are specific and unglamorous: configure both hosts in a single measurement stream so the linker parameter carries client ID and session ID across the hop, add your payment processor to the referral exclusion list, then verify by watching a real session in DebugView rather than trusting that a box is ticked. There is a fast diagnostic. Open Reports, Acquisition, Traffic acquisition, and look for your own booking domain in the referral list. If it is there, none of your channel numbers mean what the report says they mean.

03

BREAK TWO: THE NUMBER DOESN’T EXIST BY PROPERTY

The second break is the one that makes you look slow. Someone asks for performance by property and the honest answer is a week. In a portfolio this is nearly always a data modeling decision made years earlier by whoever installed the tag: every property on its own GA4 property, no shared dimension, no consistent event naming, no roll up, so a portfolio question requires manual export and reconciliation by hand. The alternative is boring and takes about a fortnight to set up. One stream, with property, brand, and region as registered custom dimensions. One event naming convention agreed across the agency, the revenue team, and in house marketing. A modeled layer in BigQuery for the questions GA4 was never built to answer. After that, by property is a filter and not a project.

04

BREAK THREE: THE WINDOWS DON’T MATCH THE BOOKING

Attribution windows ship configured for e-commerce, and hotels are not e-commerce. A resort booking can carry 30, 60, or 120 days of lead time between first impression and reservation, and a default lookback window truncates exactly the upper funnel spend you are trying to justify. The consequence is systematic rather than random: brand and retargeting look efficient because they sit near the conversion, and everything that created the demand looks worthless. Set the lookback deliberately, against how long your guests actually take to decide, which your own reservation data can tell you in an afternoon. Then check that your ad platforms and GA4 are not quietly using different windows and different models, because when they disagree, the number that reaches the owners is whichever one got pasted into the deck first.

05

THE ONE NOBODY RECONCILES: CANCELLATIONS

Here is the break that explains the first paragraph better than the three above, and almost nobody instruments it. GA4 records revenue at the moment of booking. Your P&L records revenue at the moment of stay. Between those two moments sit cancellations, no shows, modifications, and rate changes. In a market running a 25% cancellation rate, your marketing revenue is overstated by roughly a quarter, permanently, and it is overstated most in the channels that book furthest out. Nothing in a default setup will tell you. The fix is a refund or cancellation event sent back into GA4 with the original transaction ID, ideally server side from the PMS or CRS rather than from a browser, so the platform can subtract it from the campaign that earned the credit. Until that loop exists, your ROAS is a gross booking number wearing the costume of a revenue number, and the owners are right to distrust it.

06

AND IT BREAKS SILENTLY, USUALLY AT A LAUNCH

The second unconsidered problem is timing. Measurement does not degrade gradually. It breaks at discrete events, and the events are predictable: a site migration, a booking engine change, a new agency, a consent platform update. It breaks silently because a broken tag throws no error. It just reports a smaller, cleaner, more flattering number. Two habits cover most of it. Treat tracking as a release gate, with a documented set of events that must fire before a launch is signed off. Re-verify after every vendor change, because the day your booking engine updates its domain is the day your attribution quietly resets.

07

WHERE WE’VE DONE THIS

With Boutique Homes, listing around 1,500 homes, the work was explicitly analytics led. We diagnosed the brand and customer needs, planned against user data, and improved continuously against measurement rather than opinion, reaching roughly 12,000 monthly users and more than 70 new bookings per month. On the Sandals website, instrumentation was part of the platform rather than a phase after it, on a site carrying over a million monthly users. On the advisor portal the same requirement applied to a platform doing 600 million dollars in sales, where a measurement gap is not a reporting inconvenience. We also published a GA4 best practices guide for hotels with Stephanie Smith of Cogwheel Marketing, which walks through the cross domain and event naming setup above step by step. The same discipline shows up in smaller work. On a boutique property with healthy traffic and heavy drop off on room pages, we isolated one variable, improved image quality, ran it as an A/B test, and kept the version that increased bookings. That is only possible when the measurement underneath it can be trusted, which is the entire point of the four breaks above.

08

IF YOU WANT TO KNOW WHICH OF THE FOUR YOU HAVE

We run a free scan that checks these specific failure points against your live setup and sends the findings by email. No call required to receive it. If your setup is clean, we will tell you that too.

Author

Pablo Revale

Pablo Revale

CEO & Co-founder at Zerf.