If you are reading this, you have probably launched a ChatGPT campaign, or you are about to, and you want to know whether it makes money. The honest answer is that it is measurable, but the default setup misleads you in two directions at once. It can hide paid clicks inside your organic ChatGPT numbers, and it can hand the ads credit for customers that ChatGPT's answers had already won.
This is not a case study. It is the measurement plan I would use, built from OpenAI's developer documentation, the market data published so far, and what we see in our own logs of organic ChatGPT clicks. I build attribution software, so I am biased toward joining clicks to payments. I will say where that bias matters.
What you are measuring, as of September 2026
ChatGPT ads went from announcement to self-serve in about four months. Most of the measurement tooling arrived after the first advertisers had already spent money, which is why so much early reporting is unreliable.
| When (2026) | What changed | Why it matters for measurement |
|---|---|---|
| January | OpenAI says ads will appear at the bottom of answers, labelled and separate from the organic answer, for Free and Go users. Paid tiers such as Pro, Business and Enterprise stay ad-free[1] | Your organic recommendation and your ad can sit in the same answer |
| 9 February | Pilot launches in the US at a $60 CPM with a $250,000 minimum[2] | Early results come from large brands buying impressions, not clicks |
| April | Minimum falls to $50,000; CPMs as low as $25[2]. Cost-per-click bidding switches on, with recommended bids of $3 to $5[3] | Clicks become the unit most advertisers pay for |
| 5 May | Self-serve Ads Manager opens to US advertisers with no minimum, alongside a pixel and a Conversions API. Ads serve to Free and Go users in the US, Canada, Australia and New Zealand; Plus, Pro and Business users see none[4] | Small businesses can now buy, and can now measure conversions |
| 13 May | GA4 adds an AI Assistant default channel[14] | Organic ChatGPT clicks get their own GA4 bucket, and untagged ad clicks can fall into it |
| 16 June | Conversion-optimised bidding added to the Ads API[19] | OpenAI can now optimise toward the events your pixel sends |
Source: Digiday, 17 April 2026; PPC Land, 5 May 2026
The drop to zero is the reason this question now reaches small companies. Similarweb counted 5,171 distinct advertisers between 30 March and mid-June, with 3,770 active in a single week in early June[5]. Most of them are paying prices that make careless measurement expensive.
Source: Digiday, 17 April 2026 — ChatGPT launch and April low-end CPMs, other platforms as quoted for comparison
Even at the April low of $25, ChatGPT impressions cost more than twice what Google Display charged and five times Facebook's figure in the same comparison[2]. Convert that to clicks and the stakes become clear. At a $25 CPM and June's 0.50% average click-through rate, each click costs $5.00. At the $60 launch CPM it cost $12.00. Numbers like that need to be checked against payments, not against a platform's own conversion count.
The problem nobody warns you about: organic ChatGPT is already tagged
ChatGPT adds utm_source=chatgpt.com to the links it cites in its answers, and OpenAI documents this for publishers[12]. When we traced 287 ChatGPT answers back to their sources in September, every one of the 894 cited links carried that parameter. Organic ChatGPT traffic, in other words, arrives pre-labelled.
Now add paid clicks from the same interface. OpenAI appends its own click reference, oppref, to the landing URL of an ad click, and its pixel reads it[9]. Your analytics does not. Unless you add your own tags, that opaque ID is the only thing marking a click as paid.
GA4's newest feature does not help here. Since May it assigns the medium ai-assistant when a visit's referrer matches its list of AI assistants, and groups those sessions into the new AI Assistant channel[13][14]. An untagged ad click that carries a chatgpt.com referrer looks exactly like an organic citation click under that rule. Clicks from the ChatGPT mobile apps often arrive with no referrer at all and land in Direct, which we covered in why ChatGPT referrals go missing.
Here is what each tagging choice turns into.
| How the ad is tagged | What your analytics sees | Paid and organic kept apart? |
|---|---|---|
| Not tagged | A chatgpt.com referral, or no referrer at all from the apps. Referrer rules, including GA4's AI Assistant channel[13], file it with organic ChatGPT | No |
utm_source=chatgpt.com or chatgpt, no medium | The exact tag ChatGPT puts on organic citations[12] | No |
OpenAI's documentation example: utm_source=openai&utm_medium=paid[8] | GA4's paid-medium regex matches paid, so GA4 files it as paid[13]. Tools that recognise a fixed list such as cpc and ppc may not, and some read utm_source=openai as an AI-assistant signal | Depends on the tool |
utm_source=chatgpt-ads&utm_medium=cpc plus campaign and ad IDs | Paid under GA4's rules and under any tool that knows what cpc means. The source name cannot collide with an organic tag | Yes |
The last row is the one to use. cpc is the medium that every analytics tool I know of reads as paid, including ours: in Attrifast the medium is checked before any AI detection runs, so a cpc-tagged ChatGPT ad click is filed as paid and never inflates the ChatGPT revenue line.
Layer 1: tag every ad with your own UTM template
OpenAI's tracking-parameter template, query_string_template, can be set at the account, campaign, ad group or ad level, and it supports macros for the campaign ID, the ad ID and the click reference[8]. Set it once at the account level so no campaign can launch untagged:
utm_source=chatgpt-ads&utm_medium=cpc&utm_campaign={campaign_id}&utm_content={ad_id}
Three details decide whether this works.
- Parameters already in the destination URL win. OpenAI's precedence order is the destination URL first, then the ad, ad group, campaign and account[8]. A landing page URL you copied from an old newsletter, still carrying
utm_source=newsletter, will override your template silently. Strip parameters from destination URLs and let the template do the work. - The macros insert IDs, not names. Your campaign report will show
cmpn_…strings. Keep a lookup of campaign IDs to names, or type a readableutm_campaignat the campaign level instead of the macro. - Test before launch. Paste the destination URL with the template applied into a browser and confirm the visit appears in your analytics as paid. Our UTM builder produces the URL; the naming rules are in the UTM setup guide.
If campaigns already ran untagged, check whether your analytics keeps full landing-page URLs. Any landing URL containing oppref came from a ChatGPT ad click[9].
Layer 2: the OpenAI pixel and Conversions API
UTMs tell your analytics where a visit came from. They tell OpenAI nothing. For Ads Manager to report conversions, cost per action, attributed sales and ROAS, and for conversion-optimised bidding to work, OpenAI needs its own conversion signal[11].
That comes from the Measurement Pixel in the browser, the Conversions API from your server, or both. The pixel captures oppref from the landing URL and stores it in a first-party __oppref cookie for 30 days, restarting that clock each time a landing URL carries an oppref value[9]. It supports a consent switch, oaiq("consent", false), for regions where you need permission before measuring[9].
<script>
/* OpenAI's loader snippet from Ads Manager goes here, then: */
oaiq("init", { pixelId: "<YOUR-PIXEL-ID>" });
</script>
<script>
// On the order-confirmation page. Amounts are integers in minor units:
// 4900 means $49.00. Reuse the same event_id on any server-side copy.
oaiq(
"measure",
"order_created",
{ type: "contents", amount: 4900, currency: "USD" },
{ event_id: "order_12345" }
);
</script>
For software, the standard events that matter are trial_started, subscription_created, registration_completed and lead_created[9]. Three rules from the documentation save most of the debugging:
- Deduplicate. If the browser and your server both report the same purchase, give both the same
event_id. OpenAI keeps the first and ignores the rest[9]. - The server API does not capture the click for you. You have to read
oppreffrom the landing URL, keep it, for example in your Stripe Checkout Session metadata, and send it with the server event[10]. - Server events must be recent. An event timestamp has to fall within the last seven days[10]. You cannot backfill last month's orders.
A server-side event fired from your payment webhook is the more trustworthy of the two, because it only fires when money actually moved. The pixel fires when a page loads, so it depends on the buyer reaching your confirmation page, and it cannot know about a payment that later fails or is refunded.
Why Ads Manager and your analytics will never agree
Set everything up correctly and the two systems will still disagree. That is expected. They answer different questions on different clocks.
| ChatGPT Ads Manager | Your analytics | |
|---|---|---|
| Click window | 30 days by default; 7 or 14 selectable in reports[11] | GA4: 90 days for most key events, 30 for first visits[15]. Attrifast: the last non-Direct visit within 7 days |
| View-throughs | A separate one-day view window, reported apart from Conversions[9] | None. A view without a click leaves no session |
| Which date | The date of the ad click, by default[11] | The date of the conversion |
| Revenue | The amount your pixel or server sent with order_created[11] | Whatever your analytics records. Only a payment join sees refunds and renewals |
| Other channels | Ignored. Every ad platform credits its own click | One winner per conversion, depending on the model |
| Freshness | Allow at least a day for conversions to settle[11] | Usually same day |
Source: OpenAI Ads docs; Google Ads Help; Google Analytics Help; Dataslayer on Meta (March 2026); Attrifast attribution code
The window row explains most of the gap on its own. Google Ads also defaults to a 30-day click window[16]. Meta's default is seven-day click, with separate one-day engage-through and view windows since March 2026[17]. A buyer who clicks a ChatGPT ad on the 1st, a Google ad on the 10th and buys on the 20th is a conversion in both ad platforms. In a last-click analytics tool, it is one conversion and it belongs to Google.
Here is how that plays out on one campaign. The numbers below are invented and rounded, to show the mechanics rather than any real account.
| Month's view of one campaign | Orders | Revenue | Return on $3,000 spend |
|---|---|---|---|
| Ads Manager, click-through conversions | 60 | $7,200 as sent by the pixel | 2.4x |
| Ads Manager, view-through (reported separately) | 14 | not included above | — |
Analytics, orders whose last paid click was a chatgpt-ads visit | 41 | $4,920 | 1.6x |
| Same 41 orders after 3 refunds, from Stripe | 38 | $4,560 | 1.5x |
None of these rows is wrong. They are four answers to four questions. The one that pays your bills is the last row, which only exists if something joins the click to the payment. That is what revenue attribution means, and the full mechanics for Stripe are in our Stripe attribution guide. If you want the vocabulary for the difference between these ratios, see ROAS vs MER vs RPV.
One more calculation belongs next to that table: the break-even conversion rate. Divide your cost per click by the gross profit on one order. At a $5 click and $60 of gross profit per order, you need 8.3% of clicks to buy. At a $12 click, you need 20%. If your site converts paid traffic at 3%, no amount of attribution tuning will rescue the campaign.
Benchmarks to sanity-check your own numbers
There is no official benchmark. OpenAI publishes metric definitions, not averages. What exists comes from Similarweb's ad-intelligence panel.
Source: Similarweb via Search Engine Roundtable (May 2026) and PPC Land (June 2026)
In May the average ChatGPT ad drew a 0.68% click-through rate, the top quartile 1% and the best brands 1.57%, against roughly 0.35% for display ads[6]. By June the average had fallen to 0.50%[7]. The reason is visible in the next chart. As OpenAI showed ads in more conversations, the average conversation became a weaker match for the ad.
Source: Similarweb Generative AI Landscape report via PPC Land, 22 July 2026
Ads appeared in 14% of US desktop chats in May and 26% in June. The UK passed 30% by late June, and Japan was at about 10%[7]. Inventory is still concentrated. In early June, 71.6% of the impressions Similarweb observed were in the US[5].
Two cautions on using these figures. They come from a panel that observes ads, not from advertisers' accounts, so they cannot tell you conversion rates. And they describe an ad product that changed almost monthly. If your CTR sits well below 0.5%, look at your context hints and creative before you blame the channel.
The question the dashboards cannot answer: would they have bought anyway?
OpenAI says answers are not influenced by advertising, and that ads appear at the bottom of an answer when a sponsored product is relevant to the conversation[1]. That design has a consequence for attribution. The answer above your ad may already recommend you.
When that happens and the reader clicks your ad instead of the organic link, the ad gets the credit. Every tool in the tables above will record a paid conversion. None of them can tell you whether that customer would have arrived through the organic link a second later. This is the same problem as bidding on your own brand name in Google, and it has the same fix: a holdout.
- Split your markets. Ads Manager targets by country, region or market[18]. Pick two groups of regions with similar revenue history. Run the campaign in one and keep the other dark.
- Run it for at least four weeks. Shorter tests mostly measure noise, and many purchases fall outside a short window.
- Compare total revenue, not attributed revenue. The question is whether the test regions grew faster than the control regions, not how many conversions the ads claimed.
- Watch your organic ChatGPT line. If organic ChatGPT revenue in the test regions drops by roughly what the ads claim to have earned, the ads are harvesting demand you already had.
If a regional split is not possible because your volume is too small, alternate two weeks on and two weeks off. It is a weaker test, but far better than trusting a platform's own count. A post-purchase "how did you hear about us" question with separate "ChatGPT answer" and "ChatGPT ad" options adds a useful second witness.
Setup checklist
- Set an account-level template:
utm_source=chatgpt-ads&utm_medium=cpc&utm_campaign={campaign_id}&utm_content={ad_id}[8]. - Remove UTM parameters from every destination URL so the template is not overridden[8].
- Install the Measurement Pixel on every page, with the consent switch wired to your cookie banner where required[9].
- Send
order_created,subscription_createdortrial_startedwith integer amounts in minor units and anevent_id[9]. - If you send server-side events, store
opprefat checkout and send it with the event within seven days[10]. - Decide which report you trust for what: Ads Manager for bidding decisions, your payment join for revenue, and a holdout for incrementality.
- Keep organic ChatGPT as its own line and check that paid clicks never land in it. The ChatGPT revenue attribution page shows what that separation looks like.
- Log your baseline organic ChatGPT revenue for four weeks before the first campaign, so you have something to compare against.
What this does not tell you
- The market figures come from trade press and one panel provider. They describe the first seven months of a young ad product, and several have already moved.
- The worked example is illustrative. Your gap between Ads Manager and your own analytics could be larger or smaller.
- OpenAI's documentation changes often. Its API changelog recorded new measurement and targeting features in June, July, August and September[19]. Recheck the template syntax and event names before you rely on them.
- Nothing here measures what an ad does for a reader who never clicks it. View-through conversions exist in Ads Manager, but only a holdout tells you whether they would have happened anyway.
FAQ
How do I track ChatGPT ads in Google Analytics?
Add your own UTM parameters to every ad through the tracking-parameter template in Ads Manager, using a paid medium such as utm_medium=cpc and a source that cannot be confused with organic ChatGPT, such as utm_source=chatgpt-ads. GA4 then files the clicks in a paid channel. Without tags, an ad click that carries a chatgpt.com referrer lands in GA4's AI Assistant channel alongside organic ChatGPT citations, and clicks from the ChatGPT apps often arrive with no referrer and land in Direct.
What UTM parameters should I use for ChatGPT ads?
Use utm_source=chatgpt-ads and utm_medium=cpc, and fill utm_campaign and utm_content with OpenAI's campaign ID and ad ID macros. The source must not be chatgpt.com, because ChatGPT already appends utm_source=chatgpt.com to the links it cites organically. The medium should be cpc, because mainstream analytics tools read cpc as paid. OpenAI's own documentation example uses utm_medium=paid, which GA4 recognises but tools with a fixed list of paid mediums may not.
Why don't ChatGPT Ads Manager conversions match GA4?
They measure different things on different clocks. Ads Manager credits conversions within a 30-day click window by default, reports one-day view-through conversions separately, dates each conversion to the ad click rather than the purchase, and values it at whatever amount your pixel or server sent. GA4 uses its own lookback windows, 90 days for most key events, gives each conversion to one channel, and dates it to when it happened. A large gap between them is normal and does not mean either is broken.
Do I need the OpenAI pixel if I already use UTMs?
Yes, if you want Ads Manager to report conversions, cost per action and ROAS, or to use conversion-optimised bidding. UTMs only tell your own analytics where a visit came from. The Measurement Pixel, or the server-side Conversions API, is what tells OpenAI which clicks converted. Use both: UTMs for your reporting, the pixel for OpenAI's.
What is oppref in ChatGPT ads?
oppref is the click reference OpenAI adds to the landing-page URL when someone clicks a ChatGPT ad. The Measurement Pixel reads it and stores it in a first-party __oppref cookie for 30 days so that later conversions can be matched to the click. If you send conversions server-side through the Conversions API, you have to capture oppref yourself and pass it with the event, because the API does not collect it for you.
How much do ChatGPT ads cost in 2026?
Ads launched on 9 February 2026 at a $60 CPM with a $250,000 minimum commitment. By mid-April, Digiday reported CPMs as low as $25 and a $50,000 minimum. Cost-per-click bidding arrived in April with recommended bids of $3 to $5, and the self-serve Ads Manager that opened to US advertisers on 5 May removed the minimum entirely.
What is a good click-through rate for ChatGPT ads?
Similarweb measured an average of 0.68% in May 2026, 1% for the top quartile of advertisers and 1.57% for the best brands. By June the average had fallen to 0.50% as ads appeared in more conversations. OpenAI has not published an official benchmark, so treat these as an early third-party panel view rather than a target.
Can ChatGPT ads take credit for customers ChatGPT was already sending me?
Yes. ChatGPT shows ads at the bottom of an answer that may already recommend your brand. If the reader clicks your ad instead of the organic link, the ad gets the credit for a customer the answer had already won. The only way to know is a holdout test: run the ads in some regions and not others for several weeks, then compare total revenue and your organic ChatGPT revenue between the two groups.
Continue the research path
- Where does ChatGPT get its information? — the 287-answer study behind the
utm_source=chatgpt.comfigure - ChatGPT traffic not showing in analytics — why organic ChatGPT clicks lose their referrer
- How to track ChatGPT traffic in GA4 — the organic side of the same setup
- AI-influenced conversions, explained — measuring AI's role when it is not the last click
- First-touch vs last-touch attribution — which model to use when two platforms claim one order
- ChatGPT revenue attribution — organic ChatGPT visits joined to Stripe payments
Sources
Primary sources for the claims in this article. Numbered citations in the text link to the matching entry.
- [1]Our approach to advertising and expanding access to ChatGPT — OpenAI (2026).
- [2]'Everything is coming down': ChatGPT ads are getting cheaper — Digiday (2026).
- [3]OpenAI turns on cost-per-click ads inside ChatGPT — Digiday (2026).
- [4]OpenAI opens ChatGPT Ads Manager to all US businesses with CPC bidding — PPC Land (2026).
- [5]ChatGPT Ad Stats in 2026 — Similarweb (2026).
- [6]Similarweb Data: ChatGPT Ads Click-Through Rates — Search Engine Roundtable (2026).
- [7]ChatGPT loses web share to Gemini and Claude as ad penetration hits 26% — PPC Land (2026).
- [8]Campaign Management — OpenAI Developers (2026).
- [9]Measurement Pixel — OpenAI Developers (2026).
- [10]Conversions API — OpenAI Developers (2026).
- [11]Reporting — OpenAI Developers (2026).
- [12]Publishers and Developers - FAQ — OpenAI Help Center (2026).
- [13][GA4] Default channel group — Google Analytics Help (2026).
- [14]Google Analytics Adds AI Assistant As Default Channel Group — Search Engine Journal (2026).
- [15][GA4] Select attribution settings — Google Analytics Help (2026).
- [16]About conversion windows — Google Ads Help (2026).
- [17]Meta Attribution Change 2026: What Engage-Through Attribution Is — Dataslayer (2026).
- [18]Location Targeting — OpenAI Developers (2026).
- [19]Ads API Overview and changelog — OpenAI Developers (2026).

