Skip to content

Set Up Google Tag Manager Praxis Desk ​

Technical guide for web agencies: how the Online Booking Calendar sends events to a Google Tag Manager container running on the practice's or studio's own website.

Prerequisites ​

  • The Buchungsdaten für Google Tag Manager bereitstellen (provide booking data for Google Tag Manager) toggle is enabled in the Online Booking Calendar's basic settings.
  • A Google Tag Manager container owned by the practice or studio runs on their website.

What the toggle does ​

The toggle sits under Online Buchungskalender → Grundeinstellungen → Weiteres. When enabled, the embedded booking widget (#offisyCalendar) pushes an event into window.dataLayer on the practice's website at every booking step and on booking completion.

offisy doesn't load any third-party script, doesn't ship a GTM container, and doesn't send anything to Google. It only writes to a JavaScript array that already exists on the website. The Tag Manager container belongs to the practice, not to offisy.

Note: The toggle is designed for the embedded widget and only supported there (#offisyCalendar, the script embed on the practice's own website). There, window.dataLayer is the practice website's own dataLayer, and its Tag Manager container can read the events. On the hosted booking page buchen.offisy.at, the same widget file runs, so the events are technically pushed there too. But nobody reads them there: offisy doesn't load a Tag Manager on that page, and you can't add your own container code to it. For measurement, the embedded widget is therefore the only supported option.

Event catalog ​

Two event names occur:

  • offisy_booking_step: fires once per step per booking run, including the entry step and success.
  • offisy_booking_complete: fires once when the booking is finalized, before the success step event.

Both events push the same set of nine keys:

Keyoffisy_booking_stepoffisy_booking_complete
event"offisy_booking_step""offisy_booking_complete"
offisy_stepStep name""
offisy_step_indexNumber""
offisy_flowservice / course / additionalServicesame
offisy_service_nameService name or ""same
offisy_service_priceFormatted price string or ""same
offisy_course_nameCourse name or ""same
offisy_course_priceFormatted price string or ""same
offisy_location_nameLocation name or ""same

The trigger key is event. GTM's Custom Event trigger matches against this key, not against eventName or name. A different key makes the event untriggerable in GTM, with no error message.

Every event includes all nine keys, with non-applicable ones as an empty string "". GTM merges each push into a running data model. A key set once would otherwise stick around on later events.

Setting up triggers and tags ​

  1. Create a Custom Event trigger on offisy_booking_complete in Tag Manager to capture booking completion.
  2. Optionally, create a second Custom Event trigger on offisy_booking_step to capture individual funnel steps.
  3. Create dataLayer variables for the parameters in the table above (e.g. offisy_service_name, offisy_flow).
  4. Segment by offisy_step and offisy_flow if you need to distinguish between individual services, courses, and add-on services.

Note: No wait mechanism is needed. Tag Manager processes entries that are already in dataLayer when the container loads. Load order between the widget and the Tag Manager snippet doesn't matter. Don't build a polling workaround for it.

Warnings ​

  • offisy_*_price is a formatted string (e.g. "45,00 €"), not a number. In GA4 it lands as a dimension, not a metric. Without your own parsing, you can't calculate revenue or ROAS from it. An empty value means "price not published", not €0.
  • Nothing happens without a Tag Manager container on the website. Nothing happens without a GA4 property behind it either.
  • Consent controls for GA4 or Meta tags belong on the tags in Tag Manager, not on the widget. offisy doesn't set a cookie and doesn't ask for consent.
  • After toggling the switch, a visitor's browser may keep the old widget code cached for up to 24 hours before events start arriving.
  • The events don't distinguish between a confirmed booking and a booking request. Practices without direct booking must accept appointments manually first. Wiring offisy_booking_complete up as a conversion without accounting for this also counts unconfirmed requests.

Privacy ​

The events contain only the nine keys from the event catalog above. The following data is not sent:

  • Name, email address
  • Customer UUID, date of birth, social security number
  • Insurance, address, phone number
  • Staff member name and staff member UUID
  • Appointment date and time
  • Free-text notes from the patient or customer

Offisy GmbH