← Back to blog
11 min readBy Feedyio

ChatGPT Ads and your product feed: OpenAI has its own CSV structure

For most of 2025 and 2026, "AI shopping" was something you read about rather than something you could buy media on. That changed fast. ChatGPT Ads launched in the US in February 2026, added Canada, Australia and New Zealand in March, picked up product feed campaigns in June, and in late August rolled out across 31 European markets - the EEA plus Switzerland, with Poland, Czechia and the rest of the region included. Self-serve access through Ads Manager followed within a week, so European merchants no longer need an agency or an OpenAI sales contact to get started.

The important detail for e-commerce is what that inventory runs on: your product feed. And here is the part that catches most people out - OpenAI does not simply accept the feed you already produce for other channels. It publishes its own feed specification, with its own column names and a set of mandatory fields that exist nowhere else. Upload an untouched shopping export and it fails validation. This guide covers what the file actually has to contain, how products reach ChatGPT paid and organic, and how to generate the right file from a Shopify catalog with our OpenAI Ads feed template.

What ChatGPT Ads actually are, and who sees them

ChatGPT ads are sponsored results that appear below the assistant's answer, clearly labeled. They are not injected into the answer text. For a shopping-shaped question ("best waterproof hiking boots under 150 euro"), the surface behaves like a product unit: image, title, price and a link to the merchant's own site.

Two things about the audience are worth knowing before you model the opportunity:

  • Ads are shown only to users on the free and lower-priced consumer tiers. Paid Plus, Pro and business plans stay ad-free, as do accounts identified as belonging to under-18 users.
  • Targeting in the Ads Manager beta is deliberately thin: country-level targeting everywhere, with finer geographic targeting (state, DMA, ZIP) in the US. The matching work is done by the model reading the conversation, not by a keyword list you build.

That last point is the mental shift. Your feed is not filling an ad slot tied to a query, it is the raw material a model uses to decide whether your product is a sensible answer to something a shopper just described in a sentence. Vague, marketing-heavy product data does not just underperform here - it makes you invisible.

Where things stand in Europe right now

As of September 2026, the picture for a European merchant looks like this:

  • Ads are live across the EEA and Switzerland, including the CEE markets most of our customers sell into.
  • Ads Manager is self-serve in those markets, so you can create an account, upload a feed and set budgets yourself.
  • Product feed campaigns are the format built for retail: instead of writing creatives per product, you supply the catalog and the system generates ad units from it, taking the title, description and image straight out of your feed.
  • Bidding is CPM and CPC based, with an optimized-CPC variant. Early public guidance from beta advertisers pointed at a starting CPC ceiling in the low single-digit dollars and default CPMs well above search norms; treat any number you read as a moving target and check the current rates in the interface.

Catalog size is the eligibility rule people get wrong most often, because reporting during the beta cited different thresholds at different stages: a small sample of products for the initial eligibility check, and a much larger minimum (four figures) for a live feed campaign, with a ceiling in the millions. If your catalog is small, confirm the current minimum in Ads Manager before you plan a launch around it.

Why the feed became the whole game

It is worth understanding the last twelve months, because it explains why OpenAI now insists on structured data in its own format.

In late 2025 OpenAI launched Instant Checkout, built on the Agentic Commerce Protocol (ACP) co-developed with Stripe: buy inside the chat, never touch the merchant's site. It did not work. Adoption was low, very few merchants ever went live, shoppers were uncomfortable handing payment details to an agent, and - the part that matters here - OpenAI was largely scraping retail sites for product data, so prices and stock in the chat were frequently wrong. OpenAI retired Instant Checkout in March 2026, roughly six months after launch, and rebuilt shopping around discovery in the chat and checkout on the merchant's own site.

The failure mode was bad product data, and the fix was to stop guessing and start ingesting merchant-supplied feeds - which is exactly why the current spec is so demanding about seller identity, returns and delivery. The assistant recommends, the shopper clicks through, and you close the sale in your own checkout. What you owe the assistant is an accurate, complete catalog in the shape it asks for.

The gap here is real. Payment-industry surveys through 2026 kept reporting the same imbalance: almost every merchant now sees AI agent traffic hitting their site, while only a small minority publish a machine-readable catalog those agents can actually read. Being in that minority is currently cheap.

Two doors into ChatGPT: organic results and paid feed campaigns

Products reach a ChatGPT user two ways, with different requirements.

1. Organic shopping results

ChatGPT surfaces products in answers without anyone paying for placement, ranked on relevance and data quality. OpenAI publishes its product feed specification for merchants who supply catalog data directly, and platform integrations do the same job for those who do not want to build one: Shopify shipped Agentic Storefronts in March 2026, pushing eligible merchants' catalog data into ChatGPT through Shopify Catalog with no app to install. The control sits in the Shopify admin under the agentic sales channel, behind eligibility rules (store standards, completed policy pages, accepted supplemental terms, market availability).

2. Paid product feed campaigns

This is Ads Manager: you supply the catalog file, set budgets and bids, choose countries, and OpenAI builds the sponsored product units. This is the door that opened for European advertisers in August 2026, and the one that needs the file described below.

OpenAI's own CSV structure: what the file has to contain

This is the section worth reading twice, because it is where feed uploads fail.

OpenAI's product feed is a flat file, one row per product or variant, UTF-8, delivered compressed. CSV is the practical working format (TSV, JSON and XML are also accepted, with columnar Parquet preferred at very large catalog sizes). So far so familiar. The differences start at the header row.

The columns are named differently

OpenAI uses its own attribute names, so even the fields you already have need renaming before upload:

  • item_id for the product identifier
  • url for the product page link
  • image_url for the main image
  • group_id to tie variants of the same product together
  • price carrying the currency inside the value as an ISO 4217 code, for example 49.00 EUR, rather than price and currency in separate columns

That alone is why a copy-paste export is rejected: the data may be correct, but the header row is not the one the validator expects.

The mandatory fields nothing else asks for

The bigger issue is the attributes that have no counterpart in an ordinary shopping feed and are still required. Expect to supply at minimum:

  • Eligibility flags. Explicit booleans per item saying what the product may be used for - whether it can appear in ChatGPT's search results at all, whether it is purchasable, and whether it may be used in ads. Checkout eligibility only applies when search eligibility is true. Field naming shifted during the beta (the current spec uses is_eligible_ style names, older documentation used enable_), so match your file to the version of the spec in force when you build it.
  • Seller identity. seller_name and seller_url on every row - the assistant has to be able to say who is selling, not just what.
  • Returns. A return_policy URL, plus a return window in days, so ChatGPT can answer "is it easy to return?" without scraping your site.
  • Market scope. Where the item ships and which store or market it belongs to.
  • Policy URLs when checkout is enabled. Privacy policy and terms of service become required, over HTTPS, as soon as an item is marked purchasable.

Beyond the required set, the spec carries a few dozen optional attributes that materially improve how well you get matched: identifiers (GTIN, MPN, brand), logistics (weight, dimensions, shipping cost, delivery estimates), variant attributes (colour, size, gender, size system), review counts and ratings, compliance data such as age restrictions and warnings, and richer media including additional images, video and 3D models.

Delivery and freshness

You do not paste a public feed URL into a form. Files are pushed to an endpoint OpenAI provisions for you during onboarding, and items are treated as perishable - stop refreshing and they expire out of the index. An automated, scheduled upload is part of the setup, not an optimization, and the same applies to accuracy: price and availability in the file have to agree with your live product page, which is the exact problem that sank Instant Checkout.

The fields that decide whether you get matched

Assume the model reads your feed the way a careful shop assistant reads a catalog.

  • Title. Descriptive and specific, in the pattern shoppers use: brand, product, key attribute, variant. "Nordic Trail GTX waterproof hiking boot, men's, brown, size 43" beats "Nordic Trail GTX - Free shipping!".
  • Description. Factual and complete, no promo language. Materials, dimensions, compatibility, care, what is in the box. Exclamation marks carry no information a model can match against, and marketing copy in place of a description is a documented rejection reason.
  • Identifiers. GTIN or EAN, MPN and brand are the strongest identity signal you can send. If yours are patchy, our guide to GTIN and identifier_exists covers how to fill the gaps.
  • Price and availability. They must match the landing page at the moment a shopper or crawler arrives.
  • Shipping and returns. Cost, regions and delivery estimates. Assistants answer total-cost and delivery-time questions constantly; if your feed cannot, someone else's can.
  • Variants. A correct group_id with colour, size, gender and size system, so the assistant recommends the exact variant a shopper described.
  • Images. Clean primary image, additional angles where you have them.

Why feeds get rejected

  • Column names that are not OpenAI's, or a header row copied from another channel.
  • Missing required fields - most often the eligibility flags, seller fields or return policy.
  • Price without a currency code, or malformed data types and invalid URLs.
  • Non-unique item_id values.
  • Marketing language where a factual description belongs.
  • Price or availability that disagrees with the live product page.

A pre-launch checklist for a Shopify store

  1. Confirm eligibility in Ads Manager: catalog size, target countries and any category restrictions for what you sell.
  2. Build the file to OpenAI's spec, not to another channel's - correct column names, currency inside the price, one row per variant.
  3. Fill the mandatory OpenAI-only fields: eligibility flags, seller name and URL, return policy and window, market scope.
  4. Complete identifiers: GTIN or MPN plus brand wherever you can.
  5. Rewrite titles and descriptions as facts. Strip promo language, add attributes a person would say out loud.
  6. Check price and stock parity between feed and product page, and shorten the refresh interval so the gap cannot open.
  7. Automate delivery so items never expire out of the index.
  8. Decide your landing pages. Traffic lands on your site, so the product page has to close the sale on its own, in the right language and currency for that market. Selling cross-border? Our multi-currency feed guide covers the market-per-feed structure that keeps country, language and currency aligned.
  9. Instrument the traffic. Tag feed links with UTM parameters so ChatGPT-sourced sessions are separable in analytics from day one.

How Feedyio helps: a ready-made OpenAI Ads template

Feedyio is a Shopify app that builds and refreshes product feeds for the channels you sell on, and OpenAI Ads is one of them. You do not have to work out the spec, rename columns or hand-build a CSV: the OpenAI Ads template is pre-built in the app, in the exact structure OpenAI expects.

What that means in practice:

  • The feed is generated in Feedyio from your live Shopify data and output in OpenAI's CSV structure, with their column names rather than another channel's.
  • The mandatory OpenAI-specific fields are part of the template - eligibility flags, seller name and URL, return policy, market scope - so you fill them in once instead of discovering them through validation errors.
  • The feed regenerates on your schedule, down to hourly, so prices and stock stay in step with your store and items do not expire.
  • Everything else in your catalog keeps working: the same product data also drives your other channels, each in its own required format.

To be clear about scope: Feedyio generates and hosts the feed. It is not an ads platform and does not manage your ChatGPT campaigns, bids or budgets - you run those in OpenAI's Ads Manager. What it removes is the part that decides whether the campaigns can run at all: producing a valid, complete, current file in OpenAI's own structure.

Want a ChatGPT-ready feed without hand-building the CSV? Try Feedyio free on the Shopify App Store.

ChatGPT Ads and OpenAI's feed specification are changing quickly, including field names. The details above reflect early September 2026; verify the current spec, eligibility and pricing in OpenAI's own documentation before you commit budget.