Many people are aware that OpenAI opened up its self-serve ad buying channel about two months ago.

Aimerce launched an OpenAI CAPI integration about a month ago — the moment we got beta access.

If you remember relying on the Meta pixel before server-side tracking existed, it's the same situation here: the pixel alone won't cut it. ChatGPT's pixel has the same limitations as every other browser-side pixel, ad blockers, Safari, iOS. The fix is the same too: server-side tracking via the Conversions API.
That's why we built:
→ New OpenAI CAPI setup page in your Aimerce dashboard, connect and verify your integration in minutes, no developers needed.
→ Click ID capture - Aimerce captures OpenAI's click ID when a user arrives from a ChatGPT ad and persists it across sessions, so purchases are attributed back to the right campaign.
→ Spec-compliant payloads - conversion events send customer fields and transaction amounts exactly to OpenAI's spec, so your data feeds their algorithm cleanly.
→ Catalog sync to OpenAI's product feed via SFTP.
What conversion events does OpenAI Ads actually support?
OpenAI's Conversions API and pixel share the same taxonomy: 11 standard event names, split across 4 data shapes. Ten map to a specific shopper action, and the eleventh, custom, covers anything outside that list.
Here's the complete reference, more detail than OpenAI's own docs page shows in one place:
Complete OpenAI Ads Event Reference
Event name | Data shape | Fires when | Typical Shopify trigger | Notes |
|---|---|---|---|---|
| contents | A purchase completes | Order confirmation page | Include amount + currency to report revenue |
| contents | A user begins checkout | Checkout page load | amount + currency recommended for funnel value |
| contents | An item is added to a cart, bundle, or selection | Add to cart click | amount + currency recommended |
| contents | A user views a specific product or content item | Product detail page | Use contents[] to identify the specific item |
| contents | A user lands on or views an important page | Any page load worth counting | No fields required beyond type |
| customer_action | A user submits a lead form or requests contact | Contact/lead form submit | No fields required beyond type |
| customer_action | A user finishes account or event registration | Account creation confirmation | No fields required beyond type |
| customer_action | A user books a meeting, demo, or consultation | Booking confirmation | Add amount + currency if the booking is priced |
| plan_enrollment | A paid subscription starts | Subscription checkout confirmation | plan_id recommended, plus amount + currency |
| plan_enrollment | A free trial starts | Trial signup confirmation | plan_id recommended |
| custom | Anything outside the standard taxonomy | Store-specific action | Set custom_event_name in eventOptions, not eventProps |
One detail that trips people up: custom_event_name and event_id both belong in eventOptions, not in the eventProps object where everything else lives.
Thoughts
Test now while it's underpriced. Self-serve killed the $50K minimum; early CPCs are a temporary inefficiency. Best fit: software, education, professional services, DTC categories people research conversationally. Restricted or impulse categories should skip it.
Don't judge by CTR. 0.91% looks bad against search, but the ad appears after the answer (a non-click after a complete answer means the answer worked). Track dismissal rate, ad-unit engagement, and cost per qualified visit instead of CPC.
Build your own attribution and conversion tracking. Until click-based pricing and the LiveRamp partnership mature, use post-purchase surveys, dedicated landing pages, and geo holdouts.
Match ad to conversation. Invest in context signals so your ad reads as a suggestion, not an interruption.
Price in the trust discount. If 57% of consumers say chatbot ads make them trust the advertised brand less, early presence carries brand risk, smallest where your product feels native to the chat, largest where it doesn't.
Here to help you win ✌️
Yiqi

