Teaching the platform which leads were real
How to feed qualified-lead signals from your CRM back to OpenAI through the Conversions API so conversion-optimized campaigns learn what a good lead is.
Published Oct 15, 2026 · 6 min read
Choose the event that means money
OpenAI's conversion-optimized campaigns accept exactly one standard conversion event per campaign, chosen at creation and not changeable afterwards. For lead businesses the candidates are lead_created, registration_completed and appointment_scheduled. Custom events are not supported for optimization.
OpenAI advises picking an event with enough signal, because events that happen too rarely make performance hard to evaluate and optimization unreliable.
A booked appointment is a stronger definition of a real lead than a form submit, but it happens less often. The right choice depends on your volume. As a practical guideline, a common threshold in similar advertising platforms is reaching at least 30 conversion events per month before switching your campaign objective to Conversions - not as a hard rule, but as a point at which the optimization model has enough data to be meaningful. Confirm based on your own event volume and the OpenAI guidance in your account.
This means: if your business books ten appointments a month from paid sources, appointment_scheduled will not give the system enough signal to optimize in the short term. lead_created at a higher volume, with qualified-lead signal sent back later, may produce better results faster.
Close the loop from the CRM
The Conversions API accepts events with an action_source of offline, phone_call or email, each with a unique event ID and a timestamp within the last seven days.
That is the mechanism for telling OpenAI that a lead was later confirmed by a human reviewer, not just submitted. The difference between a raw form submission and a confirmed-lead event is the difference between teaching the system what a click looks like and teaching it what a customer looks like.
For the event to attribute correctly, the server-side call must include the original oppref parameter - the click reference captured when the lead landed on your site. Without it, OpenAI cannot tie the confirmed-lead event back to the ad impression that caused the click.
Store the oppref with every lead in your CRM at submission time. Most CRM integrations capture URL parameters; the field to capture is oppref from the landing page URL. If your form submission goes through a server action, capture it there. If it goes through a third-party form tool, most allow custom parameter passing through hidden fields.
The server-side event: what to send
A Conversions API event for a confirmed offline lead looks like this in structure:
- action_source:
offline(for a lead qualified by your sales team after the fact) orphone_call/email(if the confirmation came through that channel) - event_name: the same standard event you chose in the campaign (
lead_created,registration_completed, orappointment_scheduled) - event_time: the Unix timestamp of when the lead was confirmed, not when it was submitted
- event_id: a unique ID that matches the
event_idyou sent with the pixel event at submission, for deduplication - user_data: hashed contact data - hashed email address, hashed phone number, or hashed name plus postal code - whatever you have. The more matching data included, the higher the event quality score.
- custom_data: include the
opprefvalue here under a custom field, or pass it as theclick_idfield if the API supports that mapping
OpenAI's event quality checker in Ads Manager flags: missing click references, delayed events (it flags events arriving more than one hour after the fact for browser events, but the seven-day window applies to the Conversions API offline channel), duplicate event IDs, and low matching data.
What the loop looks like end-to-end
- User sees your ChatGPT ad and clicks it. The
opprefparameter is appended to the landing page URL by OpenAI. - The landing page loads and the OpenAI Pixel fires a
lead_createdevent with theopprefcaptured as the click reference. - The user fills the form and submits. Your server stores the lead with the
oppreffield. - Your sales team or an automated qualifier reviews the lead within days and marks it as qualified (or not).
- Your system sends a Conversions API event with
action_source: offline, the event name, the event time set to when it was confirmed, the hashed contact data, and theoppref- within seven days of step 1. - OpenAI's system receives the qualified-lead signal, attributes it to the original impression, and updates the delivery model to seek similar conversational contexts in future auctions.
The loop compounds over time. A campaign that has been running this qualified-lead feedback for three months will optimize toward different - and typically better - contexts than one that only optimizes toward raw form submissions.
When to switch from Clicks to Conversions
The decision to switch campaign objective from Clicks to Conversions should be based on your own conversion event volume. The key questions:
- Is your chosen event happening at least several dozen times per month across the campaign? If not, the optimization has too little signal.
- Has the pixel been live and firing cleanly for at least two to three weeks so there is a baseline to optimize against?
- Are you confident the event is not duplicated (pixel + API without deduplication)?
If yes to all three, switching to a Conversions campaign objective is likely to improve efficiency over time. If not, stay on Clicks and keep building the signal before switching.
Read more on how conversion tracking works for the full pixel and Conversions API setup, and how to advertise on ChatGPT for the end-to-end campaign setup. The ChatGPT ads conversion campaigns guide covers the campaign setup step in detail.