Get your business verified in OpenAI's Ads Manager, then create a campaign and an ad group, upload the image, write the ad and submit it for review. Settle the bidding model first. It can't be changed later.
- Minimum budget: $25 a day on a US daily budget. It varies by market.
- Title length: 3 to 50 characters, 1 title only, plus a 100-character body. Your Google headline won't fit.
- Countries: 63, including the US, Canada, most of Europe, India and Southeast Asia.
- Active but not spending: the ad, ad group and campaign all need to be on, and review passed.
- Context hints: describe situations, not search queries. They guide matching; they are not keywords.
Build everything paused, get the ad approved, then switch it all on at once.
Before you start
3 things are worth checking before you create anything, because each one is a hard stop.
- Your country. Ads Manager is open to advertisers in 63 countries. Outside those you can register interest, and that's all. Check yours below.
- Your category. The allowed set is deliberately narrow right now, and healthcare, financial services and legal services are gated behind manual approval. Check the restricted list before you build anything, and what your own regulators require before you write the landing page.
- Your conversion tracking. ChatGPT Ads has no search terms report, so you cannot diagnose waste at query level. Outcome measurement is the only measurement you get. If your conversion tracking isn't already trustworthy, fix it first.
The slow part is the plan, not the form
The forms below are the easy part. What takes me longest, every time, is the step before them: working out the strategy for the account, then turning it into actual campaigns and a structure that fits.
Which offer gets its own campaign? Which situations deserve their own ad group? How much budget goes where?
Get that wrong and every field you fill in afterwards is carefully wrong.
That's the part Bytown does for you. It builds the strategy and the campaign structure from your business information, and it learns about the business from your website on its own.
Step 1 — Get verified
Sign up at Ads Manager and go through business verification. OpenAI reviews advertisers as well as ads: it checks that your business is real, that it fits an allowed policy category, and that it doesn't trip risk signals for fraud or deceptive behaviour.
So, what's the catch?
Restricted categories get an extra layer here — OpenAI's ad policies say they may require enhanced advertiser verification or manual review on top of the standard checks. Budget time for it rather than a launch date.
Step 2 — Create the campaign
The campaign holds the money, the dates and who can see the ad: location, platform and your own customer lists.
| Field | What it does | Notes |
|---|---|---|
name | Internal label | 3–1,000 characters. Never shown to users. |
budget | A daily or a lifetime spend limit | Micros — millionths of a dollar. OpenAI's standard daily minimum in the US is $25 a day, and it varies by market and currency. |
bidding_type | impressions, clicks or conversions | Defaults to impressions. Cannot be changed later. |
start_time / end_time | Flight dates | There is no day-of-week or hour scheduling beyond this. |
targeting.locations.include | Country, region or DMA | Omit it and you run in every available location. |
targeting.platforms.included | The iOS app, the Android app, the web | Web includes phones in a browser. Omit it and you run on all 3. |
targeting.custom_audiences | Your own customer or prospect lists | Including a list takes 25,000 matched users; smaller lists can still be excluded. OpenAI says to leave audiences off in the EEA and Switzerland for now. |
2 things to get right here.
Micros trip everybody once. A budget is expressed in millionths of your account currency, so a $500 lifetime limit is 500000000 and a $25 daily budget is 25000000. Miss 3 zeros and you've built a $0.50 campaign, or a $50,000 one.
Pick the bidding model deliberately. clicks gives you cost-per-click buying, impressions gives you CPM, and conversions is the conversion-optimized option OpenAI added on June 16, 2026 — it optimizes toward 1 conversion event while still billing you per click. That event is locked too, so pick it with the same care.
Here's the deal.
If you have working conversion tracking and enough volume, that last one is usually where you want to end up. If you don't, start on clicks.
You cannot change bidding_type after the campaign exists.
Not edit it, not migrate it. Choose wrong and you rebuild the campaign and everything under it. On a conversions campaign the conversion event is locked the same way.
This is the single most expensive 5 seconds in the whole setup.
Step 3 — Create the ad group
The ad group is where targeting and bidding actually live.
| Field | What it does |
|---|---|
context_hints | Free-text topics and phrases describing when your product is useful. Up to 2,000 of them. |
exclusion_hints | The same thing in reverse — the closest analogue to a negative keyword list. |
bidding_config.billing_event_type | impression for CPM campaigns, click for click and conversion campaigns. |
bidding_config.max_bid_micros | Your ceiling, per event. For conversion campaigns this is the target cost per acquisition, even though billing is per click. |
OpenAI recommends starting at a maximum bid of $3–5 per click, and defaults impression buying to a $60 maximum per thousand. Both are ceilings you set, not prices you pay — the auction is second-price, so you pay what it takes to beat the advertiser below you.
Now, about those hints. They look like a keyword list and they are not one:
These hints help guide ad matching, but they are not exact-match keywords and do not guarantee delivery in specific conversations.
In Ads Manager this is a box where you list topics, conversations and keywords. Filling it well is the other slow part of the setup, and I haven't found real guidance from OpenAI on how to do it for the best targeting.
So what does that mean for you? Write them as descriptions of situations, not as search queries. "Comparing rooftop cargo boxes for a family road trip" is a better hint than "cargo box".
A list that covers the ground has 4 kinds of hint:
- The problem, in your customer's words, before they know your category exists.
- The comparisons they make while choosing: you against an alternative, or "is it worth it".
- The moment that triggers the need: a move, a launch, a renovation, a new hire.
- Your own name, with the questions people ask about it: what you do, whether you solve their problem, how easy you are to use. In my experience that's where a small budget works hardest.
Bytown drafts this list with the rest of the campaign, from the same business information.
Here's the thing.
The system reads your title, your body copy and your landing page alongside the hints when it decides whether you're relevant, so the hints are one input among several — not a switch.
Use exclusion_hints from day one. It's blunt, but every advertiser has it. Advertisers who qualify can also use Negative Phrases, added October 5, and any customer list can be excluded at campaign level.
Step 4 — Upload the creative
Upload your image and keep the returned file ID. You'll attach it to the ad in the next step.
In Ads Manager there's a shortcut: "Add new ad" suggests a draft with an image, title and description taken from your website, for you to review before it's used. OpenAI says it does not write new copy or imagery with AI.
A product-feed campaign is the exception: those pull the image and destination from the feed item instead. What the image should actually be is the one thing this step does not decide for you; the catalogue of static archetypes groups them by the job each one does.
Step 5 — Write the ad
This is where most people discover the format is tighter than they planned for. 1 title and 1 line of body have to carry the whole offer, which makes this a hook problem more than a copywriting one — what actually holds attention is the research behind that.
| Field | Limit | For comparison, a Google RSA |
|---|---|---|
creative.title | 3–50 characters | 15 headlines × 30 characters |
creative.body | 100 characters max | 4 descriptions × 90 characters |
creative.target_url | Landing page | — |
creative.file_id | The uploaded image | — |
1 title. 1 body. No machine to rotate 15 headlines and find the winner for you.
I found this genuinely changed how I wrote. On Google you can hedge — throw in a brand headline, a feature headline, a price headline, and let the system sort it out.
Here you get 1 sentence to say what you sell and why it's worth a click, and the ad has to earn relevance on its own merits because relevance is weighted in the auction.
Simply put:
Write the offer. Cut the brand adjectives. Then cut it again to fit.
Remember the landing page is reviewed too. OpenAI's standards apply end to end, and an ad whose destination introduces something the creative didn't depict gets rejected.
Step 6 — Submit and watch the review
Reviews typically take a few minutes. Then comes the step that quietly wastes the most time.
An ad serves only when all 4 of these are true: the ad is enabled, its ad group is enabled, its campaign is enabled, and the ad has passed review. Miss any one and you have an "active" ad spending nothing.
What's actually important?
The field to watch is review_status, which reads in_review, rejected or approved. When something isn't spending, check that before you touch bids. I have watched people raise a maximum bid 3 times on an ad that was sitting in review the whole while.
Build the campaign and ad group paused, get the ad approved, then enable everything at once.
It costs you a few minutes and removes the whole class of "is it live or not" confusion.
Wire up measurement before you enable anything
Reporting covers impressions, clicks, spend, click-through rate, average cost per click, average cost per thousand impressions, and conversions. That's the whole list — there is no query-level view.
Conversions arrive one of two ways: a measurement pixel on your site, or a server-to-server conversions application programming interface, the same shape as Meta's. Set one up before you spend, because retrofitting attribution to a campaign that already ran means throwing the first week away.
Want to know the best part?
Static tracking parameters survive the click, so tag your landing page URLs and the traffic shows up in the analytics you already run. That's the cheapest sanity check available: if Ads Manager says 40 clicks and your analytics says 3 sessions, something is wrong with the destination, not the campaign.
The 4 things that caught me out
- The bidding model is permanent. Decided at creation, not editable, and so is the conversion event on a conversions campaign. Rebuild is the only fix.
- 4 switches, not 1. Ad, ad group, campaign, review status. "Active" means less here than you'd assume.
- 50 characters. The headline you brought from Google will not fit, and there is only 1 of it.
- Hints are not keywords. You are describing when you're relevant, not instructing a matcher. Anyone whose Google discipline is built on exact match and tight negatives has to unlearn something here.
That fourth one is the one I'd underline. The most expensive account I ever inherited was a business-to-business fintech running on autopilot: right keywords, wrong match modifiers, consumer traffic nobody had excluded, roughly 80% of the budget gone.
The fix lived in the search terms report.
Plot twist:
On ChatGPT Ads there is no search terms report — so the answer is to cap the budget, watch conversions rather than clicks, and never let it run unattended.
FAQ
Which countries can run ChatGPT Ads?
Ads Manager is open to advertisers in 63 countries, including the US, Canada, most of Europe, India and Southeast Asia. Outside those you can register interest, and that is all.
Is there a minimum budget?
Yes, on daily budgets. OpenAI's standard minimum in the US is $25 a day, and it varies by market and currency. You can set a lifetime budget instead.
How long does the ad review take?
Usually a few minutes.
Which choices cannot be undone later?
The bidding model. It is decided at campaign creation and is not editable, and on a conversions campaign neither is the conversion event. Rebuilding the campaign is the only fix, which is why the order of these steps matters more here than it does on Google.
Why is my ad active but not spending?
There are 4 switches, not 1: the ad, the ad group, the campaign, and the review status. An ad only serves when all of them are clear, so "active" means less here than you would assume.
Will my Google headline fit?
Probably not. The title limit is 50 characters, and there is only 1 of it.
Are context hints the same as keywords?
No. Hints describe when you are relevant; they do not instruct a matcher. Anyone whose Google discipline is built on exact match and tight negatives has something to unlearn here.
How do I choose context hints?
Describe situations, not search queries: the problem in your customer's words, the comparisons they make, the moment that triggers the need, and the questions people ask about you by name. OpenAI treats hints as guidance for matching, not as keywords.
What to do next
Start capped and deliberate: 1 campaign, 1 ad group, tight hints, exclusions in place from the first day, and a number written down that would make you switch it off.
For what a click has actually cost across the accounts we run, by vertical, see what ChatGPT Ads actually cost. For how the channel compares to the one you already run, see ChatGPT Ads vs Google Ads. For using ChatGPT to build the Google campaigns rather than to place the ads, see 10 ChatGPT prompts for Google Ads. The overview lives on ChatGPT Ads for small business.
Or skip the setup entirely
Connect your OpenAI Ads account and Bytown builds the campaign, ad groups and ads for you — alongside Google, Meta and LinkedIn. Every change that touches spend waits for your approval.
Generate a free campaign Rather have it run for you? Talk to a marketer.