August 20, 2026 · 7 min read
How to Know If Your GA4 Is Tracking Correctly
Most GA4 properties have at least one tracking problem quietly skewing every report. Here is how to confirm whether yours is one of them.
Read articlePaid Media
August 23, 2026 · 8 min read

That question splits into two very different questions, and most accounts cannot tell which one they are asking.
Either your ChatGPT ads are genuinely not producing business, or they are producing it and nothing is carrying the evidence back to you. Those two situations look identical in Ads Manager. They call for opposite responses. Pausing a campaign that is quietly working is as expensive as funding one that is not.
So before you rewrite the creative, work out which problem you have. In most accounts we look at, the measurement is broken first and the media question cannot be answered until it is fixed.
Frequently it is not. When someone clicks an ad in ChatGPT, OpenAI appends a parameter called oppref to your landing page URL. It is the ChatGPT equivalent of Google's GCLID or Meta's fbclid: a reference to one specific click, and the only thing that can tie a later conversion back to the campaign, ad group, and ad that earned it.
It is also easy to lose, and it disappears silently.
A redirect eats it. If your landing page URL passes through a link shortener, a geo redirect, a www to non www rule, or a consent gateway, and that hop does not forward query parameters, oppref is gone before the page loads. The visitor still arrives. The attribution does not.
The pixel loads too late. OpenAI's measurement pixel is what reads oppref off the URL and writes it into a first party cookie. Placed at the bottom of the body instead of in the head, it initialises after the page has already worked through its early events and can miss them.
The cookie write is blocked. Where a browser or a consent configuration blocks that write, you get a distinctive symptom: conversions that happen in one uninterrupted session attribute correctly, and conversions that involve leaving and coming back attribute to nothing.
That last symptom is the most useful diagnostic on this list. If your single session conversions look fine and everything else reports as unattributed, the parameter is arriving and the storage is failing. If nothing attributes at all, the parameter is being lost before your page ever loads.
If the measurement pixel is the only thing sending conversions, then yes, and you are reporting on the subset of buyers whose browser cooperated. You cannot size that gap from inside Ads Manager, because Ads Manager only knows about what reached it. The server side Conversions API is what closes it.
That subset excludes anyone running an ad blocker or strict tracking prevention. It excludes anyone who called you instead of filling in the form. It excludes every deal that closes later in your CRM, which for most considered purchases is the majority of the revenue. And it excludes anyone whose session ended before they reached the confirmation page you put the tag on.
It sends the same events machine to machine rather than depending on the browser. Run it alongside the pixel rather than instead of it, and pass the same event id through both, so OpenAI recognises the pair as one conversion rather than counting it twice.
If your reported conversions are few or unattributed, no. This is the reason underperformance becomes self reinforcing: delivery optimises against the conversions you report, so a thin signal sends it back to buying the cheapest clicks it can find rather than the valuable ones.
Conversion optimised delivery works by studying the conversions you report and finding more people like them. Report few conversions, or report conversions with no click attached, and the system has nothing to pattern match against. It falls back to what it can measure, which is clicks, and it buys you the cheapest ones rather than the valuable ones.
So a broken measurement setup does not merely hide performance. It actively degrades it. The account really is getting worse, and fixing the reporting is what stops the decline.
Two details matter here. Map your actions to the platform's standard event names wherever one fits, because standard events are what delivery can optimise against and a custom event gives the system less to work with. And send hashed customer data with your server side events. Conversions match back to clicks far more reliably when they carry a hashed email or phone, in the normalised form the platform expects, hashed inside your own infrastructure so raw customer data never leaves it.
Suppose the tracking is perfect. The channel can still look like a failure in a report that was never built to see it. Ads in ChatGPT tend to open buying journeys rather than close them, and a last click model gives the opener nothing. Add cross device gaps and mismatched attribution windows and the numbers will never tie.
Ads in ChatGPT reach people mid conversation, while they are working a problem out. That is often the start of a buying journey rather than the end of one. In a last click model, the channel that opens the journey gets nothing and the branded search that closes it gets everything. Your ChatGPT campaigns will look weak precisely when they are doing the hardest part of the work.
Cross device makes it worse. Someone researches on a phone, thinks about it, and books a demo on a laptop four days later.
There is also a reconciliation trap. ChatGPT ads count click through conversions against the click window configured on your account, and view through conversions, where available, against a fixed one day window after an eligible impression. Those windows do not match how Google Ads or Meta count the same sale. Three platforms will report three different numbers for one purchase and all three will be right. Most arguments about whether a new channel works are really arguments about mismatched attribution windows.
Sometimes, yes. It would be convenient for us if every case were tracking. It is not. This is a young platform with publicly reported delivery and reporting problems, and the two most common self inflicted versions are importing a paid search playbook into a conversational surface and sending research mode clicks to a page built to close.
This is a young platform. Advertisers have publicly reported thin reporting, campaigns under delivering against committed budgets, and click through rates well below what the same brands see on Google search. Some of that is the channel maturing. Some of it is a genuine mismatch between the ad and the moment.
The most common self inflicted version is importing your paid search playbook wholesale. You are not bidding on keywords here. You are describing the conversation you want to appear inside, and copy written as a keyword stuffed search ad reads as an interruption in a context where people are mid thought.
The second is the landing page. Clicks from a conversational surface arrive in research mode. Sent to a page built to close, they bounce, and the bounce gets blamed on the channel.
Both are real problems. Neither can be diagnosed while your conversion data is wrong, which is why measurement comes first.
You can narrow this down in an afternoon, with four checks. Confirm the click identifier is arriving and being stored. Split your conversions by session depth. Reconcile a month of closed business against Ads Manager. Then look at what your campaigns are actually optimising toward.
Confirm the click arrives. Click your own ad, or load your landing page with the click parameter appended by hand. Open developer tools, look at cookies for your domain, and check whether a first party __oppref cookie exists. If it does not, either the pixel is missing, it is loading too late, or a redirect stripped the parameter.
Split your conversions by session depth. If people who convert on the landing page attribute correctly and everyone else does not, your problem is storage, not capture.
Reconcile against your own books. Take last month's closed business, count how much of it came from ChatGPT ads according to your CRM, and compare that to what Ads Manager reported. The size of the gap tells you how much of your performance problem is a reporting problem.
Check what you are asking delivery to optimise for. If your campaigns are optimising toward clicks because there was never enough conversion signal to do anything else, that alone explains a lot of what you are seeing.
Capture oppref on arrival and persist it to first party storage, then carry it onto your forms and into your CRM as a stored field, so a sale that closes six weeks from now still knows which ad started it. Install the measurement pixel where it loads early. Run the Conversions API in parallel, sharing an event id with the pixel so the two deduplicate. Send hashed match data. Map to standard events. Then document the attribution windows so nobody spends a quarter arguing about why three platforms disagree.
None of this is a large build. It is the difference between a test budget that produces an answer and one that produces an argument.
Check whether the conversions are missing or merely unreported before you touch the campaign. The usual cause is that the oppref click parameter is not surviving to your conversion event, so the sale happens but nothing connects it to the ad. Load your landing page with the parameter attached and confirm a first party __oppref cookie is written. If it is not, a redirect is stripping the parameter or the measurement pixel is loading too late to catch it.
oppref is the click identifier OpenAI appends to your landing page URL when someone clicks an ad, the same role GCLID plays for Google Ads and fbclid for Meta. Without it the platform can still count that a conversion happened, but it cannot tell you which campaign, ad group, or ad produced it, and conversion optimised delivery has nothing useful to learn from. Capturing and persisting it is the highest value step in the whole setup.
In practice, yes. The pixel runs in the browser, so ad blockers, tracking prevention, phone conversions, and deals that close later in your CRM are all invisible to it. The Conversions API sends the same events server to server, which is far more reliable. Run both and pass a shared event id through each, and the platform deduplicates the pair rather than double counting it.
Some gap is normal, because the platform only counts conversions it can attribute to a click it served, inside its own attribution windows. A large gap usually means one of three things: the click identifier is being lost before conversion, you are reporting from the browser only, or you are comparing a last click platform report against a CRM that credits the whole journey. Reconciling one month of closed business against Ads Manager will tell you which.
Long enough for delivery to have real conversion signal to optimise against, which means the measurement has to be correct from the first day rather than fixed halfway through. A test run on broken tracking does not produce a slow answer, it produces no answer, because the algorithm spent the budget optimising toward the wrong thing and the report cannot tell you what happened.
That depends on whether your buyers are there, and it is a media question rather than a tracking one. What we can say is that running the channel without measurement is the expensive way to find out. Correct tracking is what turns a test budget into evidence you can act on instead of a line item nobody can defend.
Pixel, oppref click capture, and server-side Conversions API setup so your ChatGPT ad spend reports real conversions.
August 20, 2026 · 7 min read
Most GA4 properties have at least one tracking problem quietly skewing every report. Here is how to confirm whether yours is one of them.
Read article
Analytics & TrackingAugust 18, 2026 · 7 min read
What a professional GA4 audit reviews, the problems it usually surfaces, and what changes in your reporting once they are fixed.
Read article
Analytics & TrackingAugust 13, 2026 · 7 min read
Containers rarely break all at once. They accumulate. Here are the symptoms that mean yours needs attention.
Read article