For hotel web developers and marketing teams who want to connect the igumbi Internet Booking Engine (IBE) to their analytics or tag management platform.
How it works
The IBE fires tracking events at each step of the booking flow via the Obt.tracker() function. Each call pushes to every analytics provider that is active on the page simultaneously — GTM dataLayer, GA4 (gtag), Matomo, and Classic GA.
Tracking is gated by the hotel's ga_tracker setting. If analytics is not enabled for your hotel, contact igumbi support.
Booking funnel tracking events setup
| # | Event | Fired when | |
|---|---|---|---|
| 1 | av_form |
Availability search form is rendered | | |
| 2 | listrooms |
Room offers are shown to the guest | | |
| 2 | listrooms_no_offers |
Search returned no available rooms | | |
| 3 | validate |
Booking form submitted and passed validation | | |
| 3 | validate_fail |
Booking form submitted but has errors | | |
| 4 | finalize |
Booking submitted to server | |
Standard funnel: av_form → listrooms → validate → finalize
Google Tag Manager (GTM)
What the IBE pushes
javascript
window.dataLayer.push({
event: "ibe_finalize", // GTM trigger name — always "ibe_" + event name
ibe_event: "finalize" // raw event name for use in GTM Variables
});
Setup steps
Step 1 — Add GTM snippet to your page
Paste the GTM <script> block in <head> and the <noscript> block at the top of <body>, above the igumbi start.js script tag.
Do not add a separate gtag.js snippet — GTM handles the GA4 connection instead.
Step 2 — Open GTM
Go to tagmanager.google.com, open your container.
Step 3 — Create a Google Tag (base GA4 connection)
- Tags → New
- Tag type: Google Tag
- Tag ID: your GA4 Measurement ID (e.g.
G-XXXXXXXXXX) - Triggering: All Pages (built-in trigger)
- Name it:
Google Tag - GA4 - Save
Step 4 — Create a trigger for IBE events
- Triggers → New
- Trigger type: Custom Event
- Event name:
ibe_.* - Check Use regex matching
- This fires on: All Custom Events
- Name it:
IBE - All Events - Save
Step 5 — Create a GA4 Event tag
- Tags → New
- Tag type: Google Analytics: GA4 Event
- Measurement ID: your GA4 Measurement ID
- Event name: click the puzzle-piece icon → New Variable
- Variable type: Data Layer Variable
- Data Layer Variable Name:
ibe_event - Name it:
DLV - ibe_event - Save
- This pulls the raw event name (
av_form,finalize, etc.) from the dataLayer
- Triggering: IBE - All Events (the trigger from Step 4)
- Name it:
GA4 Event - IBE - Save
Step 6 — Preview and verify
- Click Preview (top right in GTM)
- Enter the URL of your page with the IBE widget
- GTM opens a debug window alongside the page
- Interact with the booking widget — search for rooms
- In the GTM debug panel you should see:
ibe_av_formfires → tagGA4 Event - IBEfiresibe_listroomsfires → tag fires again
- Click a tag name → Values tab → confirm
ibe_event=av_formetc.
Step 7 — Publish
Once preview looks correct:
- Click Submit (top right)
- Add a version name:
IBE tracking v1 - Publish
Events appear in GA4 under Reports → Events within 24–48 hours (real-time view: Reports → Realtime).
Google Analytics 4 (GA4 / gtag)
If gtag is on the page, events fire automatically — no extra setup needed:
javascript
gtag("event", "ibe_finalize");
Events appear in GA4 under Reports → Events. To mark ibe_finalize as a conversion (for completed bookings): GA4 → Configure → Events → toggle it on.
Convert booking funnel events in GA4: Go to Explore → Funnel exploration and add the four steps using the event names above to track booking completion rate.
Conversion tracking for hotel bookings:
Add ibe_finalize as a conversion goal to track when guests complete their booking. This signals transactional bookings and measures booking engine effectiveness.
Matomo
Events fire as Matomo custom events:
javascript
_paq.push(["trackEvent", "ibe", "finalize"]);
// category = "ibe", action = event name
Find them in Matomo under Behaviour → Events → Category: ibe.
Use the Matomo Funnels plugin and set steps to match actions av_form, listrooms, validate, finalize.
Test page
Live URL: https://www.igumbi.com/gtmtesthotel.html
Use this page to see how we integrated with GTM dataLayer integration.
- Loads the IBE from igumbi production (
www.igumbi.net) — no local dev environment needed - Hotel Tafelbrunn (
48d8f2q),layout=wide2 - GTM container
GTM-N3VKFZMPalready in place
To test: open the URL in GTM Preview mode (Step 6 above), interact with the booking widget, and confirm ibe_av_form and ibe_listrooms appears in the debug panel.
Verifying events in the browser
Open DevTools console on any page with the IBE widget.
Check the dataLayer after interacting with the widget:
javascript
window.dataLayer
// [{event: "ibe_av_form", ibe_event: "av_form"}, {event: "ibe_listrooms", ...}, ...]
Manually fire a test event:
javascript
Obt.tracker('test')
window.dataLayer // → last entry: {event: "ibe_test", ibe_event: "test"}
Check Matomo queue:
javascript
window._paq
If window.dataLayer shows the ibe_* objects, GTM will receive them.
FAQ
Do I need to add custom code to receive these events? No. If your GTM container or analytics snippet is on the page above the igumbi script, events are received automatically.
What is the difference between validate and finalize?
validate fires when the booking form passes client-side validation. finalize fires when the form is actually submitted to the server. Both usually fire together, but a network error after submission means finalize fires without a confirmed booking — do not treat finalize alone as booking-confirmed.
How do I set up conversion tracking for finished bookings?
In GA4: Go to Configure → Events and toggle ibe_finalize to track completed bookings. In Matomo: Set up a goal using the /ibe/ virtual pageviews and the finalize event as your goal condition. Both methods track when guests complete their hotel reservation.
What does listrooms_no_offers tell me?
The guest searched but no rooms were available for those dates. Track this rate to identify pricing or inventory gaps.
Can I send extra data with the GTM event (hotel name, arrival date, total price)?
Not by default. The dataLayer push currently contains event and ibe_event only. Contact igumbi if you need additional data fields.