The OpenAI product feed: the fields ChatGPT reads
A field-by-field guide to OpenAI's product feed specification for ChatGPT: what's required, how it maps from a Google or Meta feed, and the rules that trip people up.
AI Shopping Feeds Updated
Comparison details were checked against their public websites on 28 October 2026. Products change, so check their current pages before deciding. Corrections: support@aishoppingfeeds.com .
If you’ve been approved for OpenAI’s product feed programme, or are getting ready to apply, the next question is what the file needs to contain. This is a field-by-field walk through OpenAI’s product specification, as published when we checked on 28 October 2026, with notes on how each field maps from a Google Shopping or Meta catalogue feed.
For the bigger picture, including Shopify’s route into ChatGPT and the search crawler, start with how to get your products into ChatGPT Shopping.
The file
From OpenAI’s specification and onboarding guide:
- Format: examples are JSONL, one product per line. CSV and TSV are also accepted.
- Encoding: UTF-8, with absolute URLs, preferably HTTPS. Product and image URLs must be publicly reachable.
- Delivery: approved merchants upload over SFTP. OpenAI recommends a full catalogue snapshot at least once a day.
- Empty means empty. Leave a field out, or send
null, rather than writing placeholders liken/aorunknown, except whereunknownis a listed value. - Identifiers as text. Keep IDs and GTINs as strings so leading zeros survive.
The nine required fields
| OpenAI field | Google / Meta equivalent | Notes |
|---|---|---|
item_id | id | Stable and unique per item or variant. Never reuse for a different product. |
title | title | Include the variant where relevant. Aim for 150 characters at most. |
description | description | Factual plain text, 5,000 characters at most. |
url | link | The product page, with the variant selected where possible. |
brand | brand | As shown on the product page. No placeholders. |
seller_name | none | The name of the seller supplying the offer. Required on every row. |
image_url | image_link | The main image for this variant, as a direct link. |
availability | availability | in_stock, out_of_stock, pre_order, backorder or unknown. Note the underscores. |
price | price | 79.99 USD format: a decimal point, no thousands separators, upper-case currency code. |
Availability is strict. A missing or unrecognised value rejects the row. Google’s in stock with a space isn’t the same as in_stock.
Variants
Variants are where most feeds need work. OpenAI uses three fields together:
group_id, the parent listing ID shared by all variants, equivalent toitem_group_id. It must differ fromitem_id.listing_has_variations, set totrueon every variant row.variant_dict, an object mapping option names to values, such as{"colour": "Ocean Blue", "size": "750ml"}.
variant_dict is only used when the other two are set correctly. Use the same option names across a group, and make sure each combination is unique. OpenAI’s best practices add that title, URL, image, availability and price should be specific to each variant where they differ.
Identifiers
gtin: exactly 8, 12, 13 or 14 digits with a valid check digit. No spaces or dashes. Leave it out if the product doesn’t have one.mpn: keep its punctuation and capitals, and send it withbrand. OpenAI says not to invent one to fill a missing GTIN.offer_id: optional, for telling apart offers that share a URL. Never put the price in it.
Product details
All optional, but each one answers questions shoppers ask:
condition:new,refurbishedorused. OpenAI notes that a missing value may be treated as new, so always set used and refurbished items.product_category: a path from broad to specific, separated by>.color,size,material: free text, consistent withvariant_dict.gender(male,female,unisex) andage_group(newborn,infant,toddler,kids,adult).dimensionsandweight: the product’s own measurements, not the package’s, with units.additional_image_urls: an array in JSONL, comma-separated in CSV.
Price, sales and stock
sale_pricemust be above zero, belowpriceand in the same currency. If it isn’t, it’s ignored andpriceis used.- No scheduled sales. Unlike Google’s
sale_price_effective_date, the OpenAI specification doesn’t schedule sale dates. Update prices when the sale starts and ends. - Stock is availability only. There’s no quantity field, and
pre_orderandbackorderdon’t schedule a change. Update the row when the status changes.
Shipping, returns and reviews
shipping_price: the charge, in the same currency asprice. Leaving it out means unknown, not free.accepts_returnsandreturn_deadline_in_days: whether returns are accepted and for how long. A return policy URL alone doesn’t set them.review_countandstar_rating: product reviews only, not store reviews, describing the same set of reviews. Leave both out if there are none.
Eligibility flags
| Flag | Default | What it does |
|---|---|---|
is_eligible_search | On | Lets the product appear in ChatGPT. Turning it off also turns off checkout. |
is_eligible_checkout | Off | Needs search on, checkout enabled for your integration, and the seller’s privacy policy and terms URLs. |
is_ads_eligible | Off | Separate from search. Needs an ads integration. |
OpenAI is clear that eligibility doesn’t guarantee a product will be shown.
Countries
One detail matters for anyone selling outside the US. The specification’s geo fields, target_countries and store_country, need setup with OpenAI, and the standard upload targets the US. If you sell in the UK or elsewhere, ask about country targeting during onboarding rather than assuming your feed covers every market.
A checklist before your first upload
- Every row has the nine required fields
-
availabilityuses OpenAI’s values with underscores -
seller_nameset on every row - Variants have
group_id,listing_has_variationsandvariant_dict - GTINs valid, or left out
- No placeholder text in empty fields
- Sale prices below regular prices, same currency
- Daily full snapshot scheduled
- Country targeting confirmed with OpenAI
The data work behind most of these, such as clear titles, factual descriptions and complete attributes, is what AI Product Optimisation does across a catalogue, and the feed audit catches missing and invalid values before you export.
Frequently asked questions
Which fields are required in the OpenAI product feed?
Nine: item_id, title, description, url, brand, seller_name, image_url, availability and price. Rows with a missing or unrecognised availability value are rejected.
Can I reuse my Google Shopping feed for ChatGPT?
Most of the data, yes, but not the file as it is. Field names differ (id becomes item_id, link becomes url, image_link becomes image_url), seller_name is new, availability uses underscores, and some Google features such as scheduled sale dates have no equivalent.
Does the OpenAI feed support sale prices?
Yes, through sale_price, which must be above zero, below price and in the same currency. The specification doesn't schedule sales, so you update the price when the sale starts and ends.