A ready-to-use dataLayer for the Mews Booking Engine
In short
The Mews Booking Engine already sends a solid set of events to Google Tag Manager. This free kit builds on them: it adds the stay data, net revenue and stable event names that paid media bidding and reporting rely on, without leaving GTM.
- Why it matters
- Without nights, lead time and net value on every event, Google Ads and Meta optimise on incomplete signals.
- When to use it
- Before you launch or scale paid media, when you move to Mews, or when you rebuild tracking for GA4 and Consent Mode v2.
- Who it is for
- Marketing and e-commerce leads at hotels and groups on the Mews Booking Engine, and the agencies or analysts who run their GTM.
Mews gives hotels a solid booking engine and a native Google Tag Manager integration. What it does not give you is a dataLayer your tags can use as it comes. The events are there, but they are named and shaped the Mews way, they miss the fields paid media needs, and Mews provides them “as is”, with no customisation.
We built a dataLayer kit that fixes this inside GTM, without asking Mews for anything. It is free, and you can get it at the end of this post.
// pushed by the Normalizer, after Mews' purchase
dataLayer.push({
event: 'hirundo_purchase',
context: {
property_name: 'Example Hotel',
funnel_step: 'confirmation'
},
stay: {
check_in_date: '2026-10-31',
nights: 2, lead_time_days: 29
},
ecommerce: {
value: 160, value_net: 142.86,
value_room: 160, value_extras: 0,
currency: 'EUR'
}
});What Mews sends, and where it falls short
The Mews Booking Engine pushes 19 events to the dataLayer: 12 page events prefixed ga4_ (calendar loaded, rates loaded, booking created and so on) and 7 GA4 e-commerce events, from view_item_list to purchase.
That is a good base. Four gaps show up as soon as you plug real tags into it:
- No search event. The date search and the click on a room are not events. You have to derive them from other steps.
- No stay metrics. Nights and lead time, the two numbers that drive hotel bidding, are not calculated anywhere before the purchase.
- Tax-inclusive prices only. Funnel events carry gross prices. The net value exists on the purchase alone, so ROAS is not comparable between markets with different tax rules.
- Names you do not control. If Mews renames an event, every trigger that listens to it breaks.
The approach: normalise, do not rewrite
You cannot change what Mews pushes. You can change what your tags read.
The kit adds one tag to your GTM container, the Normalizer. It listens to each native Mews event and pushes a second event next to it, prefixed hirundo_, in a schema that stays the same at every step of the funnel. GA4, Google Ads and Meta read only the hirundo_ events. If Mews changes something, you update one mapping in one tag.
Inside the kit
A schema that never changes
Every event carries the same four objects: context, stay, ecommerce and booking. Your tags read one structure at every step of the funnel.
The missing hotel metrics
Nights and lead time, calculated on every step instead of only at the purchase.
Search and no-availability events
Mews has no search event. The kit derives one from the room list, and flags the searches that returned no available room.
Consent and duplicates handled
Mews consent is mapped to Consent Mode v2, and a reloaded confirmation page never sends a second purchase.
Four parts, one file
The target schema
The full structure of a normalised event, with a complete purchase example to compare against GTM Preview.
The event mapping
Each native Mews event, its normalised equivalent and the GA4 event name to send. Sixteen events in total.
The Normalizer tag
Ready to paste into a Custom HTML tag. It listens to Mews and pushes the clean event next to each native one.
The GTM checklist
The variables, triggers and tags to create, the Mews Operations settings to switch on, and the tests to run before you publish.
Three decisions already made for you
Net value for ad platforms, gross for analytics. GA4 receives the tax-inclusive value, which matches what the hotel reports. Google Ads and Meta receive the net value, so a campaign in a market with 10% VAT is judged on the same basis as one with 20%.
One primary conversion. hirundo_purchase is the only conversion that carries a value and drives bidding. Add to cart and begin checkout are secondary conversions, there to help the algorithms learn.
Multi-property from day one. Every event carries the property ID. A single lookup table in GTM routes each hotel to its own GA4 property, Google Ads conversion and Hotel Center ID, with a chain default for the steps before a guest picks a hotel.
Before you install it
- You need the GTM container ID entered in Mews Operations, under Settings > Services > Booking engines.
- For Enhanced Conversions, switch on “Collect emails for bookings in Google Tag Manager purchase event” in the same screen, and check that your privacy policy covers it.
- If the booking engine runs as a widget on your site, add your domain and
mews.comto the GA4 cross-domain settings. - Test everything in GTM Preview first. Mews owns the native events and can change them.
One limit to know about: this kit covers the Booking Engine. The Guest Journey (online check-in, Kiosk, upsells after booking, cancellations) has no dataLayer. Measuring it means working server-side from the Mews PMS, which is a separate project.
Get the kit
Running a hotel group on Mews and want this set up, or extended to the Guest Journey and to offline conversions? Book a call with Hirundo.