Good ChatGPT ads tracking is three decisions: install both the pixel and the Conversions API so you lose nothing, track three to five events that map to real value, and dedupe them with shared event IDs so one action never counts twice. Attribution to the click side runs on static UTMs, because the platform does not support dynamic parameters. Get these right before you spend, because a week of untracked traffic teaches you nothing.
Pixel or Conversions API
Use both, because they cover each other's blind spots. The pixel is a snippet on your site that captures events in the browser, fast to install but vulnerable to ad blockers and lost cookies. The Conversions API sends the same events from your server, which survives all of that but needs a developer. Together they give you a complete, deduplicated picture; either one alone leaves conversions on the table.
The three to five events worth tracking
More events is not better tracking, it is more noise. Pick a short chain that mirrors how people actually buy from you:
- +A leading signal that happens often, like a lead form start, an add-to-cart, or a key page view.
- +The primary conversion that represents real value, a purchase or a qualified lead.
- +One or two steps in between if your funnel is long, so you can see where drop-off happens.
These are also the events the auction learns from once you move to conversion-based bidding, so keep them to genuine value, not vanity clicks.
Deduping with shared event IDs
When both the pixel and the Conversions API report the same purchase, the platform needs to know it is one event, not two. You do that by sending the same unique event ID from both sources for the same action. Skip this and your conversions inflate, your cost-per-result looks better than it is, and you optimise toward a number that is not real. It is a small implementation detail with an outsized effect on whether you can trust your own reporting.
Static UTMs only
The platform does not support dynamic URL parameters, so every tracking value has to be written into the landing URL by hand. That is not a limitation to work around, it is a discipline to adopt: use one consistent naming convention across every ad so the traffic stays joinable in your analytics. The reason this matters more here than on other channels, and how much AI traffic hides even when your tracking is perfect, is covered in the measurement guide. When you would rather it were done for you, we set tracking up as part of the build.

