Back to Blog

ChatGPT Ads for Ecommerce: How to Set Up a Product Feed Ads Manager Accepts

Blog hero graphic for a ChatGPT Ads product feed setup guide titled 'Your Google Feed Won't Work Here', with an outline link icon connecting a feed file to a chat bubble

Key Takeaways

  • ChatGPT Ads Manager runs product-feed campaigns, but it rejects Google Merchant Center XML in every delivery method.
  • In our test on a live merchant feed, plain .jsonl was fetched and still refused, while the same content as .jsonl.gz was accepted on the first try.
  • is_ads_eligible defaults to false. A feed without it can connect cleanly and still have zero products allowed in ads.
  • Manual CSV/TXT uploads expire after 14 days, so a hosted feed URL is the practical choice for a standing campaign.
  • Send the whole live catalog, not only the products you have finished reviewing, or the ads catalog ends up nearly empty.

If you already run Google Shopping or Performance Max, ChatGPT Ads will feel familiar. OpenAI’s Ads Manager now runs product-feed campaigns: you connect a catalog, and ChatGPT can show your products as sponsored placements inside shopping conversations. For ecommerce teams, the feed is the part that matters, since that’s what the ad gets built from.

What surprised us is how little of a Google feed carries over. A ChatGPT Ads product feed has its own file format and its own field names, one default works against you, and a couple of the failures come back with no useful error. We learned this on 5 October 2026 while connecting a live merchant feed to Ads Manager. Below is what we ran into, roughly in the order you’ll hit it.

Three ways to add a ChatGPT Ads product feed

Ads Manager gives you three ways to get products in.

Upload a CSV or TXT file

Fastest way to start, and a bad way to keep going. Items from a manual upload expire after 14 days. A standing campaign built on uploads means someone re-uploads the catalog every two weeks, and the one time they forget, the products drop out.

Connect a hosted URL

You give Ads Manager an HTTPS address and OpenAI fetches the catalog from it on its own schedule. You paste it once. As long as the file behind the URL stays current, so does the feed.

Set up an SFTP connection

Server-to-server pushes. It works, but someone technical has to build and maintain it.

For most stores the hosted URL wins: it doesn’t expire, and you don’t need an engineer. The rest of this guide assumes that route.

Why your Google Merchant Center feed gets rejected

The first thing nearly everyone tries is pasting the Merchant Center feed URL they already have. It gets rejected. OpenAI doesn’t accept XML in any delivery method, so the RSS feed that has run your Google Shopping campaigns for years is the wrong shape here.

The field names are different too. OpenAI’s spec comes from the Agentic Commerce Protocol (the standard OpenAI and Stripe built for shopping in ChatGPT), and it says item_id where Google says id, url where Google says link, image_url where Google says image_link. Values have their own format as well. Price is written as "79.99 USD", and availability has to be one of OpenAI’s allowed values rather than whatever your store platform exports.

In practice you’re producing a second file from the same catalog. We went through the general format differences in AI Shopping Feed Formats. ChatGPT Ads adds a few more on top.

Plain .jsonl failed. The .jsonl.gz version worked

This one cost us the most time. OpenAI’s spec is built around JSONL (one product per line, each line a JSON object), so we served the catalog as a plain .jsonl file. OpenAI fetched the whole file without trouble. Twice. Ads Manager still wouldn’t save the feed.

Then we served exactly the same content gzip-compressed, as .jsonl.gz, and Ads Manager accepted it on the first try.

Nothing on screen pointed at compression. The fetch worked, the content was valid, and the save failed anyway. If you’re building this file yourself and Ads Manager keeps refusing a feed that looks right, compress it before you debug anything else.

The 9 required fields in a ChatGPT Ads product feed

OpenAI requires nine fields on every product:

  • item_id
  • title
  • description
  • url
  • brand
  • seller_name
  • image_url
  • availability
  • price

The optional fields are where ChatGPT gets enough to match a product to an actual question: sale_price, gtin, mpn, condition, product_category, color, size, material, gender, age_group, extra images, star rating, review count and Q&A. Fill the ones you have real data for and leave the rest out.

Identifiers deserve a separate word. Use the GTIN the manufacturer or GS1 assigned. If a product has no GTIN on record, leave the field empty. A made-up code belongs to someone else’s product, or to nothing, and either way it’s a policy problem. For the field-by-field reasoning, ChatGPT Product Feed Requirements goes deeper.

is_ads_eligible: the silent false

If one setting is going to sink a campaign without anyone noticing, it’s this one.

Besides the nine required fields, OpenAI uses a per-product field called is_ads_eligible to decide whether a product may appear in sponsored placements. It defaults to false. So a feed that leaves the field out doesn’t get rejected. It gets accepted, looks connected, shows no errors, and every product in it is ineligible for ads.

A ChatGPT Ads feed can be connected, error-free and complete, and still have zero products allowed to run. The default is false, and nothing on screen tells you.

Once you know, the fix is easy. Write is_ads_eligible on every row, explicitly: true for products you want in ads, false for the ones you don’t. Low-margin items, low stock, anything you’d rather not promote. You want those to be off because you chose it, not because of a default you never saw.

Don’t let a review queue empty your catalog

This one is easy to walk into if you clean up products before they go into the feed. Say your export only includes products that have been through your optimization or review process, and most of the catalog is still waiting. The ads catalog ends up nearly empty, and you’re running ChatGPT Ads on a sliver of what you sell.

We’d put every live product in the ads feed. Products you’ve already improved go in with the better title and description, and the rest go in with their current Merchant Center data, unchanged. As you work through the queue, products improve in place. Nobody waits for the last one.

ChatGPT Ads feed vs ChatGPT Shopping feed

These are two different feeds, and they’re easy to mix up.

ChatGPT Ads feedChatGPT Shopping feed
PurposeSponsored placements, run from Ads ManagerOrganic product discovery in ChatGPT
Paid?Yes, you run and fund the campaignNo, OpenAI says organic results are not ads
Ads controlis_ads_eligible per productNot used

If you’re after the organic side, start with ChatGPT Shopping Visibility. For why feed quality decides whether ads run at all, read ChatGPT Product Feed Ads: What Decides If You Show Up. OpenAI’s own field reference is in its product feed spec.

ChatGPT Ads ecommerce setup checklist

Before you connect a feed:

  1. Use a hosted URL, not a manual upload, so products don’t expire after 14 days.
  2. Serve .jsonl.gz. Not XML, and not uncompressed JSONL.
  3. Put all nine required fields on every row, in OpenAI’s names rather than Google’s.
  4. Write price as amount plus currency ("79.99 USD") and map availability to OpenAI’s allowed values.
  5. Write is_ads_eligible explicitly on every row instead of trusting the default.
  6. Include the whole live catalog, not only the products you’ve finished reviewing.
  7. Leave out products with no usable price instead of sending them broken.
  8. Keep price and stock in the file in step with your store. That’s the reason to use a URL in the first place.

Then in Ads Manager, open Feeds → Connect a feed by URL, paste the address and save.

Conclusion

ChatGPT Ads gives ecommerce brands a second feed-driven ad channel next to Google Shopping, and most of what you know about feeds still holds. The specifics are where people get stuck: no XML, a compressed JSONL file, OpenAI’s field names, and a default that quietly turns every product off.

The checklist above is enough to build the file yourself. If you’d rather skip that, UCP Radar now builds it from the Merchant Center feed you’ve already connected. Each feed gets one hosted chatgpt-ads.jsonl.gz URL that you paste into Ads Manager once. Products you’ve approved carry their optimized titles and descriptions, the rest carry their Merchant Center values, and is_ads_eligible is on every row. A per-product switch keeps anything you don’t want advertised out of ads, and it stays off after the next re-sync. You still run the campaign in Ads Manager. We just keep the file right.

Frequently Asked Questions

Not directly. OpenAI does not accept XML in any delivery method, so pasting your Merchant Center feed URL into ChatGPT Ads Manager gets rejected. You need a separate file built from the same catalog, in OpenAI's format and field names, such as item_id instead of id and image_url instead of image_link.

In our test on a live merchant feed on 5 October 2026, a gzip-compressed JSONL file (.jsonl.gz) was accepted on the first try. The same content served as plain .jsonl was fetched successfully twice and still would not save, and a Google Merchant Center XML feed was rejected.

It is OpenAI's per-product field that decides whether a product may appear in sponsored placements. It defaults to false, so a feed that leaves it out can connect without errors and still have no products eligible for ads. Write it explicitly on every row.

Items added through a manual CSV or TXT upload expire after 14 days. That works for a quick test, but a standing campaign needs a hosted URL or an SFTP connection so the catalog stays live without re-uploading.

No. The ChatGPT Ads feed powers paid, sponsored placements that you run from Ads Manager and uses the is_ads_eligible field. ChatGPT Shopping is the organic product discovery side, and OpenAI states those organic results are not ads.

Ready to optimize your product feeds?

Get AI-powered feed optimization, UCP readiness scoring, and automated Google Merchant Center management — free for 7 days.

Start Free Trial