ChatGPT product feed: nine required fields, and the optional ones that decide what gets surfaced

- Published
- September 18, 2026
A ChatGPT product feed needs nine required fields. Optional attributes give OpenAI the data to filter, compare and surface the right products.
Uploading the file is the short part. Fixing the catalog underneath it is the work.
What OpenAI shipped
Retail advertisers can now upload a catalog into OpenAI Ads Manager and build product-feed campaigns from it.
One limit matters before anything else: during the current beta, products from an ads feed can appear in ads only. OpenAI says they do not appear in organic ChatGPT conversations today.
The feed still matters beyond the campaign. OpenAI uses the same product schema for search eligibility, checkout eligibility and ads eligibility. The flags change. The product data does not.
That makes this an agentic commerce readiness problem before it becomes a media-buying problem.
The timeline matters because the product schema predates the current ads use case. That is why it still carries separate controls for search, checkout and ads.

The nine required fields in the OpenAI product feed spec
The OpenAI product feed spec requires these nine fields on every row.
| Field | Type | The rule that matters |
|---|---|---|
| item_id | String | Stable and unique per item or variant. Never reuse it for another product. |
| title | String | Include the selected variant when relevant. |
| description | String | Factual, plain-text product description. |
| url | URL | Public product page, with the variant selected when possible. |
| brand | String | The brand shown on the product page. |
| seller_name | String | The seller supplying the offer. |
| image_url | URL | A direct image URL showing the selected variant. |
| availability | String | in_stock, out_of_stock, pre_order, backorder or unknown. Empty and unrecognized values reject the row. |
| price | Money | Amount plus currency code, for example 79.99 USD. |
Nine sounds manageable until variants enter the picture.
Each variant needs its own item_id, price, availability, URL and images. A proper variant group also needs group_id, listing_has_variations and variant_dict. If color and size live only in the front end, the exported rows lose the relationship the shopper sees on the page.
Uploaded items also expire after two weeks. OpenAI recommends a hosted URL or automated SFTP for catalogs that change often. A manual upload is a test, not an operating model.
Reuse the Google Shopping feed, then inspect what it drops
OpenAI accepts a Google-compatible product feed after it confirms that format for the registered feed.
Use it. It is the fastest way to get live.
Then inspect the gaps. Product feed management is the work of adapting one catalog to each channel's schema, and the compatibility path has its own rules:
- availability uses preorder, not pre_order, and does not accept unknown.
- availability_date becomes required for preorder and backorder.
- seller_name comes from the registered merchant name, not the uploaded row.
- accepted products have search enabled and checkout disabled. An uploaded is_eligible_search=false does not opt a product out.
- structured title and description alternatives are not mapped.
The Google feed is a useful starting point. It was built for a results grid, where the image and title do most of the work. A model filters before it explains. That puts more weight on attributes the Google feed may never have needed.
Field by field: OpenAI vs Google Merchant
The names look similar. The requirements are not.
Google Merchant has a core set required for every product, then conditional requirements based on category, identifier, market and destination. OpenAI requires the same nine base fields on every row. Its Google-compatible path accepts only a defined subset of the full Merchant Center schema.
| Product data | OpenAI product feed | Google Merchant | What changes |
|---|---|---|---|
| Identifier | item_id, required | id, required | Direct mapping. Keep it stable and unique per SKU or variant. |
| Title | title, required | title or structured_title, required | OpenAI's Google-compatible path maps the plain title only. |
| Description | description, required | description or structured_description, required | OpenAI's compatibility path maps the plain description only. |
| Product page | url, required | link, required | Same destination, different column name. |
| Main image | image_url, required | image_link, required | Direct mapping. Both expect the image for the submitted variant. |
| Availability | availability, required. Uses pre_order and allows unknown | availability, required. Uses preorder and does not accept unknown | The column maps, but the accepted values do not. |
| Price | price, required | price, required | Direct mapping. Keep amount, currency and landing page consistent. |
| Brand | brand, required on every row | brand, required when the product has a clearly associated brand or manufacturer | A Google row that is valid without brand may fail the OpenAI profile. |
| Seller | seller_name, required | Merchant identity sits at account level | On the Google-compatible path, OpenAI uses the registered merchant name and ignores an uploaded seller_name. |
| GTIN | gtin, optional | gtin, required when the manufacturer assigned one | Google is stricter. A valid Google feed may already carry the identifier OpenAI can use. |
| MPN | mpn, optional | mpn, required for products without a GTIN when applicable | Google uses it as a fallback identifier. OpenAI accepts it as additional product identity. |
| Condition | condition, optional. New may be assumed when empty | condition, required for used or refurbished products | Same values, different requirement. |
| Variants | group_id, listing_has_variations and variant_dict | item_group_id plus separate color, size, pattern and other variant fields | The parent ID maps conceptually, but the OpenAI variant structure is not a column-for-column copy. |
| Apparel attributes | color, size, gender and age_group are optional | Required for applicable Apparel & Accessories products | A complete Google apparel feed is usually richer than OpenAI's minimum nine. |
| Material | material, optional | material, recommended for Apparel & Accessories | Useful on both. OpenAI can use it as structured product information. |
| Additional images | additional_image_urls | additional_image_link | Same job, different name and serialization. |
| Eligibility controls | is_eligible_search, is_eligible_checkout, is_ads_eligible | Merchant Center destinations and excluded_destination | No direct field mapping. On OpenAI's Google-compatible path, search is enabled and checkout is disabled. |
The useful shortcut is the shared core: id, title, description, link, image, availability, price and brand.
The dangerous assumption is that every other Google Merchant attribute comes across with it. It does not. OpenAI documents a compatibility profile, not a full import of the Google Merchant product data specification.
The optional fields carry the comparison
The required fields tell OpenAI that a row is valid. Optional fields describe enough of the product to answer a specific request.
Take a simple query: waterproof trail shoe, black, size 10, under 100 euro.
The feed needs color, size, material, price and availability to answer it cleanly. The spec also supports gtin, mpn, condition, product_category, gender, age_group, dimensions, weight, sale_price, shipping_price, returns, review_count, star_rating and additional images.
OpenAI is careful here: eligibility does not guarantee display. Still, a missing attribute gives the system no structured value to filter on.
This is a catalog foundation problem. The same constraint showed up when we read the Claude Commerce Agents code: filters read fields first. Text ranks what survives.

Ads and organic discovery are separate today
The schema includes three controls:
- is_eligible_search controls search eligibility.
- is_eligible_checkout controls direct purchase and depends on search eligibility plus an enabled integration.
- is_ads_eligible controls ads processing.
But an ads feed does not create an organic ChatGPT presence during the beta. OpenAI says those products are eligible for ads only.
So the immediate use case is clear: upload a compliant feed, mark the products eligible for ads, keep price and availability current, then select products in Ads Manager.
The longer-term value is the catalog work behind it. The same complete product record can be mapped to another marketplace, on-site search, a PDP or a future AI shopping surface without rebuilding the knowledge each time.
What this asks of your catalog
Most teams will not struggle with the CSV.
They will struggle with the rows.
A title has to name the variant without turning into a keyword dump. Availability has to match the enum and be current. GTINs need their leading zeros. Dimensions need units. Material, color and size have to exist as fields rather than clues buried in prose.
CommerceClarity agents generate and validate those attributes against the retailer's rules. Governance keeps uncertain values in review before they reach a channel.
The feed is the output. The catalog process decides whether it works.
Book a demo and we will audit a sample of your catalog against the OpenAI product feed spec, field by field.
Questions people ask
- What is a product feed, and do I need one for ChatGPT?
- A product feed is a structured file with one row per SKU or variant. It carries the fields a platform uses to show, filter and price the product. You need one to run product-feed campaigns in ChatGPT Ads Manager.
- What are the nine required fields for a ChatGPT product feed?
- item_id, title, description, url, brand, seller_name, image_url, availability and price. Variants add conditional fields such as group_id, listing_has_variations and variant_dict.
- Can I reuse my Google Shopping feed?
- Yes, after OpenAI confirms the Google-compatible format for your registered feed. Check the different availability values, seller identity, eligibility controls and unsupported structured title and description fields before treating it as finished.
- What do I lose by reusing the Google feed?
- You lose per-item search controls on that compatibility path, checkout stays disabled, and only the supported profile reaches OpenAI. The larger risk is catalog depth: a feed designed for a visual shopping grid may be thin in the optional attributes a model needs to filter products.
- Will the feed make my products appear in normal ChatGPT answers?
- No, not during the current ads beta. OpenAI says products from an ads feed are eligible for ads only and do not appear in organic ChatGPT conversations.
- How do I run ads on ChatGPT from a product feed?
- Create a feed in Ads Manager, import it by file, hosted URL or SFTP, fix validation errors, select the feed in a product-feed campaign, filter the eligible products and launch the campaign. Keep the feed fresh because uploaded items expire after two weeks.