GPT Ads
ChatGPT Ads

How to tell if your ChatGPT pixel is actually working

A ten minute check for whether your ChatGPT Ads pixel is sending usable data, with no developer required.

By 5 min read

A magnifying glass held over a sealed packet, revealing the data inside it

A broken conversion pixel looks exactly like a working one.

That's the whole problem. There's no error message, no red banner in your Shopify admin, no email. The requests go out, the server answers with a success code, and your store keeps taking orders. The only symptom is a number in your ads dashboard that's a bit lower than you expected — and a number that's a bit lower than you expected is indistinguishable from advertising that isn't working very well.

I've spent a lot of time inside these requests, and I want to give you the check I actually use. It takes about ten minutes and needs no developer.


Why "it returned 200" proves nothing#

The browser pixel sends conversion data as a URL. Something like this, with the details trimmed:

https://bzr.openai.com/v1/sdk/events
  ?pid=YOUR-PIXEL-ID
  &event=order_created
  &event_id=order_created_a91f3c
  &oppref=Cj0KCQiA-example
  &data[type]=contents
  &data[amount]=12999
  &data[currency]=USD

Send that with the amount in the wrong format, the wrong event name, or the click reference missing entirely, and you still get a success response. The endpoint accepts the request. Whether the data inside it is usable is a separate question, and nothing in the response tells you.

So "I can see requests going out" is not evidence your tracking works. You have to look inside them.


The ten-minute check#

Do these in order on your live store. You'll need a way to see the events — I'll come to that.

1. Does anything fire at all?#

Load a product page. You should see at least a page_viewed event, and on a product page usually a contents_viewed too.

Nothing at all means the pixel isn't installed, isn't enabled, or is being blocked in your own browser. Try again with extensions disabled before you assume the worst — I've watched people debug a "broken" pixel that their own ad blocker was eating.

2. Do the right events fire at the right moments?#

Walk the funnel and watch what appears:

You do thisYou should see
Load any pagepage_viewed
Open a productcontents_viewed
Add to cartitems_added
Begin checkoutcheckout_started
Complete an orderorder_created

If order_created never appears, nothing else matters. That's the event your return on ad spend is calculated from.

3. Are the amounts right?#

This one catches more stores than anything except the click reference.

Money must be sent as a whole number in the currency's smallest unit. A $129.99 order is 12999, not 129.99. Look at the amount on your order_created event and check it against the order total:

  • Order is $129.99 and the event says 12999 — correct.
  • Order is $129.99 and the event says 129 — you're reporting $1.29. Every campaign looks a hundred times worse than it is.
  • Order is $129.99 and the event says 129.99 — rejected outright.

If you sell in Japanese yen, there is no smaller unit, so ¥5000 is 5000. Kuwaiti dinar goes the other way and uses three decimal places. If you sell in either, check this specifically — a rule written for dollars will be wrong.

4. Does the click reference travel?#

This is the one nobody finds on their own.

Visit your own store with a fake click reference on the end of the URL:

https://yourstore.com/?oppref=TEST-12345

Now browse normally, add something to cart, and complete an order. On the order_created event, look for oppref. If TEST-12345 is there, the chain holds. If it's missing, your purchases are arriving as anonymous conversions — ChatGPT can see the sale but can't credit it to your ad.

Then do it again, but check out with Shop Pay, Apple Pay or Google Pay from the product page, skipping the cart entirely. This is where most setups break, because express checkout never creates a cart and anything stored on the cart never arrives. If the first test passes and the second fails, you've found it.

5. Does the purchase arrive exactly once?#

If you send purchases from your server as well as the browser — and you should — place one test order and count the order_created events.

  • Two events, same event ID: correct. ChatGPT matches on pixel ID, event name and that ID, keeps the first, discards the second. One conversion.
  • Two events, different IDs: you're double-counting. Your conversions double and your reported cost per acquisition halves, which looks like great news right up until you scale spend on it.
  • One event: fine, but you're browser-only and losing some purchases to ad blockers and privacy settings.

How to actually see the events#

You can find these requests in Chrome's DevTools Network tab if you filter for the endpoint, but you'll be reading raw URLs and decoding amounts in your head, which is miserable.

I built a free Chrome extension for this instead. It opens as a side panel next to your store, lists every event as it fires, decodes what's inside, and flags the mistakes above — decimal amounts, missing currency, absent click reference, fields that don't belong. It works on any site running a ChatGPT Ads pixel, whatever platform you're on.

It's how I found the express checkout problem on my own store, and it's the difference between "the numbers look wrong" and "this specific event is missing this specific field."


What healthy looks like#

For reference, here's a purchase event with nothing wrong with it:

{
  "event": "order_created",
  "event_id": "order_created_a91f3c",
  "oppref": "Cj0KCQiA-example",
  "data": {
    "type": "contents",
    "amount": 12999,
    "currency": "USD",
    "contents": [
      { "id": "SKU-402", "name": "Trail Shell", "quantity": 1, "amount": 12999 }
    ]
  }
}

Whole-number amount. Currency alongside it. Click reference present. An event ID so the server copy doesn't double-count. Contents describing what was bought.

If your purchase events look like that, your tracking is sound and you can trust what the dashboard tells you.


Do this before you judge a campaign#

The reason I'd spend ten minutes on this rather than ten minutes reading reports: every decision you make downstream depends on these numbers being right.

A campaign showing a 1.4x return gets paused. That's the correct call — if the number is real. If half your conversions weren't counted, the true figure was 2.8x, and you just switched off the thing that was working. You'll never know, because there's no version of the report that tells you what it missed.

Check the plumbing first. Then trust the numbers.


I build LLM Pixels, a Shopify app for ChatGPT Ads conversion tracking. The Chrome extension is free and works on any store.