Shopify
Shopify product feed for ChatGPT: what you get and what is missing
What a Shopify store gives you for OpenAI's product feed spec, which fields it leaves blank, and how to fill the gaps with SKUHelm.
Checked against the sources on 7 October 2026
Shopify is the easiest platform to turn into a feed, because every published product is already available as structured data. The catch is that Shopify describes products for a storefront, and OpenAI's feed spec asks for a few things a storefront never needs to say. This page covers what you get, what is missing and how to close the gap.
What Shopify gives you
Public Shopify stores serve their live catalogue at yourshop.com/products.json, up to 250 products per page, with no login. SKUHelm pages through that file. It also reads /meta.json for your shop name, currency and country, and checks whether your privacy, terms and refund policy pages exist under /policies/.
Each Shopify variant becomes its own feed row. That is what the spec wants: one row per sellable item, each with its own item_id, price and availability. Here is how the fields line up.
- item_id comes from the Shopify variant ID. It does not change when you edit a title, which is what you want.
- title is the product title, with the variant name added when there is more than one variant.
- description is your product description with the HTML stripped out and cut to the 5,000 character limit.
- url points at the product page, with ?variant= added for multi-variant products.
- brand comes from the Vendor field. If you never set a vendor, brand stays blank.
- image_url is the variant image if it has one, otherwise the first product image. Up to ten more go into additional_image_urls.
- availability is in_stock or out_of_stock, taken from whether the variant is available.
- gtin comes from the barcode, but only if it is 8 to 14 digits. Anything else is left out rather than sent wrong.
- group_id, listing_has_variations and variant_dict are built from the Shopify product ID and your option names, such as Size and Colour.
What Shopify leaves out
products.json is a catalogue, not a business profile. Four things are usually missing.
- seller_name. Nothing in products.json says who is selling. You set it once in store settings, and every row gets it.
- Policy links. The feed asks for a return policy link, and a privacy policy and terms link if you want to offer checkout. SKUHelm looks for the standard Shopify policy pages and fills them in when they exist. If you wrote your policies on a custom page, paste the links yourself.
- Return rules. Whether you accept returns, and for how many days, is not in the product data. You set it once.
- Shipping price. Shopify keeps shipping rules separate from products, so shipping_price is blank unless you give a flat figure.
Getting a feed, step by step
- Make sure your store is not password protected. A locked storefront does not serve products.json, so there is nothing for SKUHelm to read.
- Go to the SKUHelm checker at /check and enter your shop address. You do not need an account to see the report.
- Read the results. Rows are grouped by problem, so one missing field across 300 products shows up as one fix, not 300.
- Sign up and open Store settings. Fill in seller name, brand fallback, policy links, return policy and country. These apply to every row.
- Fix anything left in Shopify itself, such as missing vendors or images, then sync again.
- Copy your hosted feed address. The free plan publishes up to 25 items. Pro publishes up to 10,000 and re-syncs every hour.
At that point you have a clean feed. You still have to apply to OpenAI yourself and deliver the file the way they ask. SKUHelm does not apply for you and does not push anything to OpenAI.
Common failures
- Default Title variants. Single-variant products have one variant called Default Title. SKUHelm treats these as plain products with no group, so they do not trip the variant rules.
- More than 250 products. The file is paged. If a checker only reads the first page, it will report a third of your shop. SKUHelm reads every page up to your plan limit.
- A theme that hides meta.json. Older themes sometimes do. Then the currency may be missing and prices cannot be written. Set the currency in store settings.
- Vendor set to your own domain or to something like Admin. Brand should be a real brand name. For handmade goods, your shop name usually works.
- Stock that Shopify reports as available when it is not. If you let products sell when out of stock, Shopify keeps them available, and the feed will say in_stock.
Paste your shop address and see which of your products pass today.
Check my Shopify storeQuestions
Do I need to install a Shopify app?
No. SKUHelm reads the public catalogue your store already serves, so there is nothing to install and no access to your admin.
Will SKUHelm change anything in my Shopify store?
No. It only reads. Fixes to vendors, images or descriptions are made in Shopify, and the next sync picks them up.
Does it include draft or hidden products?
No. Only published products appear in products.json, which is what a shopping feed should carry.
Can I use the Shopify product export CSV instead?
Yes. Shopify's own export works through the spreadsheet route, and SKUHelm recognises its columns. The live read is better for staying in sync because it needs no manual re-export.
Does this get my Shopify store into ChatGPT?
No. It prepares and hosts a valid feed. Approval comes from OpenAI, and their documentation says feed onboarding is currently available to approved partners.