Why ChatGPT ad clicks show up as Direct in GA4, and how to fix it

Why ChatGPT Ads direct traffic appears in GA4, and how to fix it with UTMs, OpenAI's URL macros and a custom channel, so paid clicks get a row of their own.

8 min read

Illustration: an untagged ad click falls into Direct, while a click with UTM parameters gets its own row

Want this done for you?

We set up, track and run ChatGPT Ads inside an ad account your business owns. The first call is free and takes 30 minutes.

Ads Manager says your ChatGPT ads got clicks, but Google Analytics files the visits under Direct. Or you can’t tell them from organic visits that arrive from ChatGPT. Your analytics isn’t broken. GA4 calls a visit Direct when it can’t tell where it came from. The fix is to tag every ad, so each paid click carries its own source.

Figures about OpenAI are OpenAI’s. How GA4 behaves is from Google’s documentation.

In brief

  • Add your own UTM parameters to every ad’s landing page URL.
  • Use one convention everywhere, such as utm_source=chatgpt and utm_medium=cpc.
  • Create a custom GA4 channel for it, and order it above Paid Other.
  • Expect Ads Manager clicks and GA4 sessions to differ even when tagging is perfect.

Quick diagnosis

Match what you see in GA4 to the likely cause before changing anything.

What you seeLikely causeFix
Ad visits under DirectThe landing page URLs carry no UTMsTag every ad
Ad visits under Paid OtherThe default channel catches cpcAdd a custom channel above it
Some tagged visits missingA redirect or http hop dropped the parametersFix the redirect
Fewer sessions than clicksConsent, blockers or slow pagesExpected. Compare ranges
Conversions differDifferent windows and modelsReconcile for the same dates

How GA4 decides a visit is Direct

In GA4’s default channel group, a visit is Direct when its source is “(direct)” and its medium is “(not set)” or “(none)”. Google describes that as traffic with no clear referral source.

Google’s documentation gives three groups of causes. First, missing information. That covers links with no UTM parameters and sites not integrated with the ad platform. It also covers redirects or URL shorteners that strip referral details. Second, real direct access, such as typed addresses and links in offline documents like PDFs. Third, ad blockers that interfere with the cookies used to identify where traffic came from.

Why ChatGPT ad clicks can end up there

Four things can combine to send a paid ChatGPT click to Direct.

OpenAI’s click reference isn’t for GA4

OpenAI’s Measurement Pixel reads a value called oppref from the landing page URL. OpenAI uses it to connect later conversions to the ad click. It’s a privacy-preserving identifier for OpenAI’s own measurement, not a source that GA4 reports.

The referrer isn’t documented

Without UTMs, GA4 falls back on the referrer. OpenAI doesn’t say what referrer an ad click passes, so tagging is the only way to be sure. We don’t assume it.

GA4’s default groups include an AI Assistant channel. Google assigns it when the medium is set to ai-assistant, which happens if the referrer matches Google’s list of AI assistants. Without UTMs, a paid click and an organic visit from the same referrer can’t be told apart.

Organic visits are partly tagged for you. OpenAI says ChatGPT adds utm_source=chatgpt.com to referral links from its search results, for sites that allow OAI-SearchBot. That’s useful, because organic ChatGPT traffic then has its own source. It also means your paid tags should use a different source value, such as chatgpt, so the two stay in separate rows.

Your own site can lose the tags

A redirect to a different URL can drop the parameters. So can a switch from https to http, and so can a consent tool that holds back analytics until a visitor agrees. Each of these can turn a tagged click into an untracked one.

The fix: tag every ad

OpenAI gives you two ways to add tracking parameters. You can type static UTMs into each ad’s landing page URL, and OpenAI says they persist on ad clicks. Or you can set landing page query parameters on a campaign, ad group or ad, using your own text or OpenAI’s macros. Ads Manager fills the macros in when the ad is delivered.

MacroFilled with
{campaign_id}The campaign’s ID
{ad_group_id}The ad group’s ID
{ad_id}The ad’s ID
{ad_account_id}Your ad account’s ID

The most specific setting wins, in this order: the ad’s URL, then the ad, the ad group and the campaign. A parameter already in the ad’s URL isn’t overwritten by the others. For product-feed campaigns, add parameters through the landing page settings.

A convention to start from

This is our suggestion, set once at campaign level:

utm_source=chatgpt
utm_medium=cpc
utm_campaign={campaign_id}
utm_content={ad_id}

A click then lands on a URL like https://example.com/pricing/?utm_source=chatgpt&utm_medium=cpc, with the IDs filled in. IDs are unique, but they aren’t readable, so keep a note of which ID belongs to which campaign. Or type the campaign names as static text instead.

Whatever you choose, use it everywhere. One stray spelling splits your reports into two rows, and nobody remembers which one is which.

Give ChatGPT Ads its own channel

With a medium such as cpc, GA4’s default rules treat the visit as paid. Its Paid Other channel matches mediums such as cpc, ppc and paid. For a row of your own, create a custom channel group.

Illustration: with the ChatGPT Ads channel ordered above Paid Other, tagged visits land in it
  1. In GA4, go to Admin, then Channel groups, and create a new group. Starting from a copy of the default group keeps all the standard channels.
  2. Add a channel called ChatGPT Ads, with the conditions source exactly matches chatgpt and medium exactly matches cpc.
  3. Reorder the channels so ChatGPT Ads comes before Paid Other. GA4 puts traffic in the first channel whose definition it matches.
  4. Save the group and pick it in your acquisition reports.

Google says custom channel groups apply to your reports retroactively. Tagged visits from before you created the channel show up in it too. You need the Editor role or above, and a standard property can have two custom groups besides the default.

A caution about the past. A channel group only regroups visits that already carried your tags. Visits recorded as Direct before you tagged the ads stay Direct. Tag first, and compare from the first tagged day.

Test the path before you spend

A tagged URL has to survive the whole journey. Test it before the budget goes in.

  • Open your landing page URL with the UTMs added, and check that GA4’s real-time report shows chatgpt / cpc.
  • Follow any redirects, and confirm the parameters reach the final page.
  • Make sure the landing page is https all the way through.
  • Check that your consent banner and tag setup let GA4 record visitors who agree to analytics.
  • Confirm OpenAI’s Pixel still fires with the parameters present.

Our tracking guide covers the Pixel and the Conversions API in depth. The ad preview and URL builder can assemble a tagged landing page URL for you.

Don’t expect the numbers to match

Even with perfect tagging, Ads Manager clicks and GA4 sessions won’t agree. OpenAI’s explanation is that clicks measure ad interactions. Analytics sessions depend on page loads, redirects, consent, browser blocking, UTM handling, attribution windows and time zones. Compare the same date range in the same time zone, and use Ads Manager’s CSV exports to check campaign and ad-level activity.

Conversions differ too. Ads Manager credits conversions within its own windows. These are 7, 14 or 30 days after a click, and optionally one day after a view. It uses last-touch attribution. GA4 applies its own model.

If you want one view across channels, OpenAI lists integrations with measurement partners. They include Fospha, Hightouch, INCRMNTAL, LiveRamp, Northbeam, Rockerbox, Triple Whale and WorkMagic. Several ask you to add their own tracking parameters to the campaign’s landing page settings. Set those up deliberately, beside your UTMs.

OpenAI also has a Google Analytics 4 connection in beta, by early access through your account manager. Each ad account connects one GA4 property. It lets you compare attribution between Ads Manager and GA4. Event mapping isn’t available yet, and its event totals cover the whole property, so they aren’t campaign conversions.

We’d keep the UTMs either way, because they decide how GA4 labels each visit.

Questions

Does ChatGPT add UTM parameters to ad clicks automatically?

OpenAI doesn’t document any automatic UTMs for ads. Its Pixel uses its own click reference, oppref, which GA4 doesn’t report as a source. Add your own UTMs. OpenAI does say it adds utm_source=chatgpt.com to organic referral links from ChatGPT search, which is a separate matter from ads.

What medium should I use for ChatGPT Ads?

Any consistent value works if you build a custom channel for it. Our suggestion is cpc, which GA4’s default rules already treat as paid, even for campaigns billed per impression. Pick one and don’t vary it between campaigns.

Will UTM parameters cause problems with ad review?

No. OpenAI’s ad guidance says you can add your own UTM parameters to each destination URL. The page itself still has to load and let OpenAI’s crawlers in. A blocked landing page is a different problem, and a common cause of rejection.

Why don’t Ads Manager clicks match GA4 sessions?

They count different things under different rules. A click is counted when it happens. A session needs the page to load and analytics to run, which consent choices, blockers and redirects can prevent.

Can I fix visits that were already recorded as Direct?

No. GA4 can’t re-attribute sessions it recorded without a source. A custom channel regroups tagged visits, including older ones. Visits that carried no tags stay Direct, so start your comparison from the day tagging began.

Do I need the Conversions API for this?

No. Tagging is about knowing where visits come from, and the Conversions API is about sending conversion events from your server. They work together, but you can fix the Direct problem with UTMs alone.

Want tagging, GA4 channels and conversion tracking set up and tested? See our tracking and measurement service.

About the author

Editorial team

Guides and trackers from the ChatGPT Ads Agency team. Every platform fact links to OpenAI's own documentation.

Want a straight answer on ChatGPT Ads?

Tell us your category, markets and budget, and we’ll tell you:

  • whether the channel fits your business
  • what a fair first test would cost
  • what we’d do first

Free 30-minute call, and we reply within 24 hours. Minimum ad spend US$3,000 a month.