The short answer
Install the OpenAI Pixel sitewide and fire one meaningful conversion event from it. Add the Conversions API so the same event arrives server side and survives blocked scripts. Preserve the oppref click reference through the whole journey so clicks and conversions can be matched. Tag every destination URL with UTMs so GA4 and your CRM can see the channel independently. Then reconcile four numbers every month: platform clicks, GA4 sessions, form submissions and CRM records with a ChatGPT source.
If you haven't built the account yet, start with the UK setup guide and come back here before you spend anything.
The OpenAI Pixel
The Pixel is the browser side of measurement. It loads on your site, watches for the events you define and reports them back so OpenAI can connect a conversion to an eligible ad click. Nothing about conversion reporting or conversion bidding works without it.
- Sitewide, on every page, not just the thank you page. Pageview coverage is what lets you see the journey rather than the endpoint.
- Through your tag manager if you have one, gated behind analytics or marketing consent in the regions that require it.
- One standard conversion event that means something commercially. Lead submitted or meeting booked.
- Deduplicated against the server side event, so the same conversion doesn't get counted twice.
The Conversions API
CAPI sends the same conversion from your server rather than the visitor's browser. It matters more here than on most channels, because B2B journeys are long, browser storage is fragile, and a meaningful share of your audience is running blockers.
Run both together with deduplication rather than choosing one. Browser side catches the immediate conversion with rich context. Server side catches the ones the browser drops, and it can carry an outcome that happens later, such as a lead your sales team actually qualified.
Browser tracking measures what happened on the page. Server tracking measures what happened to the business. On a nine month sales cycle only one of those pays the bills.
If your CRM can post back a qualified lead or an opportunity, that's the version of this channel's performance worth having. Raw form fills tell you the ad worked. Qualified leads tell you the targeting worked.
Advanced Matching, carefully
Automatic Advanced Matching takes supported information from your forms, normalises it and hashes it before it's sent, so conversions can be matched to users more reliably than cookies alone allow. For a B2B lead generation advertiser this is the difference between a matched conversion and a missing one.
- Check your privacy notice actually describes it. Hashing isn't a get-out from disclosure.
- Gate it behind consent where your regions require consent. In DACH particularly, this isn't optional.
- Make sure no raw personal data ever lands in a URL, an analytics event or your attribution storage.
- Expect matching to be imperfect on business email addresses that never touch a consumer OpenAI account.
That last point is worth sitting with. Your buyer signs into ChatGPT with a personal address and fills in your form with a work one. Matching doesn't magically bridge that, and it's one of the quiet reasons platform-reported conversions and CRM reality drift apart on B2B accounts.
Want the whole tracking chain built and QA'd?
Book a 30 minute call. Tell us your stack and we'll be straight about what it takes and what it will still miss.
oppref and UTMs
Every ChatGPT ad click can carry an OpenAI click reference called oppref. Preserve it through the journey and click to conversion matching gets substantially better. Strip it with a redirect on the first hop and you have thrown away the strongest identifier the platform gives you.
// Persist the OpenAI click reference for the whole session
// and carry it onto forms and outbound booking links.
const p = new URLSearchParams(window.location.search);
const oppref = p.get('oppref');
if (oppref) {
sessionStorage.setItem('oppref', oppref);
// Also store alongside first-touch attribution if the
// sales cycle is longer than the session.
localStorage.setItem('oppref_first', oppref);
}Alongside it, tag everything. UTMs are what let GA4 and your CRM see this channel without asking OpenAI's permission:
utm_source=chatgpt
utm_medium=paid
utm_campaign={CAMPAIGN_NAME}
utm_content={ad_id}
utm_term={ad_group_id}
campaign_id={campaign_id}
oppref={oppref}- Redirects. A marketing redirect, a cookie wall or a locale bounce that drops query strings kills both oppref and your UTMs in one go.
- Booking tools. Calendly, HubSpot Meetings and the rest are a new domain and a new session. Append the stored values to the link before the click.
- Single page apps. Read the query string before your router rewrites the URL, not after.
GA4, and why the numbers disagree
Expect a gap between clicks reported in the OpenAI ads manager and sessions arriving in GA4. Several early practitioners have reported it, and Search Engine Land's guidance is to run third party tracking alongside the native Pixel for exactly this reason. A gap is normal. A chasm is a bug.
| Gap | Usual cause |
|---|---|
| Under 15% | Normal. Bounced clicks before the tag fires, blockers, consent refusal. Leave it alone. |
| 15% to 40% | Consent gating heavier than you thought, slow landing page, or the in-app browser handoff. Check page speed on mobile first. |
| Over 40% | Something is broken. A redirect stripping parameters, the tag not firing on the landing page, or a UTM typo splitting the channel into two rows. |
- A custom channel group that puts
chatgpt / paidin its own row rather than lumping it into Unassigned or Paid Other. - Cross-domain measurement covering your booking tool and any CRM hosted forms.
- Referral exclusions for those same domains, so a form handoff doesn't reset the session.
- Engaged session rate and average engagement time as the two quality metrics you watch weekly.
That second pair matters more than usual here. One controlled comparison on a site with roughly 1,500 comparable users found Google Ads traffic at 41 seconds average engagement and a 3.71% conversion rate against ChatGPT Ads traffic at 17 seconds and 0.21%. Whatever your own numbers turn out to be, engagement quality is the early warning you get weeks before the conversion data is thick enough to judge.
CRM, where the real answer lives
Platform conversions tell you an event fired. The CRM tells you whether it was worth having. On a channel this uncertain, judging it from inside the ads manager is how people talk themselves into a second month of bad spend.
- First touch source, medium and campaign, set on create and locked so no workflow overwrites them.
- Latest touch equivalents, free to change.
- The oppref value, stored as plain text. It costs nothing and it's the only key that reconciles cleanly against the platform.
- A visible "how did you hear about us" field. Unfashionable, and the only signal that survives consent refusal and device switching.
Then build one report: closed-won and open pipeline grouped by first touch source, with cost per qualified lead per channel next to it. That single view is what turns a scale, extend or stop decision from an argument into a reading.
Which event to optimise toward
Conversion bidding charges you per click but bids toward the event you nominate, which means your choice of event is effectively an instruction about what kind of person to find. Nominate something cheap and easy and the system will dutifully go and find people who do cheap easy things.
- Lead form submitted
- Meeting booked
- Qualified lead, posted back from the CRM
- Opportunity created
- Button clicks
- Scroll depth
- Time on page
- Newsletter signups, on a high value B2B offer
The QA pass before spend starts
Thirty minutes, done once, saves the month.
Confirm oppref and every UTM survive the landing. Then check they survive the second page too.
The event should appear in the ads manager, in GA4 and on a CRM record. Three places, one action.
Confirm the source lands on the CRM record, not just inside the booking tool.
You should fail cleanly, not silently store something you have no consent for.
Platform clicks against GA4 sessions. Reporting lags several hours, so don't do this on day one.
Read next
Common questions
If you want ChatGPT Ads measurement built to the same standard as the rest of your stack
- OpenAI Pixel sitewide, consent gated, with one commercially meaningful conversion event.
- Conversions API with deduplication, and a CRM postback for qualified leads where the stack allows it.
- oppref persistence through redirects, forms and booking handoffs, plus hidden fields on every form.
- GA4 custom channel group, cross domain and referral exclusions so the channel is visible on its own row.
- A monthly reconciliation of platform clicks, GA4 sessions, submissions and CRM records, with the gap explained.
Starter £1,250/mo, Growth £1,725/mo, Scale £4,025+/mo. Usually two to three weeks inside the retainer. Standalone tracking builds are quoted on the stack involved.

