I have managed ChatGPT Ads since April 2026, on a US marketplace account. Roughly three quarters of a million CZK went through it in four months across three bidding generations. I am not naming the advertiser or publishing absolute volumes. Volumes below are indexed and rates are shown as the difference against the compared variant.
Three things decide whether a new account performs, and creative is none of them. Choose the bidding type before you build the first campaign. Set the bid high. And write context instead of keywords.
What the account did
Three generations, the same advertiser, the same 30 metro areas. The click generation is 100 and rates are the difference against it.
| Bidding type | Spend | Impressions | Clicks | CTR | CPC | CPM |
|---|---|---|---|---|---|---|
| Reach (CPM) | 55 | 38 | 33 | −16 % | +69 % | +43 % |
| Clicks (CPC) | 100 | 100 | 100 | base | base | base |
| Conversions (oCPC) | 39 | 137 | 210 | +52 % | −81 % | −72 % |
The conversion generation bought twice the clicks on 39 % of the spend. That comparison flatters it, because product feed ads sit inside it. Those came in 43 % cheaper per click and 46 % cheaper per thousand impressions than text ads, at a CTR 6 % lower.
The fair comparison is text ads on clicks against text ads on conversions. Same format, same account, only the bidding type differs:
- CPC 69 % lower
- CTR 61 % higher
- CPM 50 % lower
Conversion bidding lets the optimiser decline the auctions where it expects no conversion. You stop paying for the cheap, wide inventory a flat CPC bid buys indiscriminately. Reach bidding does the opposite: the worst CTR and a thousand impressions 43 % more expensive than the click variant.
1. Bidding type is a one-way door
You set the bidding type when the campaign is created and you cannot change it afterwards. There is no switch strategy button and no field for it in the API; an update call rejects it as an unknown parameter. Changing your mind means rebuilding the campaign, the ad groups and every ad underneath.
This account paid that twice: built on reach in April, rebuilt on clicks in July, rebuilt on conversions in late July. Unless you have a genuine brand brief, create on conversions from the start.
2. The bid floor is invisible and it kills accounts quietly
This is the most useful thing I can tell anyone launching an account. Thirty text campaigns were correct in every visible respect: active status, approved ads, a conversion event attached, healthy spend elsewhere in the account. They bid a target CPA of CZK 52. Across a whole day they delivered one single impression. Nothing flagged it. No limited by bid diagnostic, no learning-phase warning.
Then I raised the bid to CZK 416. Same campaigns, same creative, same targeting:
| Day | Delivery vs day 0 | Change |
|---|---|---|
| Day 0 | 1× | target CPA CZK 52 |
| Day 1 | 523× | target CPA raised to CZK 416 |
| Day 12 | over 15,000× | no intervention |
523 times the delivery, the same day, from a bid change alone. Budget was never the constraint:
- On a conversion campaign,
max_bidis a target CPA, not a max CPC. You still pay per click and the auction sets the price. That CZK 416 CPA bid landed at an effective click price around a tenth of it. People read it as a CPC bid and set it ten times too low. - Open at your real allowable CPA and walk it down. Below the floor you get no delivery, no signal, and no way to tell whether the bid, the creative or the targeting is at fault.
- Zero delivery is the symptom. When a campaign sits flat at zero for a day, check the bid before anything else.
- The bid cannot exceed the campaign's daily budget. This is not in the documentation. A CPA bid of CZK 1,041 needs at least that much per day.
3. Prompt context against keywords and SKAG
The account ran all three structures side by side, in the same cities and on the same CPC bidding. You rarely get a read this clean. The variants were multi-keyword ad groups (a themed keyword list), SKAG (one keyword per ad group) and prompt context (a plain-language description of the user and their situation, no keywords).
Multi-keyword is 100 and rates are the difference against it.
| Structure | Spend | Impressions | Clicks | CTR | CPC | CPM |
|---|---|---|---|---|---|---|
| Multi-keyword | 100 | 100 | 100 | base | base | base |
| SKAG | 102 | 121 | 107 | −12 % | −4 % | −15 % |
| Prompt context | 21 | 27 | 25 | −8 % | −16 % | −23 % |
No structure won everything. Keywords had the highest CTR, prompt context the cheapest click. The same split holds across all 30 metros: prompt lost 1 % on CTR but saved 8 % on the click. SKAG finished last on both, with CTR 10 % worse and clicks 10 % more expensive than keywords.
SKAG did not pay for itself
SKAG bought 21 % more impressions for 2 % more spend, so a cheaper CPM. But CTR fell 12 %, which handed almost all of that back at the click stage. Net CPC gain: 4 %. For that 4 % the account carried ten times the ad groups and ten times the maintenance.
The core issue: this is not a keyword auction. Splitting down to one keyword per ad group polishes a matching mechanism the surface does not use, and starves each ad group of the context the model actually reads.
Prompt context buys the cheapest click
Prompt delivered the lowest CPC and CPM in the matched test, in the aggregate and in every individual metro. The same ordering appears in the older reach generation, so it is not an artefact of one window.
One honest caveat, visible in the table at a glance. Prompt ran at 21 index points of spend against 100 for keywords, and lower spend can improve CPC on its own by staying in the cheapest slice of inventory. Treat that 16 % as a direction, not a measured effect size.
The strongest signal is what the account did on its own. When it rebuilt on conversions, it dropped keyword ad groups entirely. All 30 text campaigns now run 100 % prompt context, around 22 ad groups per metro, each carrying 25 to 31 statements.
A usable statement looks like this: "a vehicle owner due for an oil change, comparing conventional against synthetic pricing at local shops and looking for a coupon before deciding, immediate need, price-driven". A description of a person mid-decision, not a match target. The most common mistake is pasting a keyword list into that field, and SKAG is that mistake taken to its logical extreme.
4. The platform will not tell you whether it paid off
Everything above is upper-funnel efficiency. It has to be, because the reporting API returns no conversion or revenue metrics at any level. The available fields are spend, impressions, clicks, CTR, CPC and CPM. Nothing else. There is no value-based bidding either: no target ROAS, no bid strategy field at all. The optimiser targets conversion count, so two channels with different average order values look identical to it.
Stamp a stable identifier into your tracking template at build time, realistically the ad group ID, since ad IDs are not known before creation. Then join platform delivery to your own order data. Without that you are optimising an acquisition channel on CPC. And CPC, as you saw above, can move 69 % without saying anything about profitability.
5. Small things that cost real time
- Geographic targeting has no city level. Country, region or state, DMA and postal code only. Two cities inside one DMA will bid against each other.
- Naming a city in keywords or on the landing page does not restrict serving. Thirty city campaigns here were targeting the entire country.
- Archiving is one-way. There is no delete and no un-archive. Snapshot the configuration first.
- A feed campaign with no ad in the ad group delivers nothing and reports no error.
- Validation is shallow. A request passes with target IDs that do not exist.
Summary
- Create on conversion bidding. The type is permanent, and on identical text ads it beat click optimisation by 69 % on CPC and 61 % on CTR.
- Open at your real allowable CPA, not a cautious fraction of it. The bid also cannot exceed the campaign's daily budget.
- A campaign below the auction floor does not deliver and the platform stays silent. Check delivery within 24 hours of launch.
- Keywords had the highest CTR, prompt context the cheapest click. SKAG lost on both.
- Build ad groups around prompt context if you are optimising for click price. A description of a person, not a list of phrases.
- Conversions and revenue are not queryable through the reporting API. Stamp the ad group ID into your tracking template and join it to your orders.
Why this suddenly matters for European stores is in ChatGPT Ads comes to Europe. Where the shift is heading next is in the piece on agentic commerce.
Before you spend the first crown, do one thing: open the campaign a day after launch and look at impressions. If it reads zero, do not go hunting through your ad copy. Your bid is too low and the platform will not tell you, not even a month later.
Ratios and indices are calculated from platform reporting and cover April to August 2026. Absolute volumes, spend and the advertiser are withheld. Metrics are upper-funnel only; the platform exposes no conversion or revenue data through its reporting API. Bids converted at the Czech National Bank rate for 19 August 2026.
