ChatGPT Ads Conversions API: Setup and Verification
The pixel alone isn't enough. Here's how to implement the ChatGPT Ads Conversions API so your server-side events reach OpenAI accurately — and how to verify it's working before you scale spend.
- Why the pixel alone loses 20–35% of conversion events
- The three CAPI implementation methods and when to use each
- Required customer data parameters for high match rates
- How to verify your CAPI is working correctly before scaling
Why CAPI is non-negotiable
Browser-based pixels fire from the user's browser. That means they're subject to ad blockers, iOS Intelligent Tracking Prevention, cookie consent rejections, and browser crashes. The result: a meaningful percentage of your real conversions never get reported to ChatGPT Ads — and the algorithm optimises toward incomplete data.
The Conversions API bypasses all of this by sending event data directly from your server to OpenAI's endpoint. The user's browser doesn't need to do anything. The event fires reliably, every time.
OpenAI's CAPI architecture closely mirrors Meta's Conversions API — same hashing requirements (SHA-256), similar event schema, similar deduplication logic using event_id. If your dev team has implemented Meta CAPI before, the adaptation is straightforward.
Three implementation methods
Method 1: Direct API integration (recommended for developers)
Your backend sends a POST request to OpenAI's CAPI endpoint every time a conversion event fires. This is the most reliable implementation — no third-party dependencies.
POST https://ads-api.openai.com/v1/events
{
"pixel_id": "YOUR_PIXEL_ID",
"access_token": "YOUR_ACCESS_TOKEN",
"data": [{
"event_name": "Purchase",
"event_time": 1716393600,
"event_id": "unique-event-id-123",
"user_data": {
"em": ["hashed_email"],
"ph": ["hashed_phone"],
"client_ip_address": "123.45.67.89"
},
"custom_data": {
"value": 149.00,
"currency": "USD"
}
}]
}Method 2: GTM server-side container
If your team uses Google Tag Manager, a server-side GTM container can route events to OpenAI's endpoint without custom dev work. This is the fastest path to CAPI for non-technical teams.
- Set up a GTM server-side container (requires a server endpoint — use Google Cloud Run or a similar host)
- Install the OpenAI CAPI tag template from the GTM Template Gallery
- Configure triggers to fire on your key conversion events
- Map user data parameters (email, phone, IP) to the tag
Method 3: Platform native integration
Shopify, WooCommerce, and major CRMs have native integrations that connect directly to OpenAI's CAPI endpoint. Install the app/plugin, connect your ChatGPT Ads pixel ID, and events fire automatically on purchase and lead events.
Customer data parameters
CAPI's match rate depends on how much user data you send with each event. OpenAI hashes all customer data before it reaches their systems — you're sending SHA-256 hashed values, never raw PII.
Priority order for match rate:
- Email (em): Highest match rate. Lowercase and trim before hashing.
- Phone (ph): Include country code, digits only, before hashing.
- Client IP address: Available on all server-side requests — always include.
- User agent: Pass the original browser user agent string from the request headers.
- External ID: Your internal user ID — helps with repeat visitor matching.
Sending CAPI events without customer data parameters. An event with no user data signals has a near-zero match rate — OpenAI can't connect the server event to an ad impression without at least one user identifier. Always pass at minimum email or IP + user agent.
Deduplication
Running both pixel and CAPI means you're sending the same event twice. Without deduplication, ChatGPT Ads counts both — inflating your conversion numbers by up to 2x.
The fix: use a unique event_id on every event, in both the pixel and the CAPI call. The value must be identical for the same event. OpenAI will match and deduplicate them automatically.
Verifying your CAPI setup
In ChatGPT Ads Manager → Events Manager, you'll see:
- Event status: Active, Inactive, or Warning
- Match quality score: How well your user data is being matched (aim for 7+/10)
- Deduplication rate: Percentage of events being deduplicated (confirms dual-layer is working)
- Event breakdown: Browser vs server events, by event type
Before scaling any ChatGPT Ads spend, run a 7-day CAPI validation period. Compare CAPI-reported conversions against your backend order/lead data. They should match within 5–10%. Any larger discrepancy means events are either not firing, not being matched, or being double-counted.