Blog /

AI & Analytics

Hotel Ads Tracking: From First Click to Stayed Revenue

Hotel Ads Tracking: From First Click to Stayed Revenue

Hotel Ads Tracking: From First Click to Stayed Revenue

How to track and monitor hotel ads to stayed revenue: tag every click, carry it into your booking engine, and match bookings to PMS check-outs.

By Shahar Rubin, Co-founder

•

Independent hotel general manager checking the night's results with morning coffee

To track hotel ads properly, follow each click past the booking to the stay. Tag every ad link with UTMs, carry the visit into your booking engine with GA4 cross-domain tracking, send each booking to Google and Meta with its confirmation number, and match bookings to PMS check-outs every month. Then judge each channel on net room revenue from completed stays.

Key takeaways

  • Ad platforms count bookings when they are made, cancellations included. In Cloudbeds' 2025 data, 21.8% of OTA bookings and 10.6% of direct bookings were cancelled.

  • Send the booking confirmation number to GA4, Google Ads and Meta, so each stay in your PMS traces back to its ad.

  • Each week, check who bids on your name, your rate next to the OTAs, your booking path and brand CPC.

  • Your direct booking rate can fall while direct bookings hold. Rule out broken tracking, OTAs on your name and price gaps before blaming demand.

Why don't ad dashboards match your stayed revenue?

Because ad platforms stop counting at the booking. Google and Meta record a conversion when the booking is made and report whatever value your booking engine sends. Cancellations, no-shows and tax come later, so the dashboard shows more money than reaches your bank. The gap has three parts:

  • Cancelled bookings still count. Cloudbeds' 2026 State of Independent Hotels report (90 million bookings) found 21.8% of OTA bookings and 10.6% of direct bookings cancelled in 2025.

  • Tax rides along. If the booking engine sends the full total as the conversion value, occupancy tax and fees inflate every ROAS figure. That tax was never your revenue.

  • Stays come later. By default, as of October 2026, Google counts bookings up to 30 days after a click, and Meta up to 7 days after a link click or 1 day after a view. Guests booked 40 days ahead on average in 2025 (Cloudbeds), so many bookings counted this month stay, or cancel, next month.

Read any ROAS benchmark, including our Google Ads ROAS for hotels post, with that gap in mind.

Which hotel ad metrics matter for each channel?

Tracking hotel marketing performance means one funnel per channel: impressions, clicks, booking engine sessions, bookings, cancellations and no-shows, stays, and net room revenue. Platforms report the top half. The bottom half, which decides whether a campaign made money, lives in your booking engine and PMS. Measure ROI against stayed net room revenue.

Channel

What the platform reports

Judge it on

Red flag

Google Search (your name and area)

Clicks, CPC, conversions and value, by click date

Stayed net room revenue, cost per stay, winning your own name

An OTA in Auction insights on your brand terms; rising brand CPC

Google Hotel Ads and other metasearch

Clicks, cost, bookings and value (Google: last click only)

Stayed revenue per property, cost per stay, your rate next to the OTAs

Your rate in the "Not lowest price" bucket more often, or Price Accuracy problems

Meta (Facebook and Instagram)

Reach, CTR, CPC, purchases and value, including purchases after a view

Stayed revenue from bookings GA4 ties to a Meta click, cost per stay

Ads Manager purchases far above the Meta bookings GA4 shows

How do you set up hotel ads tracking?

In five steps: tag every ad link with UTMs, carry the visit into your booking engine with GA4 cross-domain tracking, send bookings to Google with the confirmation number, run the Meta Pixel and Conversions API together, and match bookings to PMS check-outs every month. The confirmation number ties them together.

Settings and limits below are as of October 2026.

1. Tag every ad link with UTMs

Google Analytics says to always use utm_source, utm_medium and utm_campaign, and values are case sensitive: utm_source=Google and utm_source=google count as two sources. Use one lowercase convention everywhere:

  • utm_source: the platform (google, facebook, trivago, kayak)

  • utm_medium: how you pay (cpc, paid_social)

  • utm_campaign: the job (brand_search, area_search, retargeting)

  • utm_content: the creative, so you can spot a tired one

Leave Google Ads auto-tagging on. It adds a click ID (GCLID) that GA4 reads ahead of manual tags. For UTMs on Google Hotel Ads, Google says to use a final URL suffix in Google Ads and leave the tracking template empty.

2. Carry the visit into your booking engine

If your booking engine sits on another domain, this step decides whether the rest works. Without cross-domain measurement, each domain sets its own cookies with new IDs, so GA4 sees a new visitor at checkout and the booking loses the ad that started it. Turn it on in GA4 under Admin, Data streams, your web stream, Configure tag settings, Configure your domains. Then check:

  • Both sites use the same Google tag ID.

  • Clicking into the booking engine puts _gl= in the URL. If a redirect strips it, the link breaks.

  • Your payment processor is on the unwanted referrals list.

Then have the booking engine send a GA4 purchase event with the confirmation number as the transaction ID. GA4 deduplicates purchases that share one, so a refreshed confirmation page counts once.

3. Send bookings to Google with the confirmation number

Google's conversion setup for hotel and Performance Max for travel goals campaigns has you put the Google tag on every page, including a third-party booking engine's pages, and fire a Purchase conversion on the confirmation page. Only value and currency are required. Add the confirmation number as the transaction ID, which Google recommends.

Google accepts the base price or the total price as the value. Send the base room price, so tax stays out of your ROAS. Hotel campaigns support only last-click attribution.

With the transaction ID in place, you can retract cancelled bookings for up to 54 days, though automated bidding only reads adjustments made within 7 days. A booking made 90 days out that cancels three weeks before arrival is past that limit. The PMS holds the final number.

4. Run the Meta Pixel and Conversions API together

Meta recommends the Conversions API alongside the Pixel. The Pixel fires in the browser; the Conversions API sends the same booking from your server or booking engine. Give both copies the same event name and event ID, ideally the confirmation number, and Meta counts one booking if the second copy arrives within 48 hours of the first.

Send Meta the same pre-tax room value. Campaign setup lives in our Facebook ads for hotels guide, and the same pixel feeds your retargeting audiences, so a broken one costs you twice.

5. Match bookings to PMS check-outs every month

A flag has an analytics team for this. For an independent, it is an afternoon with two exports, best done the week the OTA commission invoice lands.

  1. In GA4, export an exploration with Transaction ID, Session source / medium and Session campaign. Explorations only reach back as far as your data retention setting, and some of last month's stays were booked months earlier, so set it to 14 months, not 2.

  2. From the PMS, export last month's check-outs and cancellations with confirmation number and room revenue net of tax. If the PMS uses its own reservation number, include the booking engine's number too.

  3. Join them on the confirmation number. Each stay now carries its campaign, each cancellation its channel.

  4. Sum stayed net room revenue by channel and divide each channel's cost by its stays. Add OTAs as rows at their 18-25% commission.

Running a portfolio? Build it per property and roll up by channel, so one hotel's strong month does not hide another's leak.

What does stayed-revenue math look like?

Put one month of one campaign next to your PMS. The dashboard counts bookings at whatever value the booking engine sent. The PMS shows which became heads in beds and what room revenue they left after tax.

Say a brand search campaign reports 100 bookings of 3 nights at $150 a night, sent with 15% tax and fees. Eleven guests cancel, near the 10.6% direct average, and two do not show.

Line

Dashboard

Stayed

Bookings

100

100

Cancellations and no-shows

Not deducted

13

Completed stays

100

87

Value per booking

$517.50 with tax and fees

$450 net room revenue

Revenue

$51,750

$39,150

Cost on $4,000 of spend

$40 per booking

$45.98 per stay

About 76 cents of each dashboard dollar became stayed room revenue, and each stay cost 15% more than reported. Channels cancel at different rates, so run this on each one. Stayed room revenue is also what your RevPAR is built on.

How do you monitor hotel ads every week?

Hotel ad monitoring is a 30-minute Monday check, right after pickup and pace. Look for four leaks: an OTA bidding on your name (brandjacking), your rate losing to OTAs on metasearch, a broken booking path, and rising brand cost per click. Then confirm your tracking still fires.

  1. See who is on your name. Auction insights for your brand campaign lists the other advertisers in your auctions. A booking.com or expedia.com row means an OTA is in the auction for your name. Preview results with Google's Ad preview and diagnosis tool, since googling yourself adds ad impressions.

  2. Check your rate next to the OTAs. In Hotel Center, the free booking link price parity tab shows when your free booking links land in the "Not lowest price" bucket, and by how much. Lose there and you lose the click before a guest sees a photo. Check the Price Accuracy report too.

  3. Book your own hotel on a phone, as far as the payment page. In GA4, a day with booking engine sessions and zero purchases is your alarm.

  4. Watch brand cost per click. Clicks on your own name should be cheap and steady. A jump is your cue to reopen Auction insights.

  5. Confirm tracking fires. In Events Manager, bookings should arrive from both the Pixel and the Conversions API. If Ads Manager purchases suddenly pull away from your booking engine's count, check the tags first.

The first check matters most. Google's trademark policy does not restrict using trademarks as keywords, and Booking Holdings alone spent $8.2 billion on marketing in 2025, mostly performance marketing on search engines (primarily Google), affiliates, metasearch and social media, per its annual report.

For the outside view, Sail's free comp-set snapshot shows competitors' ads, rates and online presence on one page.

Why is your hotel's direct booking rate declining?

Your direct booking rate is direct bookings divided by total bookings, so it can fall while direct bookings hold steady. Check, in this order: your tracking, OTAs on your brand searches, your price on metasearch, the booking path, and whether OTA share is rising for everyone.

Every booking that slides to an OTA is a guest you no longer own, and you pay the 18-25% on it.

  1. Volume or share? If direct volume held while OTA volume grew, the issue is OTA growth, not your website.

  2. Did tracking break? A drop that GA4 shows but the PMS does not points to a booking engine update, a lost _gl parameter, or bookings credited to your own domain.

  3. Is an OTA on your name? A new OTA in Auction insights means guests who searched for you can book through someone else.

  4. Are you losing on price? More time in the "Not lowest price" bucket means another seller shows a lower rate for your rooms. Look for leaking wholesale rates.

  5. Did the booking path break? Compare booking engine sessions with purchases weekly.

  6. Is the market moving? Cloudbeds found the OTA share of independent hotel bookings rose to 63.4% in 2025. Checks 1 to 5 are yours to fix.

Where Sail fits

Everything above is how you hold any marketing partner to account, including us. Sail runs Google Search ads on your hotel's name and area, Google Hotel Ads and metasearch on Trivago, Tripadvisor and Kayak, and Facebook and Instagram ads. We fund the ad spend. No stay, no pay - you pay only when a guest we brought completes a stay, billed on net room charges with no tax or add-ons, and no retainer or upfront fee.

That makes the pricing its own attribution check: if Sail did not drive a stay, Sail does not get paid. Purchase is not the finish line. Stayed revenue is. See how Sail Pay Per Stay works, or book a call.

FAQ

What is the best way to track direct booking performance?

Track it in your PMS, with GA4 supplying the campaign behind each booking. Each month, match website bookings to campaigns through GA4 transaction IDs, and report completed stays and net room revenue next to cancellations. Watch three numbers: direct booking rate, cancellation rate by channel and cost per stay.

What tools do hotel marketers use to attribute direct booking revenue to campaigns?

Mostly free ones: UTM-tagged links, GA4 with cross-domain tracking into the booking engine, Google Ads conversion tracking with the booking number, the Meta Pixel with the Conversions API, and PMS exports. A spreadsheet that joins GA4 transaction IDs to PMS check-outs does the attribution. Paid tools can automate the join but need the same IDs.

Can you see stays inside Google Ads or Meta Ads Manager?

Not by default. Both count a booking when it is made. Google Ads lets you retract a cancelled booking by transaction ID within 54 days. Meta reports purchases inside its attribution window. For stays by channel, rely on your monthly PMS match.

How often should you check hotel ad tracking?

Weekly for leaks and monthly for money. The 30-minute weekly check covers brand auctions, metasearch price position, a test booking, brand cost per click and Meta event health. The monthly PMS match gives stayed revenue and cost per stay by channel. Re-test cross-domain tracking after any website or booking engine change.

Share:

20 years of hospitality lessons. No fluff. No spam

Join 500+ hospitality pros getting our best growth playbooks.

Both

Hotel

Restaurant

Both

Restaurant

Hotel

See your competitors' ads, rates & reviews — Free hotel marketing audit →