OpenAI’s ChatGPT product feed needs nine fields on every row: item_id, title, description, url, brand, seller_name, image_url, availability and price. Everything else is optional, but the optional fields are where you answer what shoppers actually ask: the material, the size, the return window.

Below is every field in plain words, with an example and where a Shopify store usually keeps that fact. It follows OpenAI’s product feed reference, field names exactly as OpenAI writes them.

First: do you need to fill this in at all?

If you sell on Shopify or Etsy, no. OpenAI’s merchant page says your catalog “is already integrated, and no additional setup or application is required”. Shopify sends your products to ChatGPT through Shopify Catalog, and what you control is the product data in your Shopify admin. Our Shopify and ChatGPT guide covers that route.

This page is still useful on Shopify, because the feed fields are a clean list of the facts ChatGPT is built to receive. If a fact has a field here and your product page doesn’t state it, that’s a gap worth closing whichever way your data travels.

If you’re not on Shopify or Etsy, you apply to OpenAI and wait for approval. Our ChatGPT product feed guide walks through applying, delivery over SFTP and the schema traps to avoid.

The nine required fields

Every row needs all nine. A row is one thing a shopper can buy, so a T-shirt in three sizes is three rows.

Field What it means Good example Where it lives in Shopify
item_id A permanent ID for this exact item or variant. Never reuse it TRAIL-BLK-10 The variant SKU, or the variant ID
title The product name, plus the variant if it matters. Aim for 150 characters or fewer Trail running shoes, black, size 10 Product title plus the option values
description A factual, plain-text description. Aim for 5,000 characters or fewer Waterproof trail shoes with a rubber outsole and mesh lining. Product description, or the metafield you use for it
url The product page, with this variant selected if possible https://example.com/products/trail?variant=… The product URL
brand The brand shown on the product page. A real name, not a placeholder Northline Usually the Vendor field
seller_name Who’s selling this offer Northline Outdoor Your store name
image_url A direct link to the main image, showing this variant (JPEG or PNG) https://example.com/images/trail-black.jpg The variant image, or the first product image
availability Stock status: in_stock, out_of_stock, pre_order, backorder or unknown in_stock Inventory for the variant
price The regular price: amount, a space, the currency code 79.99 USD Price, or compare-at price when the item is on sale (see below)

Two of these trip people up.

availability can’t be blank. OpenAI says a missing or unrecognized value rejects the whole row. If you genuinely don’t know, write unknown.

price is the regular price, not the sale price. If an item is on sale, the regular price goes in price and the lower one goes in sale_price. In Shopify terms, that usually means your compare-at price goes in price and your current price goes in sale_price, but only if the compare-at price really was what you normally charge.

Variant fields: one product, several rows

These tie your rows back together so ChatGPT knows the black size 10 and the black size 11 are the same shoe.

Field What it means Good example Where it lives in Shopify
group_id One ID shared by every variant of the product. Must differ from each item_id TRAIL The product ID or handle
listing_has_variations true on every variant row true Set it whenever the product has options
variant_dict The options this row picks, as name and value pairs {"color":"Black","size":"10"} The variant’s option names and values
offer_id An optional ID for this seller’s offer. Never put the price in it northline-TRAIL-BLK-10 Usually not needed for a single-brand store

Keep option names the same across a group. If one row says color and another says Colour, ChatGPT gets two different options.

Identifiers: GTIN and MPN

Field What it means Good example Where it lives in Shopify
gtin The barcode number assigned to this exact item: 8, 12, 13 or 14 digits, with a valid check digit 09506000134352 The variant’s Barcode field
mpn The manufacturer’s part number, exactly as they write it. Send it with brand NL-TRAIL-10-BLK Often a metafield, if you keep one

OpenAI is firm on one point: don’t invent an MPN to make up for a missing GTIN. If you don’t have one, leave it out. Our GTIN, MPN and SKU guide explains which one you actually have.

The facts that answer shoppers’ questions

This group is all optional, and it’s where most buying questions live.

Field What it means Good example Where it lives in Shopify
condition new, refurbished or used. Always say used or refurbished new Usually new; say so for anything else
product_category Your category path, broad to specific, separated by > Apparel & Accessories > Shoes Product category or Type
material The main materials Leather and rubber Product description, an option, or a metafield
color The selected color, matching the image Black The color option
size The selected size label 10 The size option
gender male, female or unisex unisex Usually a metafield or tag
age_group newborn, infant, toddler, kids or adult adult Usually a metafield or tag
dimensions The product’s own size (not the box), at least two of length, width and height, plus a unit {"length":"30","width":"20","height":"12","unit":"cm"} Product description or a metafield
weight and item_weight_unit Net weight without packaging, and its unit (g, kg, oz or lb) 0.75 and kg Product description or a metafield

Notice what isn’t on the list. There’s no field for noise level, room coverage, runtime, warmth rating or battery life. For products people buy on a number like that, the number has to go in the title or the first lines of the description, with its unit.

It’s easy to miss. In our saved Shopify Catalog results for “humidifier for dry winter air large room quiet top fill”, a decibel figure appeared in the description of just 4 of the 10 listings, and in none of the titles.

Images, price and stock extras

Field What it means Good example
additional_image_urls More photos of this item, as a list ["https://example.com/images/trail-side.jpg"]
sale_price The current sale price: above zero, below price, same currency 59.99 USD
seller_url Your storefront page https://example.com

If sale_price is equal to or higher than price, or in a different currency, OpenAI simply ignores it.

Shipping, returns and reviews

Field What it means Good example Where it lives in Shopify
shipping_price What shipping costs. 0.00 USD means free; leaving it out means unknown 5.00 USD Your shipping settings
accepts_returns true or false. A policy link alone doesn’t set it true Your refund policy
return_deadline_in_days How many days a buyer has to return it. Only send with accepts_returns=true 30 Your refund policy
return_policy A link to the return policy for this item https://example.com/policies/refund-policy Settings > Policies
review_count How many product reviews. 0 means none; blank means unknown 254 Your reviews app
star_rating The average rating out of 5, to two decimals. Leave it out if there are no reviews 4.50 Your reviews app

The theme here: blank means unknown, not zero. OpenAI says so directly. Don’t fill gaps with n/a, null or 0. A free-shipping item and an item with unknown shipping are different things, and so are a product with no reviews and a product whose reviews you didn’t send. For a final-sale item, send accepts_returns=false and leave the window out.

For review fields, count only product reviews. Store reviews have their own fields, and those need extra setup.

The switches: search, checkout and ads

These don’t describe the product. They say where it can appear.

Field What it does Default if you leave it out
is_eligible_search false takes the item out of search (and checkout) On
is_eligible_checkout Opts the item into in-ChatGPT checkout, if checkout is enabled for your integration Off
seller_privacy_policy, seller_tos Links to your privacy policy and terms, needed for checkout None
is_ads_eligible, ads_metadata Opt-in and labels for ChatGPT ads, set up separately Off

OpenAI says search eligibility “does not guarantee display”. And checkout is a smaller deal than it sounds: OpenAI’s merchant page says it’s moving away from a standalone Instant Checkout in ChatGPT, toward checkout on your own site or app.

The rest of the reference covers fields that only work once OpenAI has set them up for your feed: size_system, store_review_count, store_star_rating, accepts_exchanges, is_digital, marketplace_seller, target_countries and store_country. Adding those columns on your own does nothing. Standard uploads target US shoppers, whatever currency you use.

The five fields to get perfect first

OpenAI doesn’t publish how much any field counts. But its Help Center says ChatGPT may weigh the options available, price, reviews and ease of use against what the shopper asked. Shopify’s list of what AI platforms consider leads with title and description. Put those together, and here’s where we’d start:

  1. description. It’s the only place for the facts that have no field of their own. Put the one or two numbers customers ask about in the first sentence, with units.
  2. title. Name the product type plainly, plus the variant. “Cloud 2.0, Midnight” tells a shopper nothing; “Weighted blanket, 15 lb, queen, navy” does.
  3. price and sale_price. Regular price in one, sale price in the other. Get these backwards and your sale looks like a price hike.
  4. availability. An item that’s out of stock but listed as in stock is the fastest way to lose a shopper’s trust.
  5. review_count and star_rating. Product reviews only, both from the same set of reviews, and nothing at all if there are none.

If you have a real GTIN, send it too. It’s the cleanest way to tell an assistant exactly which item you mean.

One warning about OpenAI’s other pages

OpenAI’s best-practices page uses names from a different format, like seller.name, variant_options and description.html. Those match the Draft schema that sits behind a toggle on the reference page, which OpenAI says is “published for planning and feedback only” and “not supported for production integrations yet”. They aren’t fields in the default (Stable) file-upload reference.

That matters because OpenAI’s own list of the most common upload failures includes “outdated or non-spec field names”. Build from the default view of the products reference, and treat the best-practices page as advice on content, not field names.

Your next step

Take your best-selling product and fill in this page’s tables for it by hand, one row per variant. Every cell you can’t fill is a fact your product page probably doesn’t state either. Pick the one a customer asks about most, and add it to the first line of the description this week.