← Makalelere Dön

OpenAI Ads Randevu ve Demo Rezervasyon Takibi Rehberi

OpenAI Ads kampanyalarında demo ve toplantı rezervasyonlarını izleyin: Calendly, HubSpot iframe dinleyicileri ve CAPI sunucu webhook entegrasyonu.

2026-09-14 • Rehber

For B2B SaaS companies, consultancies, and high-ticket service agencies, eCommerce tracking rules do not apply.

Nobody is buying a $10,000 service with a credit card on a Shopify cart.

Your primary conversion event is an appointment booking or a product demo request. But tracking demo bookings on OpenAI Ads is notoriously tricky: most teams use embedded schedulers (like Calendly, Chili Piper, or HubSpot Meetings) that run inside cross-domain iframes. Client-side pixels cannot see inside the iframe to detect when a user confirms a timeslot.

If you only track clicks on the Book Demo button, you end up optimizing your campaigns for tire-kickers who opened the calendar and bounced.

Real booking tracking requires listening to cross-window postMessage events or bridging webhook confirmation payloads directly into OpenAI's Conversions API.

Here is how to set up bulletproof demo booking tracking for OpenAI Ads across any scheduling platform.


1. Event Standard: appointment_scheduled

OpenAI Ads includes a dedicated standard event specifically for meeting bookings: appointment_scheduled.

Unlike a generic lead_created event, appointment_scheduled signals high conversion commitment to the ad auction:

{
  "type": "appointment_scheduled",
  "action_source": "website",
  "event_id": "booking_cal_901824",
  "user_data": {
    "em": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a",
    "ph": "94212953e5e49f579d479cb2c9f417f7b15d914d33a682ff9341496695222718",
    "client_ip_address": "198.51.100.42",
    "client_user_agent": "Mozilla/5.0..."
  },
  "data": {
    "appointment_id": "cal_901824",
    "currency": "USD",
    "amount": 25000 // Optional estimated lead pipeline value ($250.00)
  }
}

2. Capturing Calendly Bookings via postMessage

When Calendly is embedded via an inline widget or popup, Calendly dispatches JavaScript window.postMessage events back to the parent host page upon key user actions:

  • calendly.date_and_time_selected
  • calendly.event_scheduled

Add the following listener to your booking landing page to trigger the OpenAI Ads pixel:

window.addEventListener('message', function(e) {
  // Verify origin for security
  if (e.origin && e.origin.indexOf('calendly.com') !== -1) {
    if (e.data && e.data.event === 'calendly.event_scheduled') {
      const payload = e.data.payload;
      const eventUri = payload.event.uri; // Unique Calendly meeting URI
      const bookingId = eventUri ? eventUri.split('/').pop() : 'booking_' + Date.now();

      // Emit client-side conversion to OpenAI Ads
      window.oaiq('event', 'appointment_scheduled', {
        appointment_id: bookingId,
        event_id: 'calendly_' + bookingId
      });
      console.log('OpenAI Ads appointment_scheduled event fired for Calendly booking:', bookingId);
    }
  }
});

3. Capturing HubSpot Meetings Bookings

HubSpot embedded meeting widgets similarly emit window messages when a prospect submits a booking:

window.addEventListener('message', function(e) {
  if (e.data && e.data.meetingBookSucceeded) {
    const bookingDetails = e.data.meetingBookSucceeded;
    const meetingId = 'hubspot_' + Date.now();

    window.oaiq('event', 'appointment_scheduled', {
      appointment_id: meetingId,
      event_id: meetingId
    });
  }
});

4. Why Server-Side Webhook CAPI is Essential for B2B

While client-side listeners work when a prospect stays on the page, they fail when:

  • The prospect uses an ad blocker that halts pixel.js.
  • The prospect completes the booking on a standalone Calendly/HubSpot link instead of an embedded page.
  • The parent page closes before the iframe fires the confirmation postMessage.

The Server-Side Solution:

  1. Configure your scheduling software to send a webhook on event creation (e.g., Calendly Webhook invitee.created).
  2. Your server endpoint receives the payload with the prospect's email, phone, and booking timestamp.
  3. Your server hashes the user data (SHA-256) and posts an appointment_scheduled event directly to https://bzr.openai.com/v1/events?pid=<PIXEL-ID>.
  4. If a client-side event was also fired, matching event_id strings ensure automatic deduplication.

5. Downstream Optimization: Attended Meetings and CRM Stages

The real power of server-side CAPI for B2B lead generation is tracking downstream qualification:

  1. Stage 1 (Top Funnel): Prospect books demo → Track appointment_scheduled.
  2. Stage 2 (Mid Funnel): Prospect shows up to the call → Your CRM triggers CAPI custom event demo_completed.
  3. Stage 3 (Bottom Funnel): Deal signs → Your CRM triggers CAPI subscription_activated or order_created with real contract value.

Feeding qualified offline stages back to OpenAI Ads prevents bidding algorithms from optimizing for unqualified form submissions.

For full architecture and implementation support, explore our Lead Generation Tracking Setup service.