In ChatGPT Ads the ad appears below the end of a response, labelled as sponsored and visually separate from it. You get a small card to suggest the next step and a landing page that must deliver exactly what the card promises. You create the ad in Ads Manager, OpenAI's self-serve tool, or through the API.
Here are the official rules and what we learnt setting up our own campaign of 8 ads.
The card, field by field
Each ad shows the advertiser's name, its icon, a title, body text and an image, and links to a landing page.
| Field | Official limit | In practice |
|---|---|---|
| Title | 3 to 50 characters | 16 to 24 (our measure) |
| Body text | Up to 100 characters | 32 to 48 (our measure) |
| Image | Required; JPEG, PNG or WebP; the API requires at least 640×640 on upload | Square; we made ours 1080×1080, one per resource |
| URL | http or https, up to 2,048 characters, accessible to OpenAI's crawlers | With its own UTM |
| Account icon | JPEG, PNG or WebP, at least 256×256 | A symbol, no lettering |
The form accepting 100 characters doesn't mean 100 get read: far less is read on the card. Hence our practical measure, with the main idea first. Check it with the ad preview, which expires after 24 hours.
The brand icon is drawn tiny, and a logo with lettering turns into a smudge: use a symbol that is recognisable at that size.
There are also product ads with a catalogue, Shopping-style; this lesson focuses on the card.
What to write
Whoever sees your ad has come from a conversation. Frame the ad as their next step, not as a slogan: what they get and who it's for, in the vocabulary of the ad group's context hints (lesson 1 of this module).
OpenAI's basic rules: nothing misleading, professional language, no discrimination and no imitating the ChatGPT interface. Your image mustn't look like a ChatGPT screenshot or an assistant reply.
💡 Ninja trick: write the title as an answer to the group's hint. If the hint talks about "families looking for a weekend away with young children", the title could start with "Weekends with kids" (18 characters): it fits both the conversation and the practical measure.
The landing page: a robot reviews it, and visits it
Review is mostly automated (language models and classifiers, with human oversight) and it continues after approval. It looks at the ad and at the destination too:
- Accessible. Ads or landing pages that can't be reviewed aren't eligible: no pages behind a login or shut off by your anti-bot protection.
- Consistent. The landing page must match the advertiser and the offer in the ad.
- Clean. An approved creative can't lead to a destination with disallowed content.
During our review, our analytics logged visits from OAI-AdsBot, OAI-SearchBot and ChatGPT-User. They aren't customers: don't count them as ad traffic. The same goes for your own checks: when we verified the ad URLs with a script, our analytics recorded them as people arriving from the ad. We filter them out by requiring a browser to confirm the visit.
Only promise what the page delivers
It happened to us: we slipped in two "free ebook" ads whose ebooks were actually only free for subscribers. We pulled them. An ad that promises what the landing page doesn't deliver burns budget and brand: you spend on visitors who leave feeling misled.
⚠️ Pitfall: editing the creative creates a new version and another review. And changing the account's name, URL or icon can trigger a new brand review; while an account review is pending there is no delivery. Brand review kept our 8 approved ads at zero impressions. Settle your brand and icon before launch.
Pausing isn't retiring
We had two paused ads and, when we used the bulk "activate all" option in Ads Manager, they were reactivated. Pausing leaves an ad one click away from coming back: anything you want to retire, archive it. That's what we've done ever since.
Variants you can measure
The finest level in reports is the ad. To compare properly:
- One variable at a time. Same group, same image and same text; change only the title. Then the image. Then the text.
- A new ad for each variant, rather than editing the one you have: editing triggers another review, and that ad's report would mix two versions.
- A different UTM per ad (for example in
utm_content): it's kept on the click and you'll see it in your analytics. - Rates, not totals. The system chooses on expected relevance and performance, so don't expect impressions to be split evenly: compare CTR and cost per conversion.
What to remember
- Title 3 to 50 characters and text up to 100, but far less gets read: our measure is 16-24 and 32-48.
- Square image (640×640 minimum via the API) and an icon legible at a tiny size: a symbol, not lettering.
- Editing the creative creates another version and another review; touching the brand can trigger another brand review.
- OpenAI reviews and visits the landing page: accessible, consistent and never promising what it doesn't deliver.
- Archive what you retire: a bulk "activate all" brings paused ads back.
- Variants: one variable at a time, in new ads, each with its own UTM.