← Back to Blog
UTM Strategy

OpenAI Ads UTM Tracking in GA4: The Complete Setup

By UTM Buddy Team · August 11, 2026 · 11 min read

OpenAI added dynamic URL parameters to Ads Manager Beta, giving advertisers a way to append campaign values to landing page URLs using static text, supported macros, or both. The field is called Landing page query parameters, and Ads Manager populates the macros at delivery time.

This matters because OpenAI Ads Manager has no auto-tagging. There is no click identifier that Google Analytics 4 recognizes automatically, so campaign parameters only exist in your analytics if you put them there. This guide covers the macros OpenAI supports, how to apply them, where untagged ad traffic ends up in GA4, and the two channel-group changes that separate paid ChatGPT clicks from organic ones.

TL;DR — OpenAI Ads Manager supports five macros for landing page query parameters and no auto-tagging, so untagged ad clicks are classified into GA4's AI Assistants channel alongside organic ChatGPT traffic. Tag with utm_source=openai and utm_medium=cpc, then create a custom Paid AI channel in GA4 and add an exclusion to the Paid Other rule so paid and organic AI traffic report separately.

1. What OpenAI Released: The URL Macros

Dynamic URL parameters are available in OpenAI Ads Manager Beta. You can add custom landing page query parameters using your own text, supported macros, or a combination of the two, and Ads Manager resolves the macros automatically when the ad is served.

Ads Manager supports five macros. The in-product help text lists them under the field itself:

MacroResolves toRecommended UTM slot
{campaign_id}Campaign identifierutm_id
{ad_group_id}Ad group identifierutm_term
{ad_id}Individual ad identifierutm_content
{ad_account_id}Ad account identifierutm_source_platform (optional)
{oppref}OpenAI click referenceLeave out of UTMs — used for conversion attribution

{oppref} is the OpenAI click reference value. It supports server-side conversion attribution through the Conversions API rather than analytics channel reporting, so keep it separate from your UTM parameters. If you pass server-side conversions, preserve and send this value so events attribute correctly.

The field appends only missing parameters. OpenAI's help text states this directly: existing query parameters on the landing page URL are left in place. A value already hardcoded into an ad's URL will not be overwritten by anything you configure at the campaign, ad group, or ad level.

2. How to Apply Them, Step by Step

  1. Open the Campaigns, Ad Groups, or Ads page in Ads Manager Beta.
  2. Open the three-dot menu and select Edit campaign, Edit ad group, or Edit ad depending on the level you want to set.
  3. Scroll to Landing page query parameters in the edit modal.
  4. Paste your parameter string — the UTM portion only, with no leading ? and no domain.
  5. Save. Parameters apply to ads served after the change.
The Landing page query parameters field in OpenAI Ads Manager Beta, showing a UTM string and the list of supported template values
The Landing page query parameters field in OpenAI Ads Manager Beta. The help text confirms the five supported template values.

Recommended values

Set these at the campaign level so every ad group and ad inherits them:

ParameterValueWhy
utm_sourceopenaiNames the platform rather than the surface. Keeps reporting stable if OpenAI adds placements beyond ChatGPT.
utm_mediumcpcA GA4-recognized paid medium, so the session is classified as paid rather than organic.
utm_campaignReadable campaign nameLegible in reports without a lookup table.
utm_id{campaign_id}Ties the session back to the platform record.
utm_term{ad_group_id}Ad group granularity.
utm_content{ad_id}Creative-level performance.

As a single string for the Landing page query parameters field:

utm_source=openai&utm_medium=cpc&utm_campaign=spring_sale&utm_id={campaign_id}&utm_term={ad_group_id}&utm_content={ad_id}

Macros resolve to numeric identifiers rather than readable names, which is why {campaign_id} belongs in utm_id and a human-readable value belongs in utm_campaign. Reversing the two fills your acquisition reports with numeric strings.

Which level wins

Parameters can be set at four levels, and more specific settings take precedence. The order is Ad URL, then Ad, then Ad Group, then Campaign.

LevelPriorityWhat to put here
Ad URLHighest — never overwrittenNothing. Keep landing page URLs clean.
AdOverrides ad group and campaignOne-off creative tests needing a distinct value
Ad GroupOverrides campaignAudience or theme distinctions
CampaignLowest — the defaultSource, medium, campaign name, and macros

3. Where Untagged OpenAI Ads Traffic Lands in GA4

Untagged OpenAI Ads clicks are classified into GA4's AI Assistants channel. Google added this channel to the Default Channel Group in May 2026, and it captures traffic from recognized AI assistant referrers by assigning a medium of ai-assistant. ChatGPT is one of those recognized referrers, so paid clicks arriving from a ChatGPT ad are treated exactly like organic ChatGPT citation clicks.

The sessions are counted. The problem is that they are counted in the wrong place — pooled with traffic you did not pay for, in a channel that contains no cost data. There is no way to evaluate OpenAI Ads spend from a bucket that blends paid and organic clicks from the same domain.

Auto-tagging does not exist between OpenAI Ads Manager and GA4. Google Ads has gclid and Microsoft Advertising has its own auto-tagging, both of which GA4 recognizes without configuration. OpenAI Ads has neither. The Landing page query parameters field is the only mechanism that tells GA4 a click was paid, and it is off by default.

Tagging fixes the classification, but only partway. With utm_source=openai and utm_medium=cpc, GA4 moves the session out of AI Assistants and into Paid Other — the medium matches a paid pattern, but openai is not on GA4's list of recognized search or social sites, so it does not qualify for Paid Search or Paid Social. Paid Other is a catch-all shared with every other unrecognized paid source, which is an improvement over AI Assistants and still short of useful.

Two channel-group edits solve it properly.

Run the Free GA4 UTM Audit

Find out which of your paid campaigns are landing in the wrong channel — or no channel at all — using your own GA4 data.

Launch Free Audit →

4. What to Configure in GA4

The goal is a dedicated Paid AI channel that captures OpenAI Ads traffic and nothing else, with the Paid Other rule adjusted so the two do not compete. Both changes happen inside a custom channel group, since the Default Channel Group cannot be edited.

Step 1 — Create the Paid AI channel

  1. Open Admin → Data display → Channel groups. Editor access on the property is required.
  2. Open a custom channel group and select Edit, or clone the default group to start from its rule set.
  3. Click Add new channel and name it Paid AI.
  4. Add the first condition group: Sourcematches exactly (=)openai.
  5. Add a second condition group joined by AND: Mediummatches exactly (=)cpc.
  6. Save.
GA4 channel details screen showing a Paid AI channel with Source matches exactly openai AND Medium matches exactly cpc
The Paid AI channel: two condition groups joined by AND, matching openai as source and cpc as medium.

Using both source and medium keeps the channel precise. A source-only rule would also capture untagged organic ChatGPT sessions if OpenAI ever changes its referrer handling, and a medium-only rule would capture every paid source you run.

On rule order. GA4 evaluates channel rules top-down and assigns each session to the first rule it matches, so order only matters where two rules can both match the same session. AI Assistants will not compete with Paid AI, because a tagged session carries cpc as its medium rather than ai-assistant. The one real overlap is with Paid Other, and Step 2 removes it directly — which is why Paid AI works correctly even when it sits below AI Assistants in the list.

Step 2 — Exclude OpenAI from Paid Other

A session belongs to exactly one channel. Since openai plus cpc also satisfies the Paid Other definition, the Paid Other rule needs an explicit exclusion so the two rules stop overlapping.

  1. In the same custom channel group, open the Paid Other channel.
  2. Leave the existing condition in place: Default channel groupmatches exactly (=)Paid Other.
  3. Add a second condition group joined by AND: Sourcedoes not match exactly (=)openai.
  4. Save.
GA4 Paid Other channel updated with a second condition group where Source does not match exactly openai
The Paid Other rule with an AND condition excluding openai as a source.

With both edits saved, your channel list contains a Paid AI channel for tagged OpenAI Ads traffic and an AI Assistants channel for organic AI referrals — measuring two different things, reported separately.

GA4 custom channel group list showing AI Assistants and Paid AI as adjacent channels
AI Assistants and Paid AI coexist in the channel list, each with its own rule — one for organic AI referrals, one for paid OpenAI clicks.
Custom channel groups apply retroactively. GA4 evaluates them at query time rather than at collection, so both changes cover historical sessions that already carry the right source and medium values. Any OpenAI Ads traffic you tagged before building the channel moves into Paid AI as soon as you save.

5. Generating the URLs with UTM Buddy

The tagging above is a fixed pattern with two variable pieces, which makes it a good fit for a saved template. Building it once in UTM Buddy means every OpenAI campaign inherits the same source, medium, and macro mapping without anyone retyping them.

Create an OpenAI Ads template

Save a template that mixes static values with OpenAI's macros:

UTM Buddy Edit Template modal showing an OpenAI Ads template with static source and medium values and macro values for term, content, and ID
An OpenAI Ads template in UTM Buddy — static values for source and medium, OpenAI macros for term, content, and ID.

The macros pass through as literal text. UTM Buddy treats {ad_group_id} as the value of the parameter, and Ads Manager substitutes the real identifier at delivery time.

Copy the UTM string into Ads Manager

The Landing page query parameters field takes the parameter string only — no domain and no leading ?. Copy the UTM portion of the generated URL, starting at utm_source, and paste it into the field.

Verify the channel before you launch

Connect your GA4 property in UTM Buddy and use the URL preview to confirm classification. The preview reads your channel group rules and reports the channel the URL will be assigned to — so a correctly configured setup returns Paid AI rather than Paid Other or AI Assistants.

UTM Buddy URL preview showing a tagged OpenAI Ads URL with a GA4 Channel result of Paid AI
The URL preview confirming a GA4 channel result of Paid AI before the campaign goes live.

Checking this before launch is the difference between finding a misconfiguration now and finding it after a month of spend has been filed under the wrong channel. If the preview returns Paid Other, the Paid Other exclusion has not saved; if it returns AI Assistants, the parameters are not reaching the URL.

6. Seeing Paid AI in the Acquisition Reports

Once campaigns are delivering with the parameters applied, Paid AI appears as its own row in the acquisition reports with openai / cpc as its source and medium — separated from AI Assistants, and reportable against every metric GA4 tracks.

GA4 Traffic acquisition report filtered to the Paid AI channel, showing openai / cpc as the source and medium with sessions and engagement metrics
The Paid AI channel in Traffic acquisition, with Session source / medium added as a secondary dimension.
Select the right channel grouping when you open the report. Paid AI is a custom channel, so it only appears when the report is set to the channel grouping you built it in. If that grouping is not your property's default, GA4 opens the report on the default grouping and your Paid AI row will be missing — the traffic will still be sitting in AI Assistants or Paid Other as far as that view is concerned.

To switch groupings, change the primary dimension at the top of the report table from Session default channel group to your custom grouping — shown as Session custom channel grouping in the dimension dropdown. The same applies in reverse for the user-scoped report, where the dimension reads First user default channel group.

This works in both acquisition reports, and each answers a different question:

Adding Session source / medium as a secondary dimension confirms the channel is matching on the values you expect. A Paid AI row that shows anything other than openai / cpc means a campaign somewhere is tagged inconsistently.

To make the custom grouping the one GA4 opens by default, set it as the property default in Admin → Data display → Channel groups. Otherwise, tell whoever reviews these reports that the dimension has to be switched each time — it is the single most common reason a correctly built custom channel appears to be missing.

Frequently Asked Questions

Does OpenAI Ads have auto-tagging for Google Analytics?

No. OpenAI Ads Manager has no auto-tagging and no click identifier equivalent to gclid that GA4 recognizes. Every campaign parameter must be added manually through the Landing page query parameters field. Without it, GA4 has no signal that the traffic was paid.

What macros does OpenAI Ads Manager support?

Five: {campaign_id}, {ad_group_id}, {ad_id}, {ad_account_id}, and {oppref}. Ads Manager populates them at delivery time, so the value reaching your landing page is the actual identifier for whatever served the impression. The {oppref} macro is the OpenAI click reference, used for server-side conversion attribution.

Where does untagged OpenAI Ads traffic show up in GA4?

In the AI Assistants channel. Because ChatGPT is a recognized AI assistant referrer, GA4 assigns untagged clicks a medium of ai-assistant and groups them with organic ChatGPT traffic. Your paid clicks are counted, but they are pooled with traffic you did not pay for, which makes OpenAI Ads spend impossible to evaluate.

How do I create a Paid AI channel in GA4?

Go to Admin, then Data display, then Channel groups, and open a custom channel group. Add a channel named Paid AI with two condition groups joined by AND: Source matches exactly openai, and Medium matches exactly cpc. Move the channel above both AI Assistants and Paid Other so it is evaluated first.

Why do I need to edit the Paid Other rule?

Because GA4 would otherwise classify openai plus cpc as Paid Other, and a session can only belong to one channel. Add a second condition group to Paid Other with Source does not match exactly openai, joined by AND. This removes the overlap and keeps OpenAI Ads reporting only in Paid AI.

Which setting wins if I set parameters at multiple levels in OpenAI Ads?

More specific settings take precedence. The hierarchy is Ad URL first, then Ad, then Ad Group, then Campaign. The field appends only missing parameters, so a value already present at the Ad URL level is never overwritten by a campaign, ad group, or ad-level setting.

Why can't I see the Paid AI channel in my GA4 report?

Because the report is open on a different channel grouping. Paid AI is a custom channel, so it only appears when the report uses the grouping you created it in. If that grouping is not your property default, change the primary dimension from Session default channel group to your custom channel grouping. This applies to both Traffic acquisition and First user acquisition.

Wrapping Up

The full setup is three pieces: a campaign-level parameter string in Ads Manager, a Paid AI channel in GA4, and an exclusion on the Paid Other rule. Each takes a few minutes, and together they move OpenAI Ads out of a channel that mixes it with organic traffic into one that reports it on its own. The fourth step is remembering to open the acquisition reports on the right channel grouping, or making that grouping your property default.

Because OpenAI Ads is a recent platform, tagging conventions for it are not yet established across most organizations. Recording this pattern alongside your existing naming conventions means later campaigns inherit a consistent standard rather than accumulating source spellings that cannot be merged after the fact.

Build Every Campaign URL the Same Way

Saved templates, macro support, and GA4 channel preview — so a new ad platform doesn't become a new source of attribution errors.

Start Free Trial →

Related Articles

GA4 & Attribution
GA4's AI Assistant Channel: How It Works
Best Practices
Top 5 Best Practices for Using UTMs
Google Analytics
GA4 Channel Groupings: How to Avoid Unassigned Traffic