14.3% lower CPA: eliminating “phantom ROAS” for a luxury hotel group with server-side tracking | Stape Care

Oleksii Stozhka

Oleksii Stozhka

Author
Published
Jun 11, 2026
i

Key takeaways

  • A luxury boutique hotel group approached the Stape Care team with a significant data disconnect between its Google Ads reports and actual revenue. The issue was caused by a client-side tracking setup that could not account for the client’s high offline cancellation and modification rates. Google Ads was simultaneously missing valid bookings and retaining ghost conversions from canceled stays.
  • The resulting "phantom ROAS" forced Smart Bidding to optimize toward unrealized revenue, misallocating ad spend across cancellation-prone user segments.
  • Shifting to the server-side architecture (utilizing the custom subdomain coupled with Custom Loader and Cookie Keeper power-ups) effectively bypassed ITP restrictions and ad blockers, increasing valid tracking coverage by 17.1%.
  • The Stape Store database acted as a data bridge to match offline Property Management System (PMS) webhooks with pre-saved web session cookies, which spared the client’s IT team from costly database restructures.
  • PMS webhooks and Google Ads Conversion Adjustments automatically retracted canceled bookings and restated modified reservations, which kept reporting and bidding data aligned with real business outcomes.
  • Delivering precise cancellation and modification data to Google within the critical 7-day window stopped the algorithms from over-indexing on risky user segments. This dropped the true cost per acquisition (True CPA) by 14.3% and maximized direct profit margins.

Strict browser privacy features and ad blockers can introduce serious data discrepancies. A luxury boutique hotel group approached Stape Care after losing clear visibility into its actual conversion volumes. This problem was also coupled with "phantom ROAS," i.e., inflated return figures driven by their flexible booking policy, with cancellation and modification rates reaching 10-20%.

The hotel group asked the Care team to align its Google Ads performance metrics with its internal revenue reports as closely as possible, while maintaining strict compliance with the consent regulations.

Challenge: the "phantom ROAS" trap

At the time, the hotel group was relying on traditional client-side Google Ads tracking. Its setup treated the initial reservation confirmation page (/booking-confirmed) as a signal of final revenue. So whenever a guest booked a luxury suite, a corresponding purchase record was permanently recorded in Google Ads reports.

However, high-net-worth travelers can often cancel or modify their stays offline (via phone, or through travel portals) weeks after that initial click. Since those changes never fed back into Google Ads, a significant gap accumulated between backend data and reported ad performance.

This disconnect was driven by two key issues:

  • Not all conversions covered: different privacy extensions, ITP restrictions, and ad blockers were interfering with frontend tracking scripts and cookie storage, which caused Google Ads to miss a meaningful share of actual reservations.
  • Cancellations not accounted for: the conversions that Google Ads successfully captured were never adjusted for offline cancellations.

This forced Smart Bidding to aggressively spend premium ad dollars chasing incomplete data and optimize toward a significant amount of "ghost conversions." 

Audit: quantifying the disconnect

To determine the scale of the discrepancy, Stape Care ran a technical audit comparing actual figures from the hotel group's backend PMS, filtered strictly to display CPC-originated traffic only, against data reported in their Google Ads UI.

The audit confirmed that Google Ads reports were heavily distorted. A significant portion of total bookings went untracked, and the conversions that were captured carried no correction for the roughly 15% that were eventually canceled.

Metric (45-Day Audit Window)Google Ads UI ReportsPMS Backend (CPC Traffic Gross)PMS Backend (CPC Traffic Net / Cash Flow)
Recorded Revenue$139,500$204,000$172,500
Logged Conversions93 reservations136 reservations115 reservations
Reported ROAS6.98x (Skewed)10.20x (Unrealized)8.63x (True Yield)

The breakdown of tracked conversions:

To understand the full impact, the Care team examined the 93 reservations ($139,500) that Google Ads did successfully track via the web configuration:

  • Only 79 of those tracked bookings actually resulted in guest stays, representing $118,500 in true net revenue.
  • The remaining 14 bookings (15% of the tracked volume, representing $21,000) were later canceled offline. Since Google Ads never received the backend cancellation data, that unrealized revenue remained permanently in its reports.

In other words, Google Ads was missing 43 entirely valid gross bookings, while simultaneously optimizing its algorithms toward 14 "ghost" reservations that brought no value to the business.

Solution: setting up a server-side tracking configuration

To minimize the data gap, the Stape Care team updated the client’s tracking setup by moving Google Ads configuration to the server side and integrating webhooks sent from its PMS backend whenever a reservation was canceled or modified.

Stape Store bridging mechanism

To make sure the Smart Bidding AI received complete data, passing the original gclid back into the system during any revenue adjustment was recommended. This gives Google additional context about the search query, device, audience profile, and the time of day associated with the initial click, which allows the algorithm to identify and prioritize the specific characteristics of high-value guests who actually checked in.

Instead of asking the client to modify the hotel's internal database to store marketing cookies alongside booking records, the Care team used the Stape Store database, a solution built directly into the Stape infrastructure.

Since the webhooks from the hotel group’s backend PMS didn't carry live browser cookies, Stape Store served as the data bridge between the available web session data and the offline events received later.

Here's how it works:

  1. Cookies are saved: when a purchase event fires, data is sent to the Stape server GTM container. All tracking identifiers (like the gclid) get extracted.
  2. Cookies are written to the Stape Store: the server container instantly writes a record to Stape Store, saving the browser cookies under a unique booking reference key.
  3. PMS backend sends a webhook: when a reservation state changes, the hotel's PMS triggers an outbound webhook to Stape that passes the reservation status change (booking_canceled or booking_modified) alongside the original booking reference.
  4. Event payload is populated with pre-saved data: on receiving the webhook, the cookie values associated with that booking are retrieved from Stape Store using a dedicated Stape Store Lookup variable.

Implementation specifics on the server container

Once the webhook is received, the Google Ads Conversion Adjustments server tag fires, with the transaction ID and retrieved cookie data included directly in the event payload. The tag executes specific actions based on the incoming event type:

  • booking_canceled: triggers a RETRACTION action. For Hotel Ads, if processed within the 7-day window, it instructs Google's Smart Bidding AI to completely remove that conversion's influence from the active ad group. If processed between days 8 and 55, it clears the “phantom” revenue from UI reporting columns.
  • booking_modified: triggers a RESTATEMENT action that passes the updated net value of the booking event (e.g., if a guest upgrades or downgrades room tiers). This guarantees Google Ads optimizes for actual profit margins rather than projected checkout values.

The results of two-phase implementation: sustainable tracking setup and clean reports

Stape Care analyzed performance over a 45-day post-implementation period. The PMS backend figures below also reflect verified CPC-originated traffic to maintain an accurate baseline.

Metric (Post-Implementation)Google Ads UI Reports (Adjusted & Restated)PMS Backend (CPC Traffic Gross)PMS Backend (CPC Traffic Net / Cash Flow)
Recorded Revenue$162,000$217,500$189,000
Logged Conversions108 net reservations145 reservations126 reservations
Reported ROAS8.10x (Accurate to Tracked Volume)10.87x (Unrealized)9.45x (True Yield)

Before resolving the canceled bookings processing, the shift to Stape's server-side architecture alone stabilized the core tracking infrastructure nearly instantly.

  • Utilizing the Custom Loader and masking the GTM load while routing tracking via a first-party subdomain immediately reduced tracking loss from browser restrictions and some extension-level blocking, where consent was present.
  • Activating the Cookie Keeper automatically restored tracking cookies via the server side, bypassing ITP restrictions in Safari and Firefox and extending active attribution windows to 90 days.

After the rollout, Google Ads successfully captured 124 total reservations ($186,000), which, with user consent opt-outs factored in, results in an 85.5% match rate against the 145 total backend CPC reservations for the same period. This represented an effective 17.1% increase in tracking coverage compared to the pre-implementation baseline of 68.4%. That said, this gross figure still included the ~13% of bookings that would eventually be canceled offline.

The ROAS fix results

Incorporating Stape Care's data adjustment logic on top of the corrected infrastructure allowed the hotel group to successfully align its Google Ads bidding behavior with actual property check-ins.

  • Minimal IT team involvement: cookie matching handled entirely within Stape Store meant the entire update took place inside the marketing layer, avoiding a costly database restructuring and management.
  • Reporting drifts eliminated: automated RETRACTION and RESTATEMENT data adjustments via Stape’s server-side Google Ads tag corrected the $186,000 gross tracking figure down to $162,000 in net realized revenue. Although Google Ads cannot capture 100% of physical booking volume due to consent opt-outs, the reports became materially accurate because canceled bookings were automatically removed or restated, carrying a 13% cancellation retraction.
  • Smart Bidding calibrated: delivering cancellation data within Google's critical 7-day window trained the automated bidding algorithms to stop over-indexing on unreliable, cancellation-risky user segments.
  • Efficiency gained: as reported revenue normalized to reflect actual realized bookings, the campaign's true CPA dropped by 14.3%, maximizing direct booking margins.

Why choose Stape

By setting up server-side tracking with Stape, you can:

  • Rely on expert support from a dedicated Google Tag Manager specialist to resolve complex data disconnects and build robust architectures.
  • Deploy ready-made solutions that reduce development overhead and eliminate the need for extensive custom coding.
  • Achieve sustainable tracking that bypasses ITP restrictions and ad blockers to reliably capture your true conversion volumes.
  • Automatically send cancellation and revenue adjustment signals back to Smart Bidding to calibrate ad spend against real business outcomes.
  • Maintain a privacy-compliant tracking infrastructure that supports consent requirements while preserving the data needed for reporting, attribution, and campaign optimization.
author

Oleksii Stozhka

Author

Oleksii is a Customer Care Specialist who helps businesses resolve complex tracking issues, optimize setups, and maintain reliable data collection to support growth and decision-making.

Comments

Try Stape for all things server-side