Direct bookings and websites

How can an Irish hotel measure completed direct bookings across its website and booking engine?

A guest may discover your Galway hotel through a campaign, browse your website and finish booking on another domain. Reliable measurement must connect that journey to an actual confirmed reservation.

Quick answer

Count a booking only when the booking engine confirms it. Send one purchase event with a unique, non-identifying transaction ID and a defined EUR value, subject to analytics consent. Connect the website and engine through supported cross-domain measurement, then reconcile recorded bookings and later cancellations against your reservation records. A booking-button click is not a completed booking.

Define a completed direct booking

For this hotel booking engine conversion tracking plan, a completed booking means an accepted reservation with a confirmation record. It can be payable later. Your property management system (PMS) remains the reference for reservation status.

  • Exclude availability searches, payment attempts, enquiries and provisional holds.
  • Count one confirmed reservation once, including when it contains several rooms. Agree the same counting unit with reception.
  • Report by booking creation date, using Europe/Dublin time consistently. Keep stay dates, deposits and completed stays separate.

A practical booking measurement plan

Hypothetical example: a Galway hotel records one two-night reservation at €150 per night excluding VAT, with no extras or discounts. Its measured booking value is 2 × €150 = €300. These are illustrative figures, not a market rate or tax calculation.

Proposed Google Analytics 4 (GA4) purchase specification
Field or controlProposed setupValidation
Event and triggerpurchase, after the engine creates a confirmed reservation.A failed or abandoned booking sends no purchase.
Unique booking IDtransaction_id: an opaque analytics-only token, such as bk_7f92c1.Stable for this reservation; different for every new reservation; never blank.
Currency and valuecurrency: EUR; numeric value: 300.Match the confirmed amount excluding VAT, not the deposit or a displayed currency conversion.
ItemsOne item: item_id: ROOM_STANDARD, price: 150, quantity: 2.Here quantity means nights. Item totals equal €300; no guest-specific item labels.
TaxUse the reservation's actual VAT amount in tax when supplied.Keep tax outside value; never invent a rate.
ConsentThis plan blocks analytics requests until valid analytics consent is present.Refusal and withdrawal stop tracking on both domains; booking remains possible.
DeliveryChoose one authoritative purchase sender.Refresh, back navigation and retries do not add bookings. Test browser and server duplication if both exist.

This is an implementation specification, not a claim about a built-in RoomRaccoon integration. Google's purchase parameters define the item and value structure; its transaction-ID guidance explains purchase deduplication.

Exclude guest names, email addresses, telephone numbers, postal addresses, free-text requests, card data and payment tokens from analytics payloads. Never use a booking-management access code as the transaction ID. Keep any token-to-reservation mapping access-restricted within your operational systems; treat linkable tokens as pseudonymous personal data, not anonymous data.

Connect the website and booking engine

Cross-domain measurement preserves a consenting visitor's journey across separate domains. Follow Google's cross-domain setup with your website developer and engine provider.

  1. Map the website, engine, confirmation page and payment-return route. Confirm that both website and engine support the same GA4 web-stream measurement ID.
  2. In the web stream, open Configure tag settings, then Configure your domains. Add the participating website and engine domains with appropriate matching rules.
  3. Follow a real booking link after consenting. Check that the _gl linker parameter survives redirects and that the same client and session identifiers reach the engine during the test.

Test campaign attribution through a completed reservation. The hotel website, engine or payment provider should not unexpectedly replace the original source. A referral exclusion alone does not connect visitor identities. Keep campaign tags on incoming marketing links, not internal booking buttons.

Validate before using campaign reports

  • With consent, complete a test reservation on desktop and mobile. Inspect the event and parameters in GA4 DebugView and the browser's network requests.
  • Repeat with consent refused, then withdrawn: this plan should send no analytics requests afterwards.
  • Refresh the confirmation and repeat the payment return. Verify one transaction; a second genuine booking must have a new ID.
  • Compare recorded transaction IDs and EUR totals with the authorised reservation extract. Match booking dates and value definitions; document consent gaps, blockers and missing confirmations.

Separate cancellations from refunds

Maintain a reconciliation list with the analytics token, original booking value, latest reservation status and cancellation date. Do not send another purchase when a reservation changes. Hypothetically, ten €300 bookings produce €3,000 of booked value; cancelling two leaves eight bookings worth €2,400, assuming no other changes or retained charges.

A cancellation without money returned is not a refund. If implementing Google's refund event, use the original transaction ID and actual refunded value, with tax separate and consent handling reviewed. A refund does not erase the original purchase count. Keep cancellation-adjusted booking value distinct from cash refunded and accounting revenue.

Apply the plan with RoomRaccoon

The RoomRaccoon booking engine accepts direct reservations; its hotel reporting tools provide booking and financial information. Ask the team to demonstrate your confirmation event, available identifiers, consent controls and export fields. Confirm which configuration, integration or developer work your property needs.

Bring this measurement plan and a sample booking journey to your demo.

Book a demo for your property

Direct booking tracking FAQs

Can paid advertising generate a direct booking?

Yes. Direct booking describes the reservation channel: the guest books with your hotel. Analytics “Direct” describes a traffic classification. A direct hotel booking can originate from paid search, organic search or email.

Can we measure an engine embedded in an iframe?

An embedded booking window needs provider-supported measurement inside the frame or a supported event bridge. The parent website cannot assume access to a confirmation on another origin. Test the actual implementation.

What if the provider offers no confirmation event?

Measure outbound booking clicks as clicks and reconcile confirmed reservations separately. Do not rename clicks as purchases. Request a supported confirmation signal before claiming complete booking conversion tracking.

Should analytics match every PMS booking?

No. Refused consent, blockers, telephone reservations and other channels create differences. Explain the measurement coverage and investigate gaps within comparable bookings instead of forcing analytics to equal the full reservation total.

Sources and checks

Checked on 13 November 2026. The worked example is hypothetical; implementation requires verification on the property's own booking journey.