OpenAI (ChatGPT) product feed for Shopify: what goes in it and how to build it with Feedyio
When someone asks ChatGPT for a product recommendation, it can answer with specific products, prices and links. If your Shopify products are not in the data ChatGPT works with, they cannot come up in those answers, however good your store is. OpenAI gets that data from merchants as a structured product file. The format is close to a Google Shopping feed, but there are enough differences (eligibility flags, seller fields, market rules, length limits) that exporting a Shopify CSV and hoping for the best does not work. This guide covers what the OpenAI feed contains, what the eligibility fields mean, how to build the file from Shopify with Feedyio, and the mistakes that get rows rejected.
One thing up front so there is no confusion later: Feedyio generates the CSV and hosts it at your feed URL. It does not upload or submit the file to OpenAI. Getting the file to OpenAI is a step you do on OpenAI's side, and we cover what their documentation currently says about it below.
How products get into ChatGPT
According to OpenAI's commerce documentation, onboarding product feeds into ChatGPT is currently available to approved partners, and merchants apply through the form linked from OpenAI's Get Started guide. Once approved, there are two ways to send product data: file upload and an API. The file route is the one that fits a Shopify store with a feed tool, and OpenAI generally recommends providing the whole feed once a day as a file.
OpenAI's file upload guide currently describes pushing files to OpenAI via SFTP, keeping a stable file name and overwriting it with the latest snapshot, at least daily. Delivery details can change and can depend on what OpenAI agrees with you during onboarding, so follow their current instructions for submitting the file. Feedyio's job is to keep a correct, current file waiting at a fixed URL.
What the OpenAI feed contains
OpenAI accepts two file profiles. Feedyio builds the Google-compatible one: a comma separated CSV with a header row, lowercase column names, and Google Shopping style field names without the g: prefix. If you have run a Google Merchant Center feed, most columns will look familiar. OpenAI's spec says to use this profile once OpenAI confirms it for your registered feed, and it requires a nonempty id, title, description, link, image_link, availability, price and brand on every row.
Here is what the "OpenAI (ChatGPT)" template in Feedyio puts in each row and where the value comes from:
| Column | Filled from |
|---|---|
id | Variant id by default (you can switch to SKU or a custom pattern) |
title | Product title by default |
description | Product description as plain text, cut to 4,900 characters |
link | Product URL on your chosen domain |
image_link, additional_image_link | Main image plus up to 10 additional images |
price, sale_price | Price with currency code, for example 79.99 EUR; sale_price only when the compare-at price is higher |
brand | Product vendor |
gtin, mpn | Variant barcode and variant SKU |
availability | in_stock or out_of_stock |
condition, identifier_exists | new; identifier_exists is no only when the variant has neither barcode nor SKU |
product_type, google_product_category | Shopify product type; category from your category mapping, or the Shopify product category when no mapping applies |
item_group_id | Groups variants of one product |
seller_name | Your store name |
target_countries | The feed's target country code (by default your store's country) |
On top of that you can add optional fields in Additional fields for feed: color, size, gender, age_group, material, pattern, availability_date, seller_privacy_policy and seller_tos. For fashion in particular, sending color and size makes variant groups far more useful.
The eligibility fields explained
The template comes with three eligibility fields already added. They are ordinary fields, so you can change the default value or set it per product with conditions.
- Eligible for ChatGPT search (
is_eligible_search), defaulttrue. Marks the product as one you want shown in ChatGPT search results. OpenAI notes that eligibility does not guarantee display. - Eligible for ChatGPT checkout (
is_eligible_checkout), defaultfalse. Opts a product into buying inside ChatGPT. OpenAI only honours this when search eligibility is also true and checkout has been enabled for your integration, which is a separate arrangement with OpenAI. Leave it off until that is in place. - Eligible for ChatGPT ads (
is_ads_eligible), defaulttrue. Marks products for OpenAI's ads processing. OpenAI treats it as independent of search eligibility.
A practical caveat from OpenAI's current spec: for feeds in the Google-compatible profile, accepted products have search enabled and checkout disabled, and uploaded eligibility columns do not change that. Ads eligibility on that path comes from the feed settings registered with OpenAI, and OpenAI uses your registered seller name rather than the seller_name column. So treat these columns as a clear statement of intent in the file, and ask OpenAI during onboarding how your registered feed reads them. If you need a product kept out of ChatGPT entirely, the reliable way is to leave it out of the file with a filter (see the mistakes section).
If you do get checkout enabled, OpenAI lists seller_privacy_policy and seller_tos as conditionally required for checkout. Add both as Custom values in Additional fields, pointing at your public policy pages.
Building the feed in Feedyio, step by step
- Create the feed. Click Create feed on the home page or under Feeds, search for "OpenAI (ChatGPT)" and click Select. The feed is saved immediately with the channel defaults, so the file and its URL exist from this moment.
- Check General settings. Set the Domain url your product links should use (you can pick one of your Shopify Markets domains), then the price source, country and currency, and the Language of titles and descriptions. One feed carries one price list and one language. If you sell in several markets, duplicate the feed and change the market and language.
- Review the eligibility fields. In the feed settings, the three eligibility fields have their own sections with their defaults. Change a default, or add a case so that, for example, products from one collection get a different value. Add
color,sizeand the other optional fields in Additional fields for feed if you want them. - Sort out categories. Without any setup the feed sends each product's Shopify product category as
google_product_category. If your Shopify categories are missing or too generic, create a shared mapping under Category mappings (by Shopify categories, product types, collections or rules) and attach it in Category settings with Use categories from category mapping. Mapping is manual or rule based; Feedyio does not guess categories for you. Also keep your Shopify product types meaningful: OpenAI's spec says a nonemptyproduct_typetakes precedence overgoogle_product_category. - Exclude what should not be listed. Under Exclude Products and Exclude by filter, remove gift cards, products without images, or anything you do not want in ChatGPT.
- Save and check the feed URL. Every save rebuilds the file. Use Preview feed to inspect a few products, Open link to download the full CSV, and the Analytics tab to see listed, unlisted and warning items. Copy the URL with Copy Public link.
- Deliver the file to OpenAI. Follow OpenAI's current instructions for submitting the file. Feedyio keeps the file at the same URL and rebuilds it after every product sync.
On sync timing: paid plans can run the product sync hourly, and the Free plan syncs daily or weekly. OpenAI recommends refreshing the file at least daily, and an hourly rebuild on the Feedyio side helps only as much as your delivery to OpenAI keeps up with it.
Common mistakes
GTINs that are not GTINs
Feedyio sends the variant Barcode as gtin. OpenAI expects exactly 8, 12, 13 or 14 digits with a valid check digit, leading zeros preserved, and no spaces or dashes. Stores that use the barcode field for internal warehouse codes end up with invalid GTINs on every row. Fix the barcodes in Shopify, or hide the gtin column if you have no real ones. Note that identifier_exists is set to no only when a variant has neither barcode nor SKU, and the SKU goes out as mpn. Our GTIN and identifier_exists guide covers the logic in more detail.
Availability that lags behind the store
A variant is out_of_stock when its stock is zero or less and Shopify is set to stop selling. Variants with "Continue selling when out of stock" and variants that do not track inventory stay in_stock. Out-of-stock items are not excluded by default on this channel, which is usually what you want, as long as the file is fresh. The real problem is a stale file: if stock moves fast and the file reaches OpenAI once a day, ChatGPT will show yesterday's availability. More on this in keeping price and stock accurate with hourly sync.
Images that cannot be fetched
Image URLs must be public, and OpenAI rejects rows where a URL carries a username or password. Shopify CDN images are fine. The usual problems are products with no image at all and placeholder images. Add an Exclude by filter condition on product images or variant image set to "is empty" to leave imageless products out, and if your originals are huge, the Image optimizer can resize them through Shopify's image CDN without touching your originals.
Descriptions that are empty or full of markup
OpenAI wants plain text, up to 5,000 characters. Feedyio sends the plain text description, turns line breaks into spaces, replaces double quotes with single quotes and cuts the text at 4,900 characters. Keep the description source on Product description; switching to the HTML variant puts markup into a field that should not have it. Empty descriptions are a bigger risk, because description is required on every row. Leave them out with an Exclude by filter condition on the product description set to "is empty", or better, write them. Titles have their own limit of 150 characters in OpenAI's spec, and Feedyio does not shorten titles, so check long ones in Shopify.
Sale prices that do not add up
sale_price must be strictly lower than price and in the same currency, otherwise OpenAI rejects the row. Feedyio fills it only when the compare-at price is higher than the price, and in that case sends the compare-at price as price. If your compare-at prices are stale or lower than the current price, clean them up in Shopify.
Frequently asked questions
Does Feedyio send my feed to OpenAI?
No. Feedyio generates the CSV and hosts it at your feed URL. You deliver the file to OpenAI following their current instructions.
Can I use the feed for countries outside the US?
The template offers the same global list of 87 countries as Google Merchant Center, and fills target_countries with the feed's target country code, which is your store's country by default (it is not taken from the feed's price list or market). OpenAI's spec currently says standard uploads target the US, and that additional markets apply only after OpenAI confirms them for your integration, including the allowed countries and currencies. Check with OpenAI before you build feeds for other markets.
I already have a Google Merchant Center feed. Can I reuse it?
The field names are largely the same, but create a separate "OpenAI (ChatGPT)" feed in Feedyio. It adds the OpenAI columns, uses CSV, and applies the description cleanup. A shared category mapping can be attached to both feeds, so you set categories once. See Google product category vs. product type for how the two category fields interact.
Will turning on "Eligible for ChatGPT checkout" let customers buy in ChatGPT?
Not by itself. Checkout is a separate integration that OpenAI enables. The field only marks products for it once that is in place.
How often is the file updated?
Feedyio rebuilds every feed after each product sync: hourly on paid plans, daily or weekly on Free. OpenAI recommends sending a fresh file at least daily.
Channel details, field list and setup notes are on the OpenAI (ChatGPT) feed page.
Want a ChatGPT-ready product file built from your Shopify catalog? Try Feedyio free on the Shopify App Store.
