Pushing ChatGPT Ads Data Into Your CRM and Scoring Lead Quality
By Ansh Khandelwal 10 min read
In brief
Connect ChatGPT Ads to your CRM by storing click references and returning qualified-lead or opportunity events months later.
Last verified: 12 September 2026 | Version: 1.0 | Next scheduled review: 12 October 2026
Cost per lead is the metric ChatGPT Ads gives you most easily and the one that will mislead you fastest. Form fills are cheap to produce from a conversational placement, because the user is already in a low-friction, low-commitment frame. Whether those forms contain buyers is a question only your CRM can answer, and only if you built the join before you started spending.
This article is the build: which fields to capture, where they go in HubSpot, and how to turn a deal stage into the number the bidder optimises against.
The capture layer, which has to exist before anything else
Four values need to reach the contact record on the first form submission. Miss any of them and the join is broken for that contact permanently, because none of them can be recovered later.
| Value | Where it comes from | Why it has to be stored |
|---|---|---|
utm_source, utm_medium |
Your destination URL | Channel identification. HubSpot's own source classification will not do this for you |
utm_campaign |
Your destination URL | Joins the contact back to a named campaign in Ads Manager |
utm_content |
Your destination URL | The only carrier of ad group and ad identity. ChatGPT Ads passes no equivalent of a dynamic ad group ID, so this is hand-maintained |
oppref |
Appended by OpenAI to every ad click | The click reference. This is the value that lets a conversion months later be sent back and credited |
oppref is the one people skip. It is not a UTM, it does not look like marketing data, and it arrives on the URL looking like noise. It is the single most valuable field in the list, because it is what the Conversions API needs to attribute a deal that closes in November to a click in September.
Capture mechanism, in order of reliability: hidden form fields populated from the URL query string and from the first-party cookie the OpenAI pixel writes, read at submit time. Not read at page load, if your form sits behind a multi-step flow or a route change, because a single-page application that changes route without a reload will have a stale query string.
Where these go in HubSpot
Create four custom contact properties. Do not try to use HubSpot's built-in analytics properties for this.
chatgpt_ads_campaign(single-line text)chatgpt_ads_adgroup(single-line text, populated fromutm_content)openai_click_ref(single-line text, populated fromoppref)chatgpt_ads_first_touch_date(date picker, set once, never overwritten)
The reason for custom properties rather than the built-in ones is classification. HubSpot's hs_analytics_source applies its own rules to referrer and UTM combinations, and a chatgpt source with a cpc medium is not a combination its classifier recognises as paid search. Expect it to land under Other Campaigns or Referrals depending on your setup. That is not a bug to fix; it is a reason not to build reporting on a property whose classification you do not control. Store the raw values yourself.
Then roll the values up to the deal. When a deal is created from a contact, copy chatgpt_ads_campaign, chatgpt_ads_adgroup and openai_click_ref onto the deal record with a workflow. Deals are where revenue lives, and a contact-level attribution that never reaches the deal record cannot be reported on in the pipeline views your sales leadership actually looks at.
The HubSpot native integration, and what it does not replace
HubSpot added a native ChatGPT Ads connection to the Ads tool in Marketing Hub, reported in July 2026. As described in published write-ups, it lets you create campaigns, write ad copy, set context hints and schedule budgets inside HubSpot, auto-appends UTM parameters for contact-level attribution, syncs ad engagement to contact and deal records, and enrols contacts in workflows based on ad interaction. It is described as available across Marketing Hub tiers with an active ChatGPT Ads account and API key.
Two cautions. All of that is third-party description of the integration rather than something OpenAI documents, so treat the specifics as reported. And at least one published summary describes the integration as using fixed CPM pricing with no bidding strategy required, which does not match OpenAI's documented objective set of Reach on CPM, Clicks on CPC and Conversions on oCPC. Where a write-up of a connector contradicts the platform's own documentation, the platform documentation is the thing to trust, and the discrepancy is a reason to verify the billing model inside your own account before you rely on it.
What the integration does not replace is the oppref capture. Auto-appended UTMs identify the channel. They do not carry OpenAI's click reference, and without it you cannot send a later conversion back for attribution.
Why a low cost per lead hides bad pipeline
Here is the arithmetic that makes the argument, using illustrative figures rather than account data.
Two ad groups, one month.
| Ad group A | Ad group B | |
|---|---|---|
| Spend | 1,680 USD | 1,770 USD |
| Leads | 40 | 15 |
| Cost per lead | 42 USD | 118 USD |
| Leads reaching sales qualified | 6 percent, so 2.4 | 34 percent, so 5.1 |
| Cost per sales qualified lead | 700 USD | 347 USD |
On the metric Ads Manager reports, A wins by nearly three to one. On the metric the business runs on, B wins by two to one. If you optimise on what the platform shows you, you shift budget toward A and your pipeline gets worse while your reporting improves.
This failure is more likely on ChatGPT Ads than on most channels, for a structural reason. The placement reaches people mid-task, often in a research or problem-framing frame, and a research-stage visitor will fill in a low-commitment form readily. The cheap leads are cheap because they are early, not because the targeting is good. Our post on matching ad copy to decision stage covers the creative side of this; this is the measurement side.
Lead-stage scoring, and sending it back
The fix is to stop counting form fills and start counting stage transitions, then to send the stage transition back to OpenAI as the conversion event.
Define a small ladder, three or four rungs, with a value attached to each. Values do not need to be revenue; they need to be ordered and stable.
| Stage | Event name sent | Value |
|---|---|---|
| Form submitted | lead_created |
1 |
| Marketing qualified, meets firmographic and fit criteria | lead_created with a distinct event setting |
5 |
| Sales qualified, meeting held and need confirmed | appointment_scheduled |
25 |
| Closed won | order_created with the deal amount |
actual value |
Then the operational rule that makes it work: optimise toward the middle of the ladder, report on the top.
Configure the Conversions objective campaign against the sales qualified event, not the form fill and not closed won. The form fill teaches the bidder to find form fillers. Closed won arrives too late and too rarely at a 25 USD daily budget to be a usable training signal. The sales qualified event is usually the highest rung that still produces enough volume inside a workable attribution window.
The send-back path in HubSpot is a workflow on deal stage change that posts to the OpenAI Conversions API, carrying the event name, the openai_click_ref value from the deal record, the value, and a stable event_id. Use the HubSpot record ID as the event_id, never a generated string. Deduplication is keyed on Pixel ID, event name and event ID, and the first event received wins, so a stable ID is what stops a pixel event and a server event from both counting. Our Conversions API post covers the request shape.
One configuration detail that breaks this silently: the attribution window lives on the conversion event setting, in attribution_window_days. If your median time to sales qualified is 19 days and your event setting is on a 7-day window, the events you send back will arrive outside the window and be credited to nothing. Set the window on that event setting to comfortably exceed your median stage time before you send anything.
What we cannot tell you
- Whether HubSpot's native integration passes
opprefanywhere. Published descriptions mention auto-appended UTMs and do not mention the click reference. Undocumented. - How long the
oppreffirst-party cookie survives. Unpublished, so the practical ceiling on capturing it at form submit is unknown independent of your configured window. - Whether OpenAI's optimiser handles value-weighted conversions or only counts. The documented objective is oCPC, and no value-based bidding strategy is published. Absent.
- Typical lead-to-SQL conversion rates on this channel. No cross-advertiser benchmarks exist and OpenAI publishes none.
- Any first-party pipeline data. InPromptAds runs no campaigns and has no CRM containing ChatGPT Ads leads. The worked figures above are illustrative and are not measurements.
Quick answers
What ChatGPT Ads fields should I capture in my CRM?
Four: utm_campaign, utm_content for the ad group, the source and medium, and oppref, OpenAI's click reference. The last one is what makes a conversion months later attributable, and it cannot be recovered if you miss it at submit time.
Does HubSpot integrate with ChatGPT Ads natively? Reported yes, since July 2026, inside the Marketing Hub Ads tool, with campaign creation, auto-appended UTMs, contact and deal syncing and workflow enrolment. Treat the specifics as third-party description and verify the billing model in your own account.
Why is a cheap cost per lead a warning sign here? Because the placement reaches people mid-research, and research-stage visitors fill low-commitment forms readily. The leads are cheap because they are early. Optimising on cost per lead shifts budget toward the ad groups producing the least qualified traffic.
Which conversion event should a B2B campaign optimise toward? The highest rung of your qualification ladder that still produces volume inside a workable window, usually sales qualified rather than form submitted or closed won. Report on closed won; do not bid on it.
How do I send a CRM stage back to OpenAI?
A workflow on deal stage change posting to the Conversions API with the event name, the stored oppref, the value and a stable event_id. Use the CRM record ID as the event ID so browser and server events deduplicate.
Why are my sent-back conversions not appearing?
Most often the attribution window on that event setting is shorter than your median time to the stage, so the event arrives outside the window. Check attribution_window_days on the event setting before checking anything else.
Sources
| Claim | Source | Tier |
|---|---|---|
oppref appended to the destination URL on every ad click and stored in a first-party cookie |
OpenAI Help Center, Conversion Measurement, 2026 | Confirmed, primary |
Event settings carry attribution_window_days and bind to one source |
OpenAI Developers, Conversion Setup API reference, 2026 | Confirmed, primary |
| Deduplication keyed on Pixel ID, event name and event ID, first event wins | OpenAI Developers, Conversions API, 2026 | Confirmed, primary |
| Objectives are Reach on CPM, Clicks on CPC and Conversions on oCPC | OpenAI Help Center, campaign objectives, 2026 | Confirmed, primary |
| HubSpot native ChatGPT Ads integration in Marketing Hub Ads, auto-appended UTMs, contact and deal sync, workflow enrolment, all Marketing Hub tiers | Sidekick Strategies and other HubSpot partner write-ups, 10 July 2026 | Reported |
| Description of the integration as fixed CPM with no bidding strategy required | Same write-ups, 2026. Conflicts with OpenAI's documented objective set | Reported |
| No cross-advertiser benchmarks for lead quality on this channel | OpenAI documentation, by absence | Absent |
| Worked cost per SQL comparison and the ladder configuration | Inference, ours. Figures are illustrative, not measured | Inference, ours |
Related reading
- UTM Conventions for ChatGPT Ads That Survive Contact With a CRM
- The OpenAI Conversions API, and When Server Side Beats the Pixel
- What OpenAI's Attribution Windows Actually Count
- Matching Ad Copy to Decision Stage Inside a Single Conversation
- Forms for Research-Stage Traffic
Changelog
12 September 2026, v1.0. First publication. Sets out the four-field capture layer including the oppref click reference, the HubSpot property structure, and the rule of optimising toward the middle of the qualification ladder while reporting on the top.
Field kit
Tools
Site
OpenAI (primary)
Ansh works across GEO strategy, B2B research, and execution. At InPromptAds, he translates new AI advertising products into clear operating advice, tests, and measurement questions for marketing teams.