ChatGPT Ads can optimise toward conversions rather than clicks — but only if something tells OpenAI which of those clicks became customers. Their pixel can see a form submit on your website. It cannot see the deal you closed three weeks later on the phone. Your CRM can, and this integration is what sends it back.
The setup, in one step
Go to Marketing → ChatGPT Ads, paste your OpenAI Ads API key, and press Connect. That is the whole setup. Behind that one button:
- The key is checked, and the ad account it belongs to is read back so you can see which account you just connected.
- A measurement pixel is created in that account.
- A second, narrower key is created that can only report conversions. That is the one the CRM uses from then on — the key you pasted can create campaigns and spend money, and is not needed for day-to-day reporting.
- Two conversions are registered with OpenAI: Lead captured and Deal won.
- Your Won stage is mapped to the sale conversion.
- The pixel is added to every landing page already running your tracking script.
You do not touch your website. No tag manager, no second script, no developer. If your landing page already loads the Claudphic tracking script, it loads the OpenAI pixel too the moment you connect — and stops when you disconnect.
Step 4 is the one people miss doing this by hand
Registering a conversion with OpenAI (an event setting, in their terms) is separate from sending events. Skip it and the data still arrives, still shows up in event monitoring, and cannot be selected as a campaign optimisation goal. Everything looks connected and nothing can bid on it.
The integration screen shows a registered badge against each conversion precisely so this failure is visible rather than discovered a month later.
What gets reported, and when
- Lead captured fires the moment a landing-page form is accepted — from the browser pixel and from our server, both carrying the same event id so OpenAI counts it once. No value is attached: an enquiry is not revenue, and reporting one as money teaches the bidding to chase volume.
- Deal won fires when you move the lead into your Won stage, carrying the deal value. This is the one that matters. It is what turns "find me more form fills" into "find me more people who spend ₹2,00,000".
Both are editable, and you can map any stage to any conversion. One piece of advice on that: map the stage that represents a real result. Map "Contacted" and you are training OpenAI to find people who answer the phone.
The one hard limit: oppref
OpenAI matches a conversion to an ad click using a click id called oppref, which their ads
append to your landing page URL. A lead that arrived without one cannot be attributed to ChatGPT
Ads by anybody — not by this CRM, not by a tag manager, not by OpenAI.
So the CRM does not report those leads at all. That is deliberate. Google has a path that works without a click id and Meta can match an Instant Form lead by its lead id; ChatGPT Ads has neither, and reporting a lead anyway would credit the platform with sales it had nothing to do with — which corrupts your own bidding before it corrupts anything else.
Practically: make sure your ad's landing page URL is the one OpenAI serves, unmodified. A redirect that strips query parameters will silently throw the click id away.
What is sent about your leads
The click id, the event, the value, and matching fields that are SHA-256 hashed before they leave: email, phone, first and last name, and an internal reference. City, region, postcode, country, IP and user agent are sent as OpenAI's API requires them — unhashed — and improve match rates. Raw contact details are never sent. OpenAI is listed on our sub-processors page on the same terms as Google and Meta.
Timing, retries and the seven-day rule
Conversions queue instantly and are delivered by a sync that runs every few minutes, with the same exponential backoff as the Google and Meta integrations. One difference worth knowing: OpenAI refuses any event older than seven days. A conversion that cannot be delivered inside that window is marked skipped with the reason, rather than retried forever against a guaranteed rejection.
In practice that only happens if the connection was broken and nobody noticed — which is why the screen shows the last error OpenAI returned instead of going quiet.
If you would rather not store a key that can spend money
After connecting, press Delete stored key. The Ads API key is removed and conversion reporting carries on using the narrower key. The only thing you lose is the ability to register a new conversion later without pasting the key again.