Site icon Zigma Internet Marketing offers digital marketing services in Toronto

How to Track ChatGPT Ad Conversions, ROI & Phone Leads — Complete Guide

How to Track ChatGPT Ad Conversions, ROI Phone Leads
Need help setting up ChatGPT Ad tracking?  Call Zigma.ca today →
📊 Digital Marketers' Guide · 2026

How to Track ChatGPT Ad Conversions,
ROI & Phone Leads

Install the OpenAI Measurement Pixel, fire conversion events, track phone calls, and pass data to GA4 — complete technical guide.

⏱ 20 min read 🛠 Technical setup 📍 By Zigma Internet Marketing

Running ads on ChatGPT without conversion tracking is like driving with your eyes closed — you're spending money, but you have no idea what's actually working.

OpenAI's Ads Manager includes a Measurement Pixel — a lightweight browser-side JavaScript SDK that reports back every time someone who clicked your ChatGPT ad takes a valuable action on your website: submitting a form, completing a purchase, registering, scheduling an appointment, or calling your phone number.

This guide covers the full technical setup for digital marketers — from creating your pixel in Ads Manager, to installing it via Google Tag Manager or WordPress, to wiring up the specific events that matter most for lead generation, phone calls, and ROI measurement. We also cover how to pass ChatGPT conversion data into GA4 for unified cross-channel reporting.

Prerequisite

You should already have a ChatGPT Ads campaign set up in Ads Manager (ads.openai.com). If not, read our guide How to Advertise on ChatGPT first before continuing here.

Step 01

Create a Conversion Source in Ads Manager

Ads Manager → Tools → Conversions
OpenAI Ads Manager Tools menu showing Conversions option
Navigate to Tools → Conversions in the left sidebar of Ads Manager to access pixel setup and conversion sources.

Inside Ads Manager (ads.openai.com), click Tools in the left sidebar, then select Conversions. This is where all your measurement sources and pixels are managed.

Click "Create a new source" and when prompted for the type, select Web. OpenAI will generate your unique Pixel ID — a string you'll embed in all your tracking code.

Create Conversion Source → Type: Web
Select "Web" as your conversion source type. OpenAI generates a unique Pixel ID tied to your Ads Manager account.
Save Your Pixel ID

Copy your Pixel ID immediately after it's created and store it somewhere accessible. You'll need it in every snippet you install. It's a unique alphanumeric string specific to your account.


Step 02

Install the OpenAI Measurement Pixel

The Measurement Pixel loads asynchronously and initialises a global oaiq() function used to fire all conversion events. Add the following snippet to the <head> section of every page on your website — near the top so early conversions aren't missed.

HTML — Base Pixel (All Pages) Replace YOUR-PIXEL-ID
<!-- OpenAI ChatGPT Measurement Pixel -->
<script>
  (function (w, d, s, u) {
    if (w.oaiq) return;
    var q = function () { q.q.push(arguments); };
    q.q = [];
    w.oaiq = q;
    var js = d.createElement(s);
    js.async = true;
    js.src = u;
    var f = d.getElementsByTagName(s)[0];
    f.parentNode.insertBefore(js, f);
  })(window, document, "script", "https://bzrcdn.openai.com/sdk/oaiq.min.js");

  oaiq("init", {
    pixelId: "<YOUR-PIXEL-ID>",
    // debug: true  ← enable during testing only
  });
</script>
Use debug: true During Testing

Add debug: true to the init options while setting up. This logs every pixel event to your browser console (F12 → Console) so you can confirm events are firing before going live. Remove it for production.


Step 03

Add the Pixel via Google Tag Manager

Google Tag Manager → New Tag → Custom HTML
In GTM, create a Custom HTML tag with the base pixel code and set the trigger to "All Pages" so the pixel initialises on every page load.

Google Tag Manager is the recommended installation method — it's cleaner, easier to update, and doesn't require editing theme files. Here's how:

  1. In GTM, go to Tags → New
  2. Click Tag Configuration → choose Custom HTML
  3. Paste the full base pixel code from Step 2 (including the <script> tags)
  4. Under Triggering, select All Pages
  5. Name the tag (e.g. ChatGPT Pixel — Base) and click Save
  6. Create a second Custom HTML tag for each conversion event, triggered by the appropriate page URL or GTM event
  7. Publish your GTM container
Always Wrap in <script> Tags in GTM

GTM's Custom HTML field expects full HTML. Always wrap your pixel code and conversion event calls inside <script></script> tags — unlike a .js file where you'd write raw JavaScript.

GTM Custom HTML — Conversion Tag (Thank-You Page) Trigger: Page View → /thank-you/
<script>
  // Fires when user reaches the thank-you page after form submit
  oaiq("measure", "lead_created", {
    type: "customer_action"
  });
</script>

Step 04

WordPress Installation (header.php)

WordPress → Appearance → Theme File Editor → header.php
Paste the base pixel code in header.php immediately before the closing </head> tag so it fires on every page of your WordPress site.

If you're managing your own WordPress theme (or a child theme), add the pixel directly to header.php:

  1. In WordPress admin, go to Appearance → Theme File Editor
  2. Select header.php from the file list on the right
  3. Find the closing </head> tag and paste the full base pixel code immediately before it
  4. Click Update File
Use a Child Theme or WPCode

Never edit your parent theme's header.php directly — a theme update will erase your changes. Use a child theme, or a plugin like WPCode or Insert Headers and Footers to safely inject the snippet without touching theme files.

For the conversion event on your thank-you page, use a per-page script injection plugin, or use GTM as described in Step 3 — either approach keeps your tracking clean and maintainable.


Step 05

Firing Conversion Events

With the base pixel on all pages, you now fire oaiq("measure", ...) when a meaningful conversion happens — on your thank-you page, order confirmation, or triggered by a button click.

ArgumentRequiredDescription
eventNameYesA standard event name (see Step 6) or "custom".
eventPropsNoEvent data: type, optional amount, currency, and event-specific fields.
eventOptionsNoevent_id for deduplication; custom_event_name for custom events.
JavaScript — Form Submission (Lead Created) Add to your /thank-you/ page
// Fire when a user submits a contact or enquiry form
oaiq("measure", "lead_created", {
  type: "customer_action"
});
JavaScript — Registration with Value e.g. account sign-up worth CA$100
oaiq("measure", "registration_completed", {
  type: "customer_action",
  amount: 100,
  currency: "CAD"
});
JavaScript — Appointment Scheduled Services, clinics, consultants
oaiq("measure", "appointment_scheduled", {
  type: "customer_action",
  amount: 5000,   // value in cents (5000 = $50.00)
  currency: "CAD"
});
JavaScript — eCommerce Order Order confirmation page
oaiq("measure", "order_created", {
  type: "contents",
  amount: 2599,
  currency: "CAD",
  contents: [{
    id: "sku_123",
    name: "Starter Bundle",
    content_type: "product",
    quantity: 1
  }]
});

Step 06

All Supported Conversion Events

OpenAI supports a set of standard event names across different business types. Choose the events that match your conversion goals.

page_viewed
contents
High-value page visits (e.g. pricing page)
contents_viewed
contents
Product or content detail page views
lead_created
customer_action
Form submission, contact or quote request
registration_completed
customer_action
Account sign-up or user registration
appointment_scheduled
customer_action
Booking confirmation for services
items_added
contents
Add to cart for eCommerce
checkout_started
contents
User begins the checkout process
order_created
contents
Completed purchase / order confirmation
subscription_created
plan_enrollment
SaaS or membership subscription start
trial_started
plan_enrollment
Free trial activation
custom
custom
Any business-specific event (quote_requested, download, etc.)
JavaScript — Custom Event Example For non-standard conversions
oaiq(
  "measure",
  "custom",
  { type: "custom", amount: 12999, currency: "CAD" },
  { custom_event_name: "quote_requested", event_id: "quote_req_123" }
);
Common Mistake

custom_event_name and event_id must go in the 4th argument (eventOptions), not inside eventProps. Putting them in the wrong object silently breaks event matching in Ads Manager.


Step 07

Tracking Phone Call Leads from ChatGPT Ads

Phone calls are often the highest-value conversion for service businesses — yet the hardest to attribute. When someone sees your ChatGPT ad, visits your site, and calls your number, how do you prove that call came from ChatGPT? Here are three complementary methods.

📞 Method 1 — Dynamic Number Insertion (DNI)

The most accurate method. You swap your phone number with a unique tracking number assigned to the ChatGPT traffic source. When called, the tracking platform records the source and can fire a conversion back.

  • Use a call tracking tool like CallRail, WhatConverts, or CallTrackingMetrics
  • Set up a number pool for website visitors (4–10 numbers recommended for accurate attribution)
  • Add the DNI JavaScript snippet to your site alongside the ChatGPT pixel
  • Visitors arriving from a ChatGPT ad see a unique swapped number — the call is attributed to ChatGPT automatically

🔗 Method 2 — UTM Parameters + Call Tracking

Pass UTM parameters in your ChatGPT ad's destination URL so your call tracking tool reads the source when the visitor lands:

  • Set your ad URL to: https://yoursite.com/?utm_source=chatgpt&utm_medium=cpc&utm_campaign=canada
  • Your call tracking software reads utm_source=chatgpt from the session
  • Calls from that session are tagged as ChatGPT-sourced in your reports
  • Most call tracking platforms store UTM data in session cookies for 30–90 days

🔥 Method 3 — Fire a Pixel Event on Click-to-Call

For mobile users, fire a ChatGPT conversion event when someone taps your phone number. This captures intent without any call tracking tool:

HTML + JavaScript — Click-to-Call Tracking
<!-- Phone number link -->
<a href="tel:+16471234567" onclick="trackPhoneClick()">
  📞 Call Us: (647) 123-4567
</a>

<script>
function trackPhoneClick() {
  // Fire to OpenAI Ads Manager
  oaiq("measure", "lead_created", {
    type: "customer_action"
  });
  // Also fire to GA4 (optional but recommended)
  gtag("event", "phone_call_click", {
    event_category: "ChatGPT Lead",
    event_label: "click_to_call"
  });
}
</script>
Best Practice for Service Businesses

Use all three methods together: DNI for accurate call attribution, UTMs for source labelling in your CRM, and the click-to-call pixel event as a fallback for mobile users. This gives you the most complete picture of your ChatGPT ad ROI from phone leads.


Step 08

Passing ChatGPT Conversions to Google Analytics GA4

Sending ChatGPT conversions into GA4 gives you a unified view of ROI across your entire media mix — ChatGPT, Google Ads, Meta, and more — all in one report.

GA4 → Events → ChatGPT Conversion Events
ChatGPT conversion events appearing in GA4 alongside Google Ads and Meta — unified cross-channel ROI reporting.

Fire both the OpenAI pixel event and a GA4 event simultaneously from the same trigger. You can do this via two GTM tags on the same trigger, or inline on your thank-you page:

JavaScript — Dual Tracking: OpenAI + GA4 Thank-You page or form submit callback
// ── Fire to OpenAI Ads Manager ──────────────────────
oaiq("measure", "lead_created", {
  type: "customer_action"
});

// ── Fire to Google Analytics GA4 ────────────────────
gtag("event", "generate_lead", {
  event_category: "ChatGPT Ads",
  event_label: "lead_form_submission",
  value: 1,
  campaign_source: "chatgpt",
  campaign_medium: "cpc"
});

In GA4, mark generate_lead as a conversion under Admin → Events → Mark as conversion. It will then appear in your Conversions report with source attribution for ChatGPT traffic.

Via GTM — Two Tags, One Trigger

In Google Tag Manager, create two separate tags on the same trigger (e.g. "Thank You Page View"): one Custom HTML tag for the OpenAI oaiq() call, and one GA4 Event tag for GA4. This keeps tracking clean and easy to audit.


Step 09

Deduplication (Browser + Server Events)

If you send the same conversion from both the browser pixel and a server-side integration (e.g. your CRM or backend), OpenAI will count it twice — inflating your conversion numbers — unless you implement deduplication.

The fix: generate a unique event_id for each conversion and pass the same ID in both the browser pixel call and the server-side API call. OpenAI matches on Pixel ID + event name + event_id and discards the duplicate.

JavaScript — Browser Event with event_id
// Use your real order or lead ID as the event_id
const orderId = "order_98765";

oaiq(
  "measure",
  "order_created",
  { type: "contents", amount: 2599, currency: "CAD" },
  { event_id: orderId }  // ← same ID sent from your server
);
When Is This Needed?

Only if you're also sending conversions via OpenAI's Conversions API (server-side). For most lead generation setups using only the browser pixel on a thank-you page, deduplication is not required — the SDK auto-generates event IDs.


🚀 Ready to grow with ChatGPT Ads?

Let Zigma Handle Your
ChatGPT Ad Strategy

Setting up conversion tracking is just the start. Our team builds, manages, and optimizes ChatGPT campaigns for Canadian businesses — with full pixel setup, GA4 integration, and call tracking included.

✅ ChatGPT Ads Setup ✅ Full Conversion Tracking ✅ GA4 + Call Tracking ✅ Canadian Businesses