Setting up Google Ads conversion tracking with the Dodo booking widget

Last updated: June 4, 2026

Step 1: Confirm the Dodo embed snippet is installed

The clinic website should use Dodo’s standard embed.js snippet for either the floating launcher or inline embed.

If the website is using a raw iframe or a direct portal link, ask Dodo for the current embed snippet before setting up GTM conversion tracking.

Step 2: Create a GTM Custom Event trigger

In Google Tag Manager:

  1. Go to Triggers.

  2. Click New.

  3. Choose Custom Event.

  4. Set the event name to:

dodo_widget_booking_completed

  1. Save the trigger.

Step 3: Create the Google Ads conversion tag

In GTM:

  1. Go to Tags.

  2. Click New.

  3. Choose Google Ads Conversion Tracking.

  4. Enter the clinic’s Google Ads Conversion ID and Conversion Label.

  5. Attach the dodo_widget_booking_completed trigger.

  6. Save and publish.

By default, leave Transaction ID blank. Dodo does not expose booking IDs to the clinic website because those are sensitive operational identifiers.

Step 4: Optional dataLayer variables

If you want to segment or debug conversions, create Data Layer Variables for:

  • dodo_widget_agent_id

  • dodo_widget_display_mode

  • dodo_widget_appointment_count

For example, dodo_widget_display_mode can help distinguish inline embeds from launcher embeds.

Optional: fixed conversion value

If the clinic wants to send a fixed value per completed booking, set the value directly in the Google Ads Conversion Tracking tag.

Example:

Field

Value

Value

75

Currency

USD

If the clinic wants to calculate value based on appointment count, use dodo_widget_appointment_count as a GTM Data Layer Variable and configure a GTM variable or tag value accordingly.

If you are not using GTM

GTM is the recommended setup.

If the clinic uses only gtag.js, the safest path is still to use the Dodo dataLayer event rather than listening directly to iframe postMessage events.

Use this only if GTM is not installed, and do not also configure a GTM conversion tag for the same conversion or the booking may be counted twice.

<script> (function () { window.dataLayer = window.dataLayer || []; function handleDodoDataLayerEvent(item) { if (!item || item.event !== "dodo_widget_booking_completed") { return; } if (typeof gtag !== "function") { return; } gtag("event", "conversion", { send_to: "AW-XXXXXXXXXX/YYYYYYYYY" }); } window.dataLayer.forEach(handleDodoDataLayerEvent); var originalPush = window.dataLayer.push; window.dataLayer.push = function () { for (var i = 0; i < arguments.length; i++) { handleDodoDataLayerEvent(arguments[i]); } return originalPush.apply(window.dataLayer, arguments); }; })();</script>

Replace AW-XXXXXXXXXX/YYYYYYYYY with the clinic’s Google Ads Conversion ID and Conversion Label.

Direct portal URL

If visitors are sent directly to portal.dodo.ai/<your-widget-id>, there is no clinic website parent page listening for widget events. That means client-side conversion tracking on the clinic’s domain is not available through dataLayer.

For paid acquisition, use an embedded mode instead:

  • Floating launcher

  • Inline embed

This keeps visitors on the clinic website and allows GTM to receive the booking-complete event.

How to verify it is working

After publishing the GTM setup:

  1. Open GTM Preview mode.

  2. Visit the clinic landing page with the Dodo widget installed.

  3. Complete a test booking.

  4. Confirm that dodo_widget_booking_completed appears in the GTM event stream.

  5. Confirm that the Google Ads conversion tag fired on that event.

  6. Check Google Ads under Goals → Conversions → Diagnostics.

Google Ads diagnostics may take some time to show new activity.

Common troubleshooting

If the conversion is not firing, check:

  • The website is using Dodo’s standard embed.js snippet, not a raw iframe.

  • The visitor is booking inside the embedded widget, not on a direct portal.dodo.ai link.

  • The GTM Custom Event name is exactly dodo_widget_booking_completed.

  • GTM is installed on the same page as the Dodo widget.

  • The Google Ads Conversion ID and Conversion Label are correct.

  • The test browser is not blocking Google tags.

  • Consent settings allow advertising conversions to be sent.

Privacy and HIPAA guardrails

Dodo’s parent-page dataLayer events are intentionally limited.

The booking-complete event does not expose:

  • Client name

  • Phone number

  • Email

  • Pet name

  • Free-text reason or symptom text

  • Appointment date or time

  • Doctor ID

  • Booking ID

  • Appointment type name or ID

  • Google ad click IDs such as gclid, gbraid, or wbraid

This prevents arbitrary scripts on the clinic website from reading sensitive booking details.

Dodo may still record backend web-session analytics for reporting and support, subject to Dodo’s normal security and privacy controls.

FAQ

Can this be used for Meta Pixel or other ad platforms?

Yes. The GTM event is platform-agnostic. Instead of firing a Google Ads conversion tag, the clinic can fire a Meta Pixel, LinkedIn Insight Tag, or another conversion tag from the same dodo_widget_booking_completed trigger.

Does the event include a transaction ID?

No. Dodo does not expose booking IDs to the parent website by default.

If transaction-level deduplication is required, contact Dodo support to discuss an approved server-side conversion setup.

Does the event include GCLID, GBRAID, or WBRAID?

No. Dodo may forward ad click identifiers into the widget session when present, but the default parent-page dataLayer event does not export those identifiers.

Google Ads attribution should rely on the Google tag and consent setup on the clinic website.

Will the event still fire if the website has a consent banner?

The Dodo dataLayer event can still be pushed, but whether Google receives the conversion depends on the clinic’s consent management setup, including Google Consent Mode.

If a visitor denies advertising consent, the Google Ads tag may not send the conversion. That is expected behavior.

Can Dodo support Enhanced Conversions?

Enhanced Conversions or server-side conversion uploads require additional legal, privacy, and implementation review. They are not enabled by default and are not added to the browser dataLayer payload by default.

Contact Dodo support if the clinic wants to scope this.