Tracking Ad Conversions from Appointment Bookings
Tracking Ad Conversions from Appointment Bookings
Track when customers book appointments so you can measure the effectiveness of your advertising campaigns in platforms like Meta (Facebook/Instagram), Google Ads, or Google Analytics.
Note: There are two ways to set this up. The post-booking redirect just needs a thank-you page on your website with your ad platform's standard tracking tag—no coding required. The postMessage event approach is more flexible but requires embedding the scheduler and editing your website's code, so you'll likely need to involve your web designer or developer. Feel free to share this article with them directly—the technical details they need are included below.
Overview
What This Enables
When a customer books an appointment through the CloudBridal scheduler, your advertising platforms can be notified that a conversion occurred. This allows you to:
- See which ads are driving actual bookings (not just clicks)
- Optimize your ad campaigns based on real results
- Calculate your true return on ad spend
Two Ways to Track
- Post-booking redirect (simplest). Configure a redirect URL on the appointment type, and CloudBridal sends customers to a page on your website (e.g. a thank-you page) after they book. Your normal page-based conversion tracking fires there—no custom event code needed. This is the only option that also works for direct
go.cloudbridal.combooking links. See Post-Booking Redirect below. - The
appointment-bookedpostMessage event (most flexible). Your booking page listens for a JavaScript event from the embedded scheduler and fires conversion tracking without navigating away. Requires the scheduler to be embedded on a page you control, plus custom listener code.
What's Required (for the postMessage approach)
- A page on your website with the scheduler embedded. The event-based approach only works when the scheduler is embedded on your own website, because it requires adding code to the page where bookings happen. (For direct
go.cloudbridal.comlinks, use the post-booking redirect instead.) - The Advanced embed code. You can find this in CloudBridal under Settings → Appointments → Appointment Scheduler Links → Option 3 (Advanced).
- Your advertising platform's tracking code. This is separate from CloudBridal. You'll get this from Meta, Google, or whichever platform you're using.
Do I Need a Developer?
For the post-booking redirect: no. If you can create a page in your website builder and add your ad platform's standard tracking tag to it, you can set this up yourself—see Post-Booking Redirect below.
For the postMessage approach: probably yes, unless you're comfortable editing HTML and JavaScript. The good news is that this is a relatively straightforward task for most web developers or designers who work with code. Here's what to tell them:
"I need to embed our appointment scheduler on a booking page and add conversion tracking. The scheduler sends a JavaScript postMessage event when someone books. I have documentation that explains the event format and includes code examples."
Then share this article with them.
Technical Implementation Guide (postMessage Approach)
The following sections are written for developers and contain the technical details needed to implement event-based tracking. If you're using the post-booking redirect instead, skip to Post-Booking Redirect.
How It Works
When a customer completes a booking through the embedded scheduler, CloudBridal dispatches an event using the browser's postMessage API. Your page listens for this event and triggers conversion tracking in response.
Event Data Structure
The appointment-booked event includes the following properties:
Property | Type | Description |
|---|---|---|
| string | Always |
| string | Unique identifier for the booked appointment |
| string | Name of the appointment type (e.g., "Bridal") |
| string | Appointment status: |
| number | Appointment fee if applicable, otherwise |
| boolean |
|
| string | (Optional) The referrer URL if available from the booking source |
Example event data:
{
"type": "appointment-booked",
"appointmentGuid": "3u30xPWTbEqy44ahFfGRgg",
"appointmentType": "Bridal",
"status": "Pending",
"value": 0,
"forWaitlist": false
}
Step 1: Embed the CloudBridal scheduler in your booking page
Add the iframe code available in CloudBridal under Settings → Appointments → Appointment Scheduler Links → Option 3 (Advanced).
Step 2: Add Conversion Tracking
Add an event listener that fires conversion tracking code when a booking is completed. The basic pattern looks like this:
<script>
window.addEventListener(
'message',
function (event) {
// Ignore events that aren't appointment bookings
if (!event.data || event.data.type !== 'appointment-booked') return;
// Optional: Skip waitlist requests
if (event.data.forWaitlist) return;
// {Conversion tracking code goes here}
},
false
);
</script>
Alternative: Post-Booking Redirect (No Event Code Required)
If you'd rather not write postMessage listener code, configure a Post-Booking Redirect URL on the appointment type in CloudBridal under Settings → Appointments → Appointment Types → (edit a type) → Advanced. After a customer completes a booking, the scheduler navigates to that URL instead of showing the booking success message.
Point it at a thank-you page on your website that includes your ad platform's standard page-view or event tracking, and conversions are attributed the same way as any other landing-page conversion.
Requirements and behavior:
- Embedded schedulers need the current Advanced embed script (re-copy it from Appointment Scheduler Links if your embed predates this feature). Older embed scripts will show the booking success message instead of redirecting.
- Direct
go.cloudbridal.comlinks redirect without any additional setup—this is the recommended way to track conversions for direct links. - The redirect fires only for new bookings—not for edits, cancellations, or reschedules. Waitlist joins never redirect: no appointment slot was actually reserved, so the customer sees CloudBridal's waitlist message (which explains they'll be contacted if a slot opens) instead of your thank-you page. This also means waitlist joins never inflate your conversion counts.
Data Appended to the Redirect URL
CloudBridal appends the booking details to your redirect URL as query parameters:
Parameter | Description |
|---|---|
| Appointment status: |
| Appointment fee if applicable, otherwise |
| Name of the appointment type (e.g., "Bridal") |
| Unique identifier for the booked appointment |
For example, a redirect to https://yoursite.com/thank-you might arrive as:
https://yoursite.com/thank-you?cb_status=Confirmed&cb_value=25&cb_appointment_type=Bridal&cb_appointment_guid=3u30xPWTbEqy44ahFfGRggYour thank-you page can read these to filter conversions (e.g., only count cb_status=Confirmed) or pass the value and transaction id to your ad platform.
Ad Click IDs Are Forwarded on Direct Links
When customers reach the scheduler through a direct link that carries ad platform parameters (e.g. go.cloudbridal.com/...?gclid=...&utm_source=...), CloudBridal forwards those parameters onto the redirect URL: utm_* parameters and common click ids (gclid, gbraid, wbraid, dclid, fbclid, msclkid, ttclid, li_fat_id, epik). This lets your thank-you page's tracking tags attribute the conversion to the original ad click even though the booking itself happened on the CloudBridal domain.
Platform-Specific Examples (postMessage Approach)
Below are examples for common tracking platforms using the appointment-booked event. Replace placeholder values (like AW-XXXXXXXXXX) with actual account and conversion IDs from the client's advertising accounts.
Meta Pixel (Facebook/Instagram)
<script>
window.addEventListener(
'message',
function (event) {
if (!event.data || event.data.type !== 'appointment-booked') return;
if (event.data.forWaitlist) return;
if (typeof fbq !== 'undefined') {
fbq('track', 'Schedule', {
content_name: event.data.appointmentType || 'Appointment',
value: event.data.value || 0,
currency: 'USD',
});
}
},
false
);
</script>
Google Ads
<script>
window.addEventListener(
'message',
function (event) {
if (!event.data || event.data.type !== 'appointment-booked') return;
if (event.data.forWaitlist) return;
if (typeof gtag !== 'undefined') {
gtag('event', 'conversion', {
send_to: 'AW-XXXXXXXXXX/YYYYYYYYYY',
value: event.data.value || 0,
currency: 'USD',
transaction_id: event.data.appointmentGuid,
});
}
},
false
);
</script>
Google Analytics 4 (GA4)
<script>
window.addEventListener(
'message',
function (event) {
if (!event.data || event.data.type !== 'appointment-booked') return;
if (event.data.forWaitlist) return;
if (typeof gtag !== 'undefined') {
gtag('event', 'appointment_booked', {
appointment_type: event.data.appointmentType,
appointment_id: event.data.appointmentGuid,
status: event.data.status,
value: event.data.value || 0,
currency: 'USD',
});
}
},
false
);
</script>
Combined Example (Multiple Platforms)
For tracking across multiple platforms simultaneously:
<script>
window.addEventListener(
'message',
function (event) {
if (!event.data || event.data.type !== 'appointment-booked') return;
if (event.data.forWaitlist) return;
// Meta Pixel
if (typeof fbq !== 'undefined') {
fbq('track', 'Schedule', {
content_name: event.data.appointmentType || 'Appointment',
value: event.data.value || 0,
currency: 'USD',
});
}
// Google Ads
if (typeof gtag !== 'undefined') {
gtag('event', 'conversion', {
send_to: 'AW-XXXXXXXXXX/YYYYYYYYYY',
value: event.data.value || 0,
currency: 'USD',
transaction_id: event.data.appointmentGuid,
});
}
// Google Analytics 4
if (typeof gtag !== 'undefined') {
gtag('event', 'appointment_booked', {
appointment_type: event.data.appointmentType,
appointment_id: event.data.appointmentGuid,
status: event.data.status,
value: event.data.value || 0,
currency: 'USD',
});
}
},
false
);
</script>
Tips & Best Practices
Create a dedicated booking page. A dedicated page like yoursite.com/book-appointment lets you add helpful context around the scheduler—such as a map, parking instructions, cancellation policy, or what to expect. It also keeps customers on your website for a more seamless experience.
Test before launching campaigns. Verify that events are firing correctly using browser developer tools or platform debugging tools (Meta Pixel Helper, Google Tag Assistant) before spending money on ads.
Consider filtering by status. To track only confirmed appointments (not pending), add a status check:
if (event.data.status !== 'Confirmed') return;
Handle waitlist requests appropriately. Waitlist requests also trigger the appointment-booked event with forWaitlist: true. Decide whether these should count as conversions for your campaigns.
Troubleshooting
Events aren't firing: Ensure the tracking platform's base code (Meta Pixel, Google tag, etc.) is installed and loads before the booking completes. Check the browser console for errors.
Iframe not displaying: Verify the clientGuid is correct and that ad blockers or browser security extensions aren't interfering.
Conversions not appearing in reports: Reporting dashboards often have a delay of several hours or more. Also confirm that the conversion action is properly configured in the platform's settings.
Updated on: 02/07/2026
Thank you!
