Log in / Create free account🌐 ES☀️

Advanced training · Module 18 — ChatGPT Ads — measurement and traffic quality

The funnel ad by ad: from impression to customer, and the cost of every step

⏱️ 7 min read · 🤖 ChatGPT Ads 📐 Measurement · updated on 2026-09-18

The question that decides next month's budget isn't "how much did the click cost me?", it's "how much did the customer cost me?". And in ChatGPT Ads that answer isn't in the platform: you have to build it.

The six steps

# Step Who counts it
1 Impression The platform
2 Click The platform (and it's what you're charged for)
3 Real visit You: a confirmed person on your site, bots excluded
4 Lead You: form, sign-up, call or order
5 Qualified lead You: the one your business accepts as good
6 Sale You, with its value

The border sits between 2 and 3, and it's a real border: from the third step down, the platform knows nothing you don't tell it. You can report conversions back (that route exists and OpenAI documents it for developers), but the data is born in your house.

Steps 4 to 6 are where the business is. A channel that brings twice as many leads at the same cost, but of worse quality, is a more expensive channel, whatever the report says.

The judge is cost per qualified lead

When you compare ChatGPT Ads with Google Ads, with Meta or with anything else, use the real cost per qualified lead, calculated from your data. Never the conversions each platform claims: each one uses its own window, its own model and its own deduplication, and they all tend to claim the same events.

And there are no official benchmarks: OpenAI doesn't publish any reference figures for CTR, conversion rate or cost per acquisition. What circulates are agency samples — for example, a recommended CPC of $3-5 and a starting CPM of $60 published by Choice OMG in 2026, a third-party source, not official. They're useful for sizing a test, not for judging your account. Your benchmark is your own funnel in another channel.

How the table is built, and how to read it

You only need two things, and both are prepared before launch:

  1. A different ad identifier for each ad in the destination address (a utm_content of your own, for example). Without it, everything you measure is a campaign average and you can't switch off the ad that deserves it.
  2. Measurement on the destination page, on all of them: if an ad points to a page without measurement, that ad doesn't exist in your funnel. It happened to us at launch: 7 of our 8 ads pointed to pages where we had no measurement installed.

With that, every lead is born with the ad that brought it and the rest is arithmetic.

💡 Ninja tip: if you create variants of the same ad to test them, give each one a different identifier from minute one. Two variants sharing an address share visits, and afterwards there's no way to tell them apart.

A made-up but realistic example (sample figures, not from a real account), 30 days and two ads from the same campaign:

Ad A Ad B
Impressions 12,400 9,800
Clicks · CTR 96 · 0.77% 140 · 1.43%
Spend · CPC €288 · €3.00 €322 · €2.30
Real visits 81 118
Leads · cost per lead 9 · €32 14 · €23
Qualified · cost 3 · €96 2 · €161
Sales · revenue 1 · €1,450 0 · €0

Read quickly, B wins: better CTR, cheaper CPC and cheaper leads. Read to the end, A wins, and not by a little: its qualified lead costs €96 against €161, and it's the only one that brought revenue. B attracts easy clicks that don't qualify. Stop at the CTR row and you switch off the good ad.

⚠️ Trap: at these volumes, 3 qualified against 2 is not a proven difference. The table is there to direct your attention and shape the hypothesis; the decision to switch something off waits for a proper sample. Here the sensible move is to let A run and rewrite B.

The gaps that are normal

OpenAI's own help centre acknowledges that its figures, your analytics and other platforms don't have to match: different attribution windows and models, time zones, browser conditions, consent, different deduplication and modelled conversions. Add your own: filtered bots, click identifiers lost on the way and conversions that arrive late. So:

The revenue report is yours

Two facts that belong together: the platform's reports don't carry the conversion value (the amount only lives on your side, so you calculate ROAS yourself) and in ChatGPT Ads bidding by value doesn't exist, there's no equivalent of tROAS.

Since bidding can't chase the amount, the only way to bid for quality is to choose which event counts as the campaign's conversion — the qualified lead instead of the raw lead — and that needs volume: we don't take the step below 30 qualified leads a month.

Comparing with Google Ads without cheating

Three rules, all of them common sense:

And a fourth, about honesty: ChatGPT Ads has just been born in Spain (self-serve since 31/08/2026). It coming out worse than Google in the first comparison is no news; what matters is whether the gap closes when you adjust ad, device and moment.

What to take away

📎 Sources and further reading

⚠️ Free training with no support. Ninja Scripts support channels (email and Telegram) are only for the use of the scripts, not for Google Ads questions or questions about this training.

Pick up here

← BeforeTraffic quality ad by ad: bots, bounces and bad fitChatGPT Ads — measurement and traffic qualityAfter →Custom audiences in ChatGPT Ads: include, exclude and adjust bids with your own dataChatGPT Ads — measurement and traffic qualityRelatedWhere does your ad send people? The link that breaks most campaignsAdvertising in ChatGPT: first stepsRelatedWhy your clicks and your visits never match (and when to worry)Advertising in ChatGPT: first stepsRelatedChatGPT Ads case study: late-night mobile traffic, and how to move to office hours and desktop onlyChatGPT Ads in depth — ads, bidding and optimisationRelatedDiary of our campaign, day by dayChatGPT Ads — the platform, the market and our diary

See the full syllabus

🎓
You're reading the Ninja Academy in the open

Create your free account (no card) to save your progress, take the graded quizzes, earn the Basic level certificate and unlock part of the Intermediate and Advanced training.

Create my free account →
🥷

Subscriber feature

This option is part of the Ninja Scripts Suite subscription.

See the subscription →