Log in / Create free account🌐 ES☀️

Advanced training · Module 19 — ChatGPT Ads — the platform, the market and our diary

Diary of our campaign, day by day

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

This is the module's living lesson: our campaign, with its real numbers and its dates. Everything below was measured in the Ninja Scripts account or in our own analytics. No industry averages, no client cases: just what happened, zeros included, with the date on which each number was true.

The setup

A deliberately simple campaign, so we could understand whatever happened:

Setting Value
Objective Clicks
Budget $25/day
Country Spain
Context hints 4, generated by the Ads Manager itself
Conversion event 1 (sign-up in the panel)
Ads 8

⚠️ The trap we fell into: 7 of the 8 ads pointed to pages with no measurement installed. You can build a campaign in an afternoon; measurement has to be in place BEFORE the first impression, or the first day of data is lost forever.

The days before · All approved, nothing live

The 8 ads were approved, with no low-bid warning, and the campaign was not serving. Not one impression. The cause was not in the ads but in the account brand review, approved on 16/09/2026 at around 11:30. A cheap lesson: when everything looks right and nothing delivers, check the account reviews (see "Brand, policies and reviews: how to stay out of trouble").

17/09/2026 · First day serving

Metric Value
Impressions 4,024
Clicks 0
Spend €0

With a Clicks objective, no clicks means no spend: that day the campaign showed four thousand times and cost nothing. That is worse news than it sounds, not better: four thousand people saw the card and nobody tapped.

Where they were seen:

Surface Impressions
iOS app 2,079
Android app 1,316
Desktop web 548
iOS web 49
Android web 37

In short: 3,481 on mobile against 548 on desktop. (The breakdown adds up to five impressions more than the day's total because that query also covers the following morning: each breakdown is requested separately and with its own period, so comparing them without checking the dates is the quickest way to believe in a mismatch that isn't there.)

Which ad took the shop window:

Ad Impressions
One-month demo 2,112
Ninja Academy 592
Ebook · The eternal ad 513
Weekly news 188
Guardian script (free) 188
Ebook · AI Max, the black box 162
AI Max Analyzer script (free) 141
Ebook · Quality Score 133

Over half the impressions went to the ad that demands the most effort: trying a script for a month, which means creating an account and installing it in Google Ads. A desktop job, served mostly in the mobile app.

17/09/2026 · What we measured ourselves

What the platform counts is one thing; what reaches your site, another:

Metric (our analytics, bots excluded) Value
People 19
On mobile 16 of 19
Arrived between 2:00 and 5:00 17 of 19
Time on page (median) 2 seconds
Left without reading anything 37%
Sign-ups 0

As an internal benchmark from the same month: people arriving at our site from social media spent almost 3 minutes and only 10% left without reading. This is not a "bad traffic" problem: it is a fit problem.

💡 Ninja tip: that night also brought about 40 visits from OpenAI's crawlers and about 25 from automated link checks. Without filtering them, the traffic looked bigger and even worse. Filter bots before you pass judgement on quality.

One important caveat about the hours: the concentration between 2:00 and 5:00 is what the report gives in the account's time zone. We do not assume that is local time: it has to be confirmed before taking any scheduling decision.

17/09/2026, 19:09 · The decision

With those numbers, and knowing one day is not a conclusion, we limited the campaign to desktop and to office hours (Mon-Fri, 9:00-18:00). It is a hypothesis, not a verdict: our audience manages campaigns at work and at a computer. It is logged with its date so it can be judged in two weeks against comparable working days.

18/09/2026 · The first accepted conversion

Until that day, OpenAI's conversion setup screen still said pending, and the reason was not a misconfigured setting: no conversion had ever arrived. Our first send was being rejected because of how we declared the event: we sent it as a web event, and that requires stating the URL where it happened. That particular sign-up arrived with no known landing page.

The fix was to stop declaring it as a web event, rather than invent a URL. With that, the first conversion was accepted on 18/09/2026. Making the data up would have worked just as well — and would have dirtied the measurement forever.

What we still do not know

Told like everything else:

What we will look at next time

  1. Real cost per sign-up from our own measurement, not clicks.
  2. Working days against working days, before and after the change.
  3. The surface breakdown with the campaign already limited to desktop.
  4. Whether the highest-effort ad keeps taking the shop window.
  5. Whether conversions keep going through without rejections.

This lesson is updated whenever there is news, good or bad: zeros get told just like wins.

⚠️ 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

← BeforeBrand, policies and reviews: how to stay out of troubleChatGPT Ads — the platform, the market and our diaryRelatedWhat ChatGPT Ads does NOT let you do (and what you do instead)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 optimisationRelatedBidding for quality when bidding by value doesn't existChatGPT Ads in depth — ads, bidding and optimisationRelatedWhy there are no official performance benchmarks, and how to read the ones going aroundChatGPT 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 →