Answer · Tracking & analytics
How do I track Microsoft Bookings conversions in GA4?
Last updated 4 min read6 sources
“How do I track Microsoft Bookings conversions in Google Analytics 4?”
Asked in Microsoft Learn (opens in a new tab), Microsoft Tech Community (opens in a new tab) and Microsoft Learn (opens in a new tab)
Short answer
Not directly. Microsoft hosts the public booking page on its own domain (outlook.office.com), gives you nowhere to add a GA4 or Google Tag Manager tag, and doesn't redirect to your site after a booking. As of September 2026 you have two options: measure booking intent on your own pages with GA4, or send a server-side GA4 event for each completed booking using the Power Automate Bookings connector and the GA4 Measurement Protocol.
This question has been asked since 2020. The original Microsoft Q&A thread collected 70+ "same question" votes and was locked with no answer.
Why GA4 never sees the booking#
GA4 only records what happens on pages where your tag runs. When someone books, all of the steps (choosing a service, picking a time, filling in the form, confirming) happen on Microsoft's page:
- No tag slot. None of Microsoft's booking page documentation offers a place for GA4, GTM or pixel code. The only tracking feature Microsoft documents is a campaign ID (
?RefID=) that shows up in an exported report. - No thank-you redirect. A Microsoft employee confirmed in 2023 that "there is no native support to redirect the Bookings appointment creation page after successfully creating an appointment." That means you can't use a destination-page conversion.
- Embedding doesn't change this. If you put the page in an iframe on your site, the booking still happens in a cross-origin frame, and your GTM container can't see events inside it. See why GTM can't track inside the Bookings iframe.
What GA4 can measure today#
These all run on your own site, so they work with a normal GA4 or GTM setup:
| Signal | How to capture it | What it tells you |
|---|---|---|
| Click on "Book now" link or button | GTM Click trigger, sent as a GA4 event such as booking_click | Someone intended to book, and from which page and source |
| Booking iframe scrolled into view | GTM Element Visibility trigger on the iframe | Someone saw the booking form |
| Outbound click to outlook.office.com | GA4 enhanced measurement (outbound clicks) | Same as above, without GTM |
Report these as intent, not bookings. A click that ends in an abandoned form looks the same as one that ends in a confirmed appointment.
Counting completed bookings in GA4#
To record real bookings, you have to send the event from the server side after Microsoft creates the appointment. The approach a 2026 Q&A answer suggested looks like this:
- On your site, read the visitor's GA4
client_idfrom the_gacookie and store it under a short key. - Send the visitor to your Bookings link with that key appended, for example
?RefID=k7f2a9. Microsoft only allows letters, numbers, underscores and hyphens in the campaign ID. - In Power Automate, create a flow on the Bookings connector trigger When a appointment is Created (that is Microsoft's spelling). Its payload includes a
TrackingDatafield ("Campaign tracking Data"). - Look up the
client_idstored under that key, then POST abooking_completedevent to the GA4 Measurement Protocol with your measurement ID and API secret. - Mark
booking_completedas a key event in GA4.
Before you build this, know the limits:
- The connector is still in Preview. Only Bookings admins on that calendar can create flows with its triggers, and Microsoft allows 5 flows per Bookings mailbox.
- It isn't available in GCC, GCC High, DoD or 21Vianet.
- Since 2023, users have reported that RefID pages return Bad Request or that the tracking data comes through blank. Whether it works today is unverified, so test it on your own page first. See RefID tracking not working.
- Google describes the Measurement Protocol as a way to supplement tag-based collection, not replace it. Sessions and engagement for these events will look thin in GA4.
The GA4 and GTM guide has the full flow, the GTM tags and the test steps.
Which approach fits#
If you only need to know which pages and campaigns send people to book, click and visibility events are enough and take about an hour to set up. If you need booked appointments as a GA4 key event (for example, to import into Google Ads), you need the server-side route, which depends on RefID working on your page. To carry campaign data through without breaking the link, see passing UTM parameters into Bookings.
Doing this with BookingsXP#
BookingsXP puts a booking widget on your own page, in front of your existing Bookings page, so the booking steps run where your tags can see them. Each step is pushed to window.dataLayer, and a GTM Custom Event trigger on bookingsxp.booking_completed fires only once a booking is confirmed. If you add your GA4 ID to the widget, it also sends generate_lead and bookingsxp_booked. Appointments are still created in Microsoft Bookings as usual. See analytics. BookingsXP is independent and not affiliated with or endorsed by Microsoft.
Questions people also ask
Sources
- Microsoft Learn: Customize booking page (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Reporting info (opens in a new tab) · learn.microsoft.com
- Microsoft Learn (opens in a new tab) · learn.microsoft.com
- Microsoft Learn: Power automate integration (opens in a new tab) · learn.microsoft.com
- Microsoft Tech Community: Microsoft booking custom thank you page url (opens in a new tab) · techcommunity.microsoft.com
- developers.google.com (opens in a new tab) · developers.google.com