How do I track direct bookings in Google Analytics?
Short answer
To track direct bookings in Google Analytics 4, the same GA4 tag must run on your website and your booking engine, cross-domain measurement must be configured if the engine is on a different domain, and the booking confirmation must send a purchase event with a unique transaction ID, value, and currency. Most booking engines provide a GA4 integration — ask your provider what they support. Then test a booking end to end and regularly compare analytics bookings with your reservation system, because some differences are normal and large gaps signal a problem.
By Lodging Engine Editorial Team· Reviewed by Eric Zwanenburg· Last reviewed
Step 1: Understand your setup
- Same domain (e.g.
yourhotel.com/book): simpler — one tag across the site. - Different domain (e.g.
yourhotel.bookingengine.com): needs cross-domain measurement.
Without it, Google notes, a visitor moving between domains is counted as two users and two sessions, and the booking may be attributed to "referral" instead of the real source.
Step 2: Tag both sides
Google requires the tag on each domain to use the same tag ID from the same web data stream. Your booking engine provider usually lets you enter your GA4 measurement ID.
Step 3: Configure cross-domain measurement
In GA4: Admin → Data streams → (your web stream) → Configure tag settings → Configure your domains, then add your website domain and the booking engine domain. When the same tag runs on both, GA4 may recommend them automatically. You need Editor access or above.
Step 4: Send booking events
GA4's recommended ecommerce events include:
begin_checkout— when a guest starts the booking.purchase— on confirmation, withtransaction_id,value,currency, anditems.
Google's reference marks transaction_id as required for purchases and refunds. Using your booking reference makes it easy to match analytics with your reservation system, and to record cancellations with a refund event. Many booking engines send these events for you — confirm which events and parameters they send.
Step 5: Test
- Make a test booking (or use the provider's test mode).
- Check GA4's real-time or debug view for the events.
- Confirm the session keeps its original source (for example google / organic).
Step 6: Reconcile monthly
Compare GA4 purchases with your reservation system. Consent choices, blocked scripts, and cancellations mean they won't match exactly, but they should be close. A big gap means something's broken.
Common mistakes
- Booking engine tagged with a different GA4 property.
- Cross-domain not configured, so all bookings look like referrals.
- Purchase events firing twice on page refresh.
- Never testing after the engine is updated.
Checklist
- Same GA4 tag ID on website and booking engine
- Cross-domain measurement configured
purchaseevent with transaction ID, value, currency- End-to-end test booking checked
- Monthly reconciliation with reservations
Sources
- Set up cross-domain measurement — Google Analytics Help
- Measure ecommerce (GA4) — Google for Developers