A UTM Scheme for ChatGPT Ads That Survives Contact With a CRM

By 8 min read

Summarise with

Prompt copied

Screen-print illustration of one hand-cut key blank lying on a workbench beside the file that shaped it, no other keys anywhere in the frame.

In brief

ChatGPT Ads has no automatic analytics link, but supported URL macros now carry campaign, ad-group and ad IDs into your UTM and CRM records.

Last verified: 13 September 2026 | Version: 1.1 | Next scheduled review: 13 October 2026

Use this scheme, then stop thinking about it:

?utm_source=chatgpt
&utm_medium=cpc
&utm_campaign=<objective>_<offer>_<geo>_<yyyyqn>
&utm_content={ad_group_id}__{ad_id}
&utm_term=<hint-theme-slug>
&utm_id={campaign_id}

Worked:

https://example.com/demo?utm_source=chatgpt&utm_medium=cpc&utm_campaign=leads_demo_us_2026q4&utm_content={ad_group_id}__{ad_id}&utm_term=hint-route-planning&utm_id={campaign_id}

The rest of this page is why each field is what it is, and the two rules that stop the string dying between the click and your CRM.

Why explicit UTMs still matter

ChatGPT Ads does not create an analytics join for you, but it now supports dynamic landing-page parameters. Ads Manager can populate {campaign_id}, {ad_group_id}, {ad_id} and {ad_account_id} at delivery. OpenAI also appends oppref, its own click reference used for conversion attribution.

You configure parameters explicitly at campaign, ad-group or ad level. More specific settings win in this order: Ad URL, Ad, Ad Group, Campaign. A value already present on the Ad URL is not overwritten by a higher-level setting.

That leaves a gap Google Ads users do not have. In a Google account you can be sloppy with UTMs because gclid carries the join. Here, if you paste a naked destination URL, GA4 sees a referral from chatgpt.com, your CRM sees nothing at all, and the only record that the click was paid lives inside Ads Manager, where it cannot be joined to a deal.

The UTM string is not a reporting nicety on this channel. It is the join key.

The fields, and the reasoning for each

utm_source=chatgpt. The surface, not the vendor. Write chatgpt, not openai, because chatgpt.com is what every other system already records as the referrer host, and matching that string means your paid rows and your organic AI referral rows sit in the same source bucket where you can compare them. Writing openai creates a second source that joins with nothing.

utm_medium=cpc. Lowercase, and one of the recognised paid mediums. This is what separates paid ChatGPT traffic from the organic ChatGPT referrals arriving on the same host, which carry medium referral. It also puts the traffic into a paid channel in GA4's default grouping rather than leaving it unassigned. Do not invent ai, chat or paid-ai here. Put that distinction in a custom channel group instead, where it can be changed later without re-tagging every ad.

utm_campaign. Four parts, underscore separated, in a fixed order: objective, offer, geo, quarter. leads_demo_us_2026q4. The order matters because it sorts usefully in a spreadsheet and prefix-matches in a regex. Include the quarter so that a campaign you relaunch in January does not silently merge with last year's numbers.

The campaign string should mirror your Ads Manager campaign name, not describe it. If the two drift, the only person who can reconcile a GA4 row with an Ads Manager row is the person who remembers both, which is a dependency you do not want.

utm_content. Use {ad_group_id}__{ad_id}. The ad group is the smallest targeting container ChatGPT Ads reports on, and the ad ID gives you a creative-level join without relying on names that can drift.

utm_term. On Google this holds a keyword. There are no keywords here and no search terms report, so the field is free, and the most useful thing to put in it is the context hint theme the ad group is built around. You will never get hint-level reporting out of OpenAI, but if one ad group carries one hint theme, utm_term becomes the closest thing to a hint-level label you can construct yourself.

utm_id. Use {campaign_id} when your analytics or warehouse accepts it. Keep utm_campaign human-readable and use utm_id as the stable machine join.

Formatting rules

  • Lowercase everything. GA4 lowercases utm_medium but treats other UTM values as case sensitive, so Demo and demo become two campaigns.
  • Hyphens inside a part, underscores between parts. Pick this or the reverse, then never mix.
  • No spaces, no +, no encoded characters. A space becomes %20 and %20 ends up in your CRM as literal text.
  • Keep the whole string under about 100 characters. Long URLs get truncated by email clients and by some CRM text fields, and a truncated UTM is worse than no UTM because it looks valid.
  • Never reuse a value with two meanings. One value, one thing, permanently.

The two rules that keep it alive

Rule one: do not strip query parameters. OpenAI appends oppref to the end of your destination URL, after your own parameters. Anything in your stack that rewrites, canonicalises or redirects the landing URL can drop the whole query string, and when it does you lose both your UTMs and OpenAI's click reference in one move. Test the live ad URL through every redirect it will actually pass through, including the www to apex redirect and any locale redirect, and confirm the parameters arrive intact.

Rule two: write the values into hidden form fields. GA4 storing a campaign is not the same as your CRM knowing it. On the landing page, read the query string, persist it, and populate hidden fields on every form: source, medium, campaign, content, term, and oppref as its own field.

Two persistence decisions worth making deliberately:

  • Store first touch and last touch as separate field sets. A ChatGPT ad is far more likely to be a first touch than a last one, and a last-touch-only CRM will credit the branded search that closed the loop.
  • Persist for at least as long as your configured click attribution window, and preferably as long as your sales cycle. A session-scoped value dies when the tab closes, which on a channel where people keep chatting is a common way to lose the record.

Make the CRM fields single-line text, not dropdowns or picklists. A picklist rejects the value the first time you add a campaign and nobody notices for a month.

What this scheme does not solve

It tells you which ad group produced a lead. It does not tell you which conversation the ad appeared in, because no search terms report exists. It does not recover the user who saw the ad, kept chatting, and arrived later through branded search with no parameters at all. And it cannot backfill: a campaign run untagged in March is untagged forever.

What we cannot tell you

  • Whether OpenAI will add a native analytics integration or more macros. Four ID macros are documented today; no roadmap is published for anything beyond them.
  • Whether oppref values are stable across a session or unique per click. Undocumented, which means you should store the first one you see rather than overwriting.
  • What share of ChatGPT ad clicks arrive with query parameters intact. Not published by OpenAI, and it depends on your own redirect chain more than on the platform.
  • How long a UTM needs to persist to cover a typical B2B cycle on this channel. No first-party data exists yet, ours included.

Quick answers

What UTM source should I use for ChatGPT Ads? utm_source=chatgpt. It matches the host every other system records, so paid and organic ChatGPT rows land in the same source bucket and stay comparable.

Does ChatGPT Ads have auto-tagging? It does not create a native analytics join automatically. You configure landing-page parameters yourself, but supported macros can now populate campaign, ad-group, ad and ad-account IDs at delivery. OpenAI separately appends oppref for conversion attribution.

Can I use dynamic macros in ChatGPT Ads destination URLs? Yes. Supported macros are {campaign_id}, {ad_group_id}, {ad_id} and {ad_account_id}. They can be configured at campaign, ad-group or ad level.

What goes in utm_term when there are no keywords? The context hint theme of the ad group. It is the only hint-level label you will ever have, since OpenAI reports nothing below ad group.

Why did my UTMs disappear between the ad and my CRM? Almost always a redirect that dropped the query string, or a form that never captured the values into hidden fields. Test the live URL through every redirect it passes.

Should I tag differently for organic ChatGPT referrals? You cannot tag them at all, since you do not control the link. That is exactly why paid traffic needs utm_medium=cpc: it is the only thing separating the two.

Sources

Claim Source Tier
oppref is appended to the destination URL on every ad click OpenAI Help Center, Conversion Measurement, 2026 Confirmed, primary
Dynamic landing-page parameters; supported ID macros; Ad URL, Ad, Ad Group, Campaign precedence OpenAI Help Center, Measure Results, verified 13 September 2026 Confirmed, primary
No search terms report exists OpenAI Ads Manager documentation, by absence Absent
Ad group is the smallest reported unit OpenAI Ads Manager documentation, 2026 Confirmed, primary
GA4 treats UTM values other than medium as case sensitive Google Analytics documentation, 2026 Confirmed, primary
The field scheme and the first touch versus last touch storage rule Newtation method Inference, ours
  • Why ChatGPT Ads Traffic Lands in Referral in GA4
  • Pushing ChatGPT Ads Data Into Your CRM and Scoring Lead Quality
  • How to Install the OpenAI Ads Pixel, Directly or Through GTM
  • What OpenAI's Attribution Windows Actually Count

Changelog

13 September 2026, v1.1. Corrected the claim that dynamic macros were unavailable and revised the scheme to use documented campaign, ad-group and ad ID macros.

12 September 2026, v1.0. First publication. Publishes a fixed five field UTM scheme and the query-string and hidden-field rules that keep it intact through to a CRM.

Field kit

Tools

Site

OpenAI (primary)

Share this

AK

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.

Get placed before the self-serve rush.

We're onboarding a founding cohort of B2B brands for managed ChatGPT ad placements. Early access, limited seats.

Now capturing early access
Contact us Contact us