![]()
To track bookings as conversions, fire one event only when a payment or reservation is confirmed, give it a unique booking ID, mark it as a key event in Google Analytics 4 (GA4), and import it into Google Ads. Count phone calls and enquiry forms as separate, lower-value conversions. Then test with a real booking before you spend another dollar on ads.
That sounds simple. The trouble for most escape rooms is that the booking happens inside an embedded calendar or on a hosted page, so your website never sees the sale. This guide covers what to count, how to track a booking made in a widget, how to wire up GA4, Google Ads and Tag Manager, and how to keep the numbers honest.
TL;DR
- Track the confirmed booking (the paid or reserved slot), not the click on “Book now” or a visit to the calendar.
- Add two supporting conversions: phone calls and enquiry forms (private events, corporate groups). Give them a lower value than a booking.
- Send a unique booking ID with every purchase event so a refreshed confirmation page never counts twice.
- Import GA4 key events into Google Ads, then test with a real booking in preview mode before you rely on the data.
- Read the numbers with their limits in mind: conversion windows, cancellations and no-shows all change what “a booking” is worth.
Table of Contents
- What counts as a booking conversion
- Where the conversion fires: your site or the booking page
- Setting up GA4, Google Ads and Tag Manager
- Testing, and stopping duplicate bookings
- Counting method: every booking or one per click
- Cancellations, refunds and changes
- Reading the data, and its limits
- Our perspective
- Put it into practice with Riddlio
- FAQ
- Sources
What counts as a booking conversion
A conversion is a completed action you would pay to get more of. For an escape room, the one that matters most is a confirmed booking: a player group has picked a room, a date and a time, and either paid or secured the slot.
Google Analytics recommends the purchase event for a completed purchase. It also lists events for the steps before it: view_item or view_item_list, select_item, begin_checkout and add_payment_info, plus generate_lead for form or information requests and refund when money goes back to a customer (GA4 recommended events). Those names map neatly onto a booking journey:
| Booking step | GA4 event | Treat as conversion? |
|---|---|---|
| Viewing the list of rooms | view_item_list |
No, a funnel step |
| Opening one room | view_item |
No, a funnel step |
| Choosing a date and time | select_item |
No, a funnel step |
| Entering the checkout | begin_checkout |
No, but a useful drop-off point |
| Adding card details | add_payment_info |
No, but shows payment friction |
| Booking confirmed | purchase |
Yes, your primary conversion |
| Private event or corporate enquiry sent | generate_lead |
Yes, a secondary conversion |
| Booking refunded | refund |
Used to correct revenue |
Keep the funnel steps as ordinary events. Only the last rows should drive ad bidding. If you mark every step as a conversion, Google will optimise towards people who click around rather than people who book.
The three conversions most venues need
Most escape rooms get bookings from three routes, so track three actions:
- Online bookings. The
purchaseevent on confirmation. - Phone calls. Google Ads separates clicks on a phone number from actual calls, and supports conversion actions for calls from ads, calls from your website and calls imported through uploads (Google Ads help on phone number clicks). A tap on a number is not a booked game, so set a minimum call length if you count calls.
- Enquiry forms. Birthday parties, team-building days and school groups often start as a form. Fire
generate_leadwhen the form is submitted successfully, not when the page loads.
Give each a different value. A confirmed $180 booking is worth its actual revenue. A form lead is worth what a lead is worth to you: if one in four becomes a paid event averaging $400, that is roughly $100, a figure you should calculate from your own records.
Where the conversion fires: your site or the booking page
This is the step that trips up most venues. There are two common setups.
Setup A: the booking happens on your own domain. Your checkout ends on a confirmation page that only appears after payment. Google’s own guidance for tracking a purchase is to use a URL reached only after the conversion, such as a confirmation or thank-you page (Google Ads, set up conversion tracking). Fire your tag there and nowhere else.
Setup B: the booking happens in an embedded widget or on a hosted page. The sale occurs inside an iframe or on another domain, so your site’s tag cannot see it. There are three ways round this:
- The booking tool sends events to your page, using the
dataLayeror apostMessage, and Tag Manager turns those into GA4 events. - The booking tool has a native GA4 or Google Ads integration that you switch on with your measurement ID.
- The booking tool redirects the customer to a confirmation URL on your own site after payment, and your tag fires there.
Whichever you use, check cross-domain behaviour. If the player moves from your site to a hosted page and back, make sure the session carries across, or every booking will show up as “direct” traffic and your ad campaigns will look like they never worked.
This is also where the choice of booking software matters. A white-label widget that lives on your own pages and passes events to your tag layer makes tracking far easier than a redirect to someone else’s domain. Our white-label booking widget is built to sit inside your site for that reason, and our guide on safe widget customisation covers testing changes before they go live.
Setting up GA4, Google Ads and Tag Manager
The cleanest chain is: booking event, then GA4, then Google Ads. Tag Manager sits in the middle and handles the wiring.
![]()
Step 1: Send the purchase event with the right data
At confirmation, push one purchase event containing:
transaction_id: your unique booking reference.value: the amount actually paid, in US dollars.currency:USD.items: the room name and number of players, if you want room-level reporting.
Use the money the customer paid, not the list price, so discounts and vouchers are reflected. If you sell gift vouchers, send them as a separate item or event so they are not confused with a played game.
Step 2: Mark it as a key event in GA4
In GA4, an event only becomes a conversion measure once you mark it. After Analytics has received the event, you can mark it as a key event, and new events may take a while to appear in the list (Mark events as key events). Mark purchase and generate_lead. Leave the funnel steps unmarked.
Step 3: Share the key event with Google Ads
Link your GA4 property to your Google Ads account. Key events can then be shared with Google Ads as conversions so you can judge ad performance and optimise bidding (Create conversions in Google Ads from Google Analytics). Choose purchase as the primary action for bidding. Set lead and call conversions as secondary so they appear in reports without steering your budget.
If you prefer to track in Ads directly, create a conversion action with Tag Manager, trigger it on the same confirmed-booking event, and avoid also importing the GA4 version of it as a primary action. Running both as primary is the most common way to double count.
Step 4: Capture where the booking came from
Conversion tracking tells you that a booking happened. Campaign tagging tells you which campaign caused it. Use consistent UTM parameters on every link you control: ads, email, social profiles and partner listings. Our guide to UTM tracking for escape room bookings gives a naming convention that keeps reports readable, and the one for a Google Things to Do listing shows how to tag that traffic source.
Testing, and stopping duplicate bookings
A tag that looks right in the editor can still fail in the real world. Test before you trust it.
- Open Tag Manager’s preview mode (or Tag Assistant) and walk through your booking flow from an ad-style landing page.
- Make a real low-cost booking, or a test booking if your system supports it, and confirm the
purchaseevent fires once, with the correct value and ID. - Check that the event reaches GA4’s real-time or debug view, then, after processing time, that the conversion appears in Google Ads.
- Refresh the confirmation page and go back and forward. The event should not count again.
- Repeat on a phone, since most escape room bookings now start there.
For duplicates, the fix is a transaction ID. Google Ads uses a unique transaction ID per purchase to minimise duplicate conversions, and reusing an ID can cause undercounting (Use a transaction ID to minimize duplicate conversions). Your booking reference is the natural choice, as long as every booking gets a different one.
If you use enhanced conversions, which send hashed customer data such as an email address to improve measurement, Google provides a diagnostics report that lets you confirm they are working after setup (enhanced conversions diagnostics). Only collect and send data in line with your privacy policy.
Counting method: every booking or one per click
Google Ads lets you choose how many conversions to count after one ad click. The “Every” setting counts each conversion after an interaction and suits sales where every sale adds value; “One” suits lead generation where only one lead per click matters (About conversion counting options).
For escape rooms that means:
- Bookings: Every. A person who clicks an ad and then books two rooms, or books again for a friend’s group a day later, has produced real revenue each time.
- Enquiry forms and calls: One. Someone who submits the party enquiry form three times is still one lead.
Value per booking also matters. A group of eight booking a premium slot is worth more than two players on a quiet Tuesday, so send the actual value rather than a flat number. If you want to think harder about pricing tiers and how they feed conversion value, the practical rules for ticket tiers are a good example from the live events world.
Cancellations, refunds and changes
Online ad platforms count a booking the moment it is made. Your business only keeps the revenue if the group turns up or the booking is not refunded. Plan for the gap.
- Refunds. Send a
refundevent to GA4 with the same transaction ID so revenue reports net out. Google Ads conversion adjustments can also be used to retract or restate a conversion value; check the current options in Ads help before relying on them. - Reschedules. A changed date is not a new sale. Do not fire a second
purchasefor it. Update the booking in your system and leave the conversion alone. - No-shows. These never appear in ad data. Compare conversions in Ads with players actually checked in, and your real cost per played game will be visible. Reminders cut no-shows directly, which is why automated SMS reminders and a well-designed booking form belong in the same conversation as tracking.
A simple monthly check: add up ad-attributed conversions, subtract refunds and cancellations, and divide ad spend by what remains. That is the number to compare across months.
Reading the data, and its limits
Once tracking is clean, the same data answers real operating questions.
Which campaigns fill rooms? With Ads linked to GA4, compare conversions and value per campaign, then move budget towards the ones producing paid bookings, not just clicks. Look at return on ad spend (revenue from conversions divided by cost) by campaign, and by room if you send item data.
Which slots stay empty? Overlay conversions by day and time with your calendar. If weekday evenings convert well from a campaign but are already full, your problem is capacity. If they convert poorly, it is the offer or the price. Dynamic pricing and targeted promotions for slow slots work from this kind of data.
What are the limits?
- Conversion windows. Google Ads credits a conversion only within the window you choose, so with a seven-day window a booking made eight days after the ad click is not credited (About conversion windows). Gift buyers and corporate planners often take longer than that, so consider a longer window for those campaigns.
- Walk-ins and word of mouth. Many players decide after a friend’s recommendation and then book directly. Your tracking will file them under direct or organic. Ask “how did you hear about us?” at booking to catch part of it.
- Consent. Where visitors decline analytics cookies, data can be missing. Google’s Consent Mode can send cookieless pings that Analytics uses for modelling when analytics storage is denied (Consent mode reference). That page describes behaviour in the European Economic Area; US rules vary by state, so confirm the requirements for the states where your players live and keep your privacy policy current.
- Modelled numbers. Treat small differences between Ads and GA4 as normal. Look at trends over weeks, not single days.
If your booking page converts poorly even though tracking is correct, the issue is the page, not the pixel. Our 30-day audit to improve booking conversion rate and the 90-day SEO sprint are the next reads.
Our perspective
Most escape room owners we talk to do not have a tracking problem. They have a split-system problem. Bookings live in one tool, payments in another, reminders in a third, and the ad account knows about none of it.
Our view is that conversion tracking should start from the booking system, because that is the only place that knows a slot was really sold, for how much, to how many players, and whether the group showed up. When the booking calendar, payments and customer messages share one record, the booking ID you send to GA4 is the same one you see in your reports and in your reminders. That makes duplicates, refunds and no-shows far easier to reconcile.
That is how we designed Riddlio: escape-room-native workflows such as player limits, multi-room games and waivers, flat monthly pricing with no booking commission, and one dashboard for bookings, payments and analytics. We would rather you measure the booking that matters than a click that does not.
Iosif Beraru
Put it into practice with Riddlio
If you want booking, payments, reminders and analytics in one place, Riddlio’s escape room booking software is built for exactly that. Plans are published on our pricing page: Starter is $29 per month, Pro is $79 per month and Unlimited is $199 per month, with Enterprise available on request.
If you are still deciding what you need from a system, start with our overview of the online booking calendar and how payment processing fits into it.
FAQ
What is the best conversion to track for an escape room?
The confirmed booking, sent to GA4 as a purchase event with the amount paid and a unique booking ID. Track phone calls and enquiry forms as secondary conversions with lower values, so ad bidding focuses on paid games.
Can I track bookings made in an embedded booking widget?
Yes, but the widget has to pass the event out. It can push to the dataLayer, send a message to your page, connect natively to GA4, or redirect to a confirmation page on your own domain. Test the full journey, because the sale happens inside the widget, not on your own page.
Why do my Google Ads and GA4 booking numbers differ?
They use different attribution, conversion windows and counting settings, and consent choices can remove some data. Make sure only one source is set as the primary conversion, check transaction IDs, and compare trends over several weeks rather than single days.
How do I stop one booking counting twice?
Send a unique transaction ID with every purchase event, and fire the event only once at confirmation. Then reload the confirmation page in testing to check that nothing is counted again.
Sources
- GA4 recommended events, Analytics Help
- Measure phone number clicks, Google Ads Help
- Set up conversion tracking, Google Ads Help
- Mark events as key events, Analytics Help
- Create conversions in Google Ads from Google Analytics
- Use a transaction ID to minimize duplicate conversions
- Enhanced conversions diagnostics report
- About conversion counting options
- About conversion windows
- Consent mode reference, Tag Manager Help
- Ticket tiers: practical rules for organizers
