# 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: 2026-10-15 · ChatAdsAI · https://www.chatadsai.com/guides/lead-quality-loop

> **Summary:** A conversion-optimized campaign steers delivery toward one standard event, so the event you choose defines what "good" means to the system. Sending confirmed-lead events from your CRM through the Conversions API, with the stored oppref and hashed contact details, gives OpenAI a truer signal than a raw form submit. Event quality warnings show whether that signal is arriving intact.

## 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) or `phone_call` / `email` (if the confirmation came through that channel)
- **event_name**: the same standard event you chose in the campaign (`lead_created`, `registration_completed`, or `appointment_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_id` you 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 `oppref` value here under a custom field, or pass it as the `click_id` field 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

1. User sees your ChatGPT ad and clicks it. The `oppref` parameter is appended to the landing page URL by OpenAI.
2. The landing page loads and the OpenAI Pixel fires a `lead_created` event with the `oppref` captured as the click reference.
3. The user fills the form and submits. Your server stores the lead with the `oppref` field.
4. Your sales team or an automated qualifier reviews the lead within days and marks it as qualified (or not).
5. 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 the `oppref` - within seven days of step 1.
6. 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](https://www.chatadsai.com/guides/conversion-tracking) for the full pixel and Conversions API setup, and [how to advertise on ChatGPT](https://www.chatadsai.com/guides/how-to-advertise-on-chatgpt) for the end-to-end campaign setup. The [ChatGPT ads conversion campaigns](https://www.chatadsai.com/guides/chatgpt-ads-conversion-campaigns) guide covers the campaign setup step in detail.

## Sources

- [OpenAI Help Center – Conversion-optimized Campaigns](https://help.openai.com/en/articles/20001412-conversion-optimized-campaigns)
- [OpenAI Help Center – Conversion Measurement](https://help.openai.com/en/articles/20001409-conversion-measurement)
