
OpenAI opened self-serve ChatGPT Ads to US businesses in July 2026, and within weeks we started getting the same message from clients: the campaigns are spending, the dashboard shows clicks, and nothing shows up in GA4. Then the CFO asks what the channel actually produced and the honest answer is "we don't know."
Here's the short version. ChatGPT Ads conversion tracking does not work out of the box. You need three things running at once: the OAIQ pixel in the browser, the Conversions API on your server, and static UTMs feeding a custom GA4 channel group. Install only the pixel and you'll lose conversions to ad blockers and cross-device journeys. Install only UTMs and OpenAI's bidding algorithm optimizes blind. Skip the GA4 channel group and 71% of the traffic silently reports as direct.
This is the setup we ship, and the specific places it breaks.
Why Does ChatGPT Ads Traffic Show Up as Direct in GA4?
Because the referrer usually doesn't survive the click.
An Attrifast analysis of 41.2 million sessions found that 71% of ChatGPT visits land in GA4 as direct — no referrer, no source, nothing to identify the origin. Clicks from the ChatGPT mobile app lose referrer data completely. And when ChatGPT does pass a utm_source without a matching utm_medium, GA4 dumps the session into Unassigned instead of any real channel.
There's a second trap that catches people who already know about the first one. GA4 evaluates channel group rules top to bottom and stops at the first match. If your shiny new "AI Paid" channel sits below Referral in the list, any session that does arrive with a chatgpt.com referrer matches Referral first, and your custom channel never fires at all. We've audited accounts where the rule was written perfectly and reported zero for six weeks purely because of row order.
This is the same class of problem we wrote about in how AI browsers are breaking ad attribution — the click is real, the revenue is real, and the measurement layer just doesn't see it.
What Is the OAIQ Pixel?
OAIQ is OpenAI's browser-side measurement SDK, and it's the piece that makes ChatGPT Ads Manager able to report a conversion at all.
You load it from OpenAI's CDN and initialize it with the Pixel ID you create in the conversions tab of Ads Manager:
<script async src="https://bzrcdn.openai.com/sdk/oaiq.min.js"></script>
<script>
oaiq("init", { pixelId: "YOUR-PIXEL-ID" });
</script>
Three things happen once it's live:
- It fires
page_viewedautomatically on every page it loads on, so install it site-wide in the<head>, not just on your thank-you page. - It captures
oppreffrom the landing page URL. OpenAI appends this privacy-preserving click identifier when someone clicks your ad. The SDK reads it and writes it into a first-party cookie named__opprefon your domain, with roughly a 30-day lifetime. That cookie is the thread connecting a click on Tuesday to a purchase two weeks later. - It exposes a consent control via
oaiq("consent", false), which you'll need if you're running a consent management platform. If you already fought through GA4 consent mode dropping your conversions, wire this into the same consent state rather than bolting on a second system.
Then you fire measure calls where conversions actually happen. OpenAI ships standard event names that map onto most funnels — lead_created, appointment_scheduled, registration_completed, trial_started, subscription_created, checkout_started, items_added, contents_viewed, order_created, plus a custom escape hatch.
For a service business, lead_created and appointment_scheduled are the two that matter. For ecommerce it's order_created with real revenue attached. The full event shapes are in OpenAI's measurement pixel documentation.
Why the Pixel Alone Isn't Enough
Because a browser pixel is the least reliable place to measure anything in 2026.
Ad blockers kill it. Safari's tracking prevention caps first-party cookie lifetime well under the 30 days you're counting on. Someone researches on their phone inside the ChatGPT app, then converts three days later on a laptop, and the __oppref cookie isn't there. Every one of those is a real conversion that OpenAI's bidding algorithm never learns about — so it keeps optimizing toward the wrong audiences with your money.
The fix is the Conversions API: send the same events from your server, where nothing can block them.
The critical detail is deduplication. Generate one event_id per conversion and send that identical ID on both the browser event and the server event. OpenAI matches on Pixel ID, event name, and event_id, and collapses the pair into a single conversion. Get this wrong and you double-count every conversion that fires successfully in both places, which inflates your reported ROAS and quietly corrupts the optimization signal.
If this sounds familiar, it should — it's the same architecture as Meta's Conversions API setup, down to the dedup key. Which is genuinely good news: if you already run a server-side GTM container, you have the infrastructure. You're adding one more outbound tag to a pipeline that already exists, not building a new one.
What UTMs Should I Use for ChatGPT Ads?
Static ones, hard-coded onto the landing page URL in the ad itself. Never rely on OpenAI to pass parameters for you.
We standardize on:
utm_source=chatgpt— the platform, kept lowercase and consistent forever, because GA4 treatsChatGPTandchatgptas different sources and you will never fully clean that up later.utm_medium=paid-ai— deliberately notcpc. This is the one that earns its keep. It gives you a single medium that cleanly separates paid AI placements from paid search, and as Perplexity and Google AI Mode open their own ad inventory you extend the same medium instead of redesigning your reporting.utm_campaign,utm_content— campaign and creative level, matching whatever naming convention your other channels already use.
Then build the GA4 custom channel group under Admin → Data display → Channel groups, matching utm_medium = paid-ai, and drag it above Referral in the ordering. Test it with a real click before you trust a single number.
One warning worth stating plainly: keep paid ChatGPT traffic and organic ChatGPT referrals in separate channels. They're completely different things — one is a media buy you control, the other is your GEO and content work paying off. Blending them into one "ChatGPT" bucket is the fastest way to convince yourself an ad campaign is working when it's really your blog getting cited.
How Do You Tie ChatGPT Ads to Actual Revenue?
The pixel and GA4 get you channel-level reporting. They don't get you closed revenue, and for anyone with a sales team that's the only number that matters.
ChatGPT Ads sit at the top of a research-heavy funnel by design. People ask an assistant for options, click through, and buy days or weeks later. That gap is exactly where last-click reporting falls apart and the channel looks worthless.
This is where a dedicated attribution layer stops being optional. Push the oppref value into a hidden field on your lead forms and carry it through to your CRM alongside the UTMs. Now the ad click, the lead, and the closed deal share one identifier, and you can answer "what did ChatGPT Ads produce in signed revenue last quarter" instead of "how many sessions did it send." We do this with Hyros for clients who need call and CRM data stitched in — the Hyros attribution setup is the same pattern, just with a new source parameter to capture.
Whatever tool you use, the principle holds: if the click identifier doesn't reach your CRM, you're measuring traffic, not marketing.
The Order to Do This In
Sequence matters here, because doing it out of order means launching campaigns you can't evaluate:
- Create the Pixel ID first. Ads Manager → conversions tab. Nothing else works without it.
- Install OAIQ site-wide in the
<head>, before you spend a dollar. Retroactive tracking doesn't exist. - Add
measureevents on your real conversion pages with uniqueevent_idvalues you can also reach server-side. - Stand up the Conversions API feed with matching
event_ids. Verify dedup in Ads Manager before scaling spend. - Tag URLs, build the GA4 channel, fix the row order, and click your own ad to confirm the session lands where it should.
- Pipe
opprefinto your CRM so revenue closes the loop.
Steps 1 through 5 are roughly a half-day if you already have server-side GTM running. Step 6 is where most teams stall — and it's the one that determines whether this channel gets budget next quarter or gets cut.
Is It Worth Running ChatGPT Ads at All Right Now?
Cautiously, yes — with tracking built first, not bolted on after.
Reported entry bids land around $3 to $5 per click with CPMs roughly in the $25 to $60 range, and the $200,000 pilot minimum is gone. Inventory is young, which historically means efficiency before the auction fills up. But intent quality varies enormously by vertical, and you cannot judge it on ChatGPT's own reported numbers alone.
Our honest read: treat the first 30 days as a measurement build, not a performance test. Get the pixel, the API, GA4, and the CRM handoff agreeing with each other. Then judge the channel. Teams that skip that order spend eight weeks debating whose dashboard is lying instead of whether the ads work.
The pattern isn't new. Every channel we've onboarded — Meta, Google, TikTok — followed the same arc: tracking breaks quietly, reported performance looks worse than reality, budget gets cut before the channel had a fair shot. The teams that win are the ones who fix measurement first.
Get Your ChatGPT Ads Tracking Audited
If you're already spending on ChatGPT Ads and your GA4 and Ads Manager numbers don't reconcile, that gap is costing you real budget decisions — not just reporting hygiene.
We'll audit the whole chain: pixel installation, event coverage, Conversions API dedup, UTM consistency, GA4 channel ordering, and whether the click identifier survives all the way into your CRM. You'll get a specific list of what's broken and what it's costing you.
Get a Free Automation Audit — no pitch deck, just the findings.