How to write a ChatGPT ad: 50-character titles, 100-character copy, and the review rules
The ad unit, the real character limits, what review rejects, and why a ChatGPT ad should read like the next answer rather than a search ad. With before-and-after examples.
On 4 September OpenAI rejected the first ad I submitted for Serge. Title: "Setup ChatGPT Ads". Copy: "Serge helps set up and manage ChatGPT ads". The reason on the ad object read OpenAI Brand Safety - Platform integrity and misrepresentation. The account had passed its own integrity review the same week; what they objected to was the claim.
Two days before that I'd read OpenAI's brand page and concluded that nominative use ("advertise on ChatGPT") was fine. As far as I can tell from reading about nominative use, that holds up as trademark law. It turned out to have nothing to do with anything, because the platform runs a private policy, and the one data point I have says a title built around their product name trips its misrepresentation rule. That policy is the one that decides. I also guessed wrong about the cause before checking. My first theory was a category ban on B2B, and I'd half-accepted the idea that half our buyers might be locked out. One GET on the account refuted it (integrity decision allowed), and the ad's review reason then said what had actually failed.
Where the ad sits
OpenAI's help center describes the unit: below a ChatGPT response, carrying the advertiser name, the favicon (your logo), a title, a line of copy, a landing page and an image, labeled as an ad. The answer above it comes from a separate system that advertisers can't influence. A response can also carry more than one ad unit, possibly from different advertisers.
In the API the creative type is chat_card. The other type, product_ad_template, takes title, price and image from a product feed, and I have not used it.
The limits, and the numbers that aren't limits
From the Ads API reference:
| Field | Limit |
|---|---|
| Title (creative.title) | 3 to 50 characters |
| Copy (creative.body) | up to 100 characters |
| Landing page (creative.target_url) | required |
| Image (creative.file_id) | required, uploaded separately |
| Ad name | 3 to 1,000 characters, internal, never shown |
You'll still find 16 to 24 for the title and 32 to 48 for the copy in guides and spec sheets. Those are recommended lengths at most, not caps. But in the r/PPC thread I keep coming back to, what I've learned from running real campaigns, two advertisers in Europe report that some placements truncate near the caps. So I write to roughly 24 and 48 first, look at the preview, and only spend the extra characters if they survive. I haven't seen a truncated render of our own ad yet; treat 24/48 as caution rather than a measured cutoff.
The image is uploaded through a separate endpoint and referenced by file id. The API page doesn't give dimensions but OpenAI's troubleshooting page does: PNG or JPG, square, no larger than 1200 × 1200. The API accepted a square PNG from us without complaint. Check the preview at phone width. The preview iframe OpenAI returns is 390 pixels wide.
What review does
The API exposes three review statuses, in_review, rejected and approved, and a rejection means a policy violation. Through the API, editing the creative is what gets it looked at again; in Ads Manager you can also request another review if you think the rejection was an error. The public reference page only lists review_status, but the ad object in the response carries a review object with the reason string, and that's where I found ours.
A few things from a test run on 17 September that I haven't seen in a guide. We changed the text on a paused test ad and the readback came back in_review immediately; when we swapped the image, the readback lagged about three seconds behind the write. If you poll right after an edit and see the old creative, wait and read again. A test ad pointed at example.com was rejected within a minute as landing_page_unusable; review fetches your landing page, and OpenAI's create-ads page says the page must not block OAI-AdsBot or OAI-SearchBot. And while our real domain was still under review, an edit to the ad returned HTTP 425 rather than 200. The domain hadn't cleared. Try again in a few minutes.
As for what gets rejected: ours was the platform's brand in the headline, and nobody else in the threads reports that one. A title the landing page doesn't back up will go the same way, since the page is a matching input and review reads it. Then the category rules, which are the part I'd read most carefully if I were in finance, health or legal: OpenAI's policy says ads are "primarily limited to consumer verticals" during the test and that advertisers in those three categories may be approved individually. One agency in the positive-experiences thread says legal opened up in the US on 31 August, which lines up with a policy revision around then, though the wording is still "approved advertisers". Mental health and politics are named as contexts ads won't sit next to, logged-out placements are all-audience only, and mature ads reach eligible logged-in users only.
A "Not serving" status is a different thing from a rejection, and hovering it in Ads Manager tells you which of verification, budget, end date, payment, or a landing page blocking OpenAI's bots you're looking at.
Write the next answer
The idea I've found most useful comes from that same r/PPC write-up, by an advertiser in Latvia who says up front that the insights are theirs and ChatGPT wrote the prose, which some readers held against them. By the time your ad shows, the person asked a question and got a decent general answer. A search ad has no information gap to fill at that point, and there's no feed for a social ad to interrupt. What's left is the follow-up, the specific thing the person would have typed next.
Their example, which they say ChatGPT generated and they don't love, is running shoes. Someone asks what to buy for marathon training and gets the usual answer about cushioning and gait. The reflex ad is "Best marathon shoes / Free shipping, shop now", which repeats the answer and asks for money. Their alternative is a title about stack height and pacing with copy about how carbon plates change your last 10K. It answers the next question, which is what earns the click.
The title and copy are also matching inputs (OpenAI lists them next to the landing page and the context hints), so a narrow hint under a generic title wastes the hint. OpenAI's own create-ads guidance says roughly the same from the other side: copy should complement the title and add new information rather than repeat it, and you should build a high volume and diverse set of ads.
How I write one
Most of the time goes on the first part, which is picking one conversation and writing down the two-sentence answer ChatGPT probably gave, because if I can't write that I don't understand the moment well enough to advertise under it. Then the person's next question, which is usually a specific version of the general answer (a number, a comparison, "but what about my case") and which support conversations are the best source I know for. The title is that question's answer, in 24 characters if I can manage it, the copy is the one reason to click, and the page opens with whatever the title promised. After that the work is volume, more variants than feels reasonable, since there's no way to know in advance which follow-up people ask. We have two written for Serge's first campaign, and I know that's too few, and I haven't written the others yet.
Three drafts
Scheduling software for a small clinic, under a conversation about reducing no-shows. I'm using a made-up product rather than ours because ours isn't live yet and I'd rather show the real thing when it is.
Search style. Title: "Clinic scheduling software". Copy: "Reduce no-shows. Free 14-day trial." Nothing the answer didn't say, plus a transaction request.
Social style. Title: "Still chasing no-shows?" Copy: "There's a better way. See how." A hook with nothing behind it.
Next-answer style. Title: "Reminders at 48h and 2h". Copy: "Two reminders beat one for most clinics." 23 and 40 characters, a concrete next fact, and a claim (a made-up figure for a made-up product) that the landing page would have to substantiate before you ran it, since OpenAI's policy wants claims accurate and non-deceptive. It's the one of the three I'd want to see the numbers on.
Sources
- OpenAI Help Center, Ads in ChatGPT: The Basics, "Ad format", "Selection and delivery", "Brand safety".
- OpenAI Help Center, Ads in ChatGPT; Create Ads; Troubleshooting Common Issues (image specs, re-review, not-serving causes); OpenAI Ads Policies.
- OpenAI Ads API reference, Ads, creative fields and review status.
- r/PPC, ChatGPT Ads: What I've Learned From Running Real Campaigns and Anybody positive experience with ChatGPT ads?.
- Our own account: ad rejected 4 September 2026; paused-object API run 17 September 2026.
More from the blog
- ChatGPT Ads context hints: what they do, what they don't, and how to write themResearch · 17 septembre 2026
- ChatGPT Ads clicks vs GA4 sessions: why they never match, and how to reconcile themResearch · 17 septembre 2026
- Your first ChatGPT Ads campaign: budget types, bids, review delays, and a stop ruleResearch · 17 septembre 2026
Commencez par votre site web.
Serge le transforme en campagne publicitaire ChatGPT que vous relisez avant de décider du budget, depuis le compte publicitaire qui vous appartient. La préparation est gratuite.
Lancer ma première campagne