Updated 25 October 2026.
The native report in OpenAI’s Ads Manager gives you six columns a day (impressions, clicks, spend, CTR, average CPC, average CPM) and no conversions at all. Measuring ChatGPT Ads conversions therefore means adding three layers: the OpenAI Pixel or the Conversions API to send events, a UTM convention so every click can be found in your analytics tool, and CRM reconciliation to carry a click all the way to an opportunity.
What the native report leaves out
The native report delivers six delivery metrics, per day, per campaign, ad group and ad, and nothing about what happens after the click. It says nothing either about what triggered the impression.
Impressions, clicks, spend, CTR, average CPC and average CPM are all there. Conversions are not: they come from the OpenAI Pixel and the Conversions API. As for the triggering queries or conversations, placement data and demographic breakdown, they exist nowhere on the advertiser side, because OpenAI shares none of it. The same goes for industry benchmarks, which OpenAI does not publish.
Two things follow. First, your account structure becomes your only analysis tool: one ad group per family of intent, or the six columns cannot be interpreted. Second, conversion is measured on your side and never on OpenAI’s, which is what the rest of this guide is about.
Pixel or Conversions API: where to start?
Start with the Pixel, then make it reliable with the Conversions API. The Pixel goes in within an afternoon on the browser side; the Conversions API sends events from your server and survives ad blockers as well as lost cookies.
| OpenAI Pixel | Conversions API | |
|---|---|---|
| Where it runs | The user’s browser | Your server or CRM |
| Setup | One script on the pages, one call per event | Server-side development |
| Fragility | Blockers, refused consent, cleared cookies | Low, the event leaves from your system |
| What it enables | Conversions objective, fast first numbers | Late events: qualified opportunity, closed deal |
| Recommended order | First | Next, without removing the Pixel |
The procedure comes down to five steps.
- Install the Pixel on every page of the site, not only on the landing page.
- Fire the main event on the conversion page or action, never when the landing page merely loads.
- Test with a real click from an approved ad and check that the event shows up.
- Connect the Conversions API for everything that happens outside the browser: qualified opportunity, server-validated order, attended appointment.
- Deduplicate, because the same event sent by both the Pixel and the API must carry the same identifier.
Until the Pixel reports something, the Conversions objective has nothing to optimise on. Launch on Clicks, and switch to Conversions once the events are verified.
One UTM convention, and only one
Use a single convention on every ad from day one: it gives you, in your analytics tool, what the native report does not, namely post-click behaviour by ad and by family of intent.
| Parameter | Value | Example |
|---|---|---|
utm_source |
chatgpt |
utm_source=chatgpt |
utm_medium |
cpc or cpm depending on the objective |
utm_medium=cpc |
utm_campaign |
Exact campaign name | utm_campaign=leadgen-uk-q4 |
utm_content |
Ad identifier or angle | utm_content=title-pricing-v2 |
utm_term |
The ad group’s family of intent | utm_term=compare-tools |
Write everything in lowercase with no spaces. Have utm_campaign repeat the exact campaign name from Ads Manager, otherwise reconciliation turns into manual work. And treat utm_term as the carrier of intent rather than a keyword: it is the most useful dimension of the channel, and the only one you can create yourself.
Which events should you track for your model?
One main event, which defines success, and secondary events, which show where the journey breaks. The main one depends on the business model.
| Model | Main event | Secondary events |
|---|---|---|
| Lead gen | lead_created |
page_viewed, appointment_scheduled |
| SaaS | trial_started or subscription_created |
registration_completed, lead_created |
| E-commerce | order_created |
checkout_started, items_added, contents_viewed |
| Local service | appointment_scheduled |
lead_created, page_viewed |
The classic trap is to optimise on an event that sits too early in the journey. page_viewed comes in quickly and in volume, but it cannot tell a visitor from a buyer. If the main event is rare at launch, keep it as the main event and read the secondary ones to diagnose; redefining success to get more comfortable numbers is the worst way out.
From click to opportunity through the CRM
To tie a click to an opportunity, store the UTMs on the contact when the form is submitted, then follow them through the CRM. Without that, you are measuring leads, not value.
- Capture the five UTM parameters in hidden form fields and write them to the CRM contact record at creation, never overwriting them.
- Link the contact to the opportunity, then to its stage: qualified, demo done, won, lost.
- Send the late stages back to Ads Manager through the Conversions API, with the click identifier if you kept it.
- Read a five-column table every week: family of intent, clicks, leads, opportunities, cost per opportunity.
That reading is what settles things. One ad group can show the best CTR in the account and produce no opportunity at all, while another costs more per click and closes; the native report cannot see the difference, the CRM can.
The HR SaaS case published in Leverage’s September 2026 white paper reads exactly this way: over 30 qualified demos a month, 12 SQLs, a CPL of around €250, a demo-to-SQL conversion rate above 70% and a final customer CAC 22% below Google Ads. It must not be taken as a promise of generalisable results. What it shows is what CRM reconciliation lets you say, and what a six-column report never will.
How do you read the first numbers?
With six signals, each tied to a diagnosis and an action; most first-week problems are in this table.
| Signal | Likely diagnosis | Action |
|---|---|---|
| Low impressions | Intent too narrow, small market, review or policy pending, budget | Widen hints, check status, add ad groups |
| Low CTR | Unhelpful copy, poor alignment with intent | Rewrite title and body, test other angles |
| Clicks without conversions | Weak page, broken promise, broken tracking | Align the page, build one page per intent, retest the Pixel |
| High CPC | Bid, competition or insufficient relevance | Improve relevance, compare CPM and CPC |
| Conversions not reported | Incomplete tracking | QA Pixel, Conversions API and UTM |
| Rejection | Ad policy or landing page | Fix assets and destination |
Read these signals in journey order: delivery, click, conversion. A campaign with no impressions does not have a landing page problem. One that has clicks and zero conversions has a tracking problem to rule out first, and only then a page problem.
That leaves the question of what a “normal” CPC is. Since OpenAI publishes no benchmarks, we compare a CPC against the Hiints Index, our base of sector benchmarks built on our own accounts.
The landing page is the second suspect after tracking: ChatGPT Ads landing pages. If the campaign is not live yet, start with creating your first campaign. Throughout all of this the CRM stays yours: we do not replace it, we wire it into the channel.