OpenAI's product feed spec is the schema merchants use to share a catalog with ChatGPT under the Agentic Commerce Protocol: one row per variant, nine required fields (`item_id`, `title`, `description`, `url`, `brand`, `seller_name`, `image_url`, `availability`, `price`), sent as a full snapshot at least daily.
- Most Shopify merchants should not build it. OpenAI says Shopify and Etsy catalogs are already integrated, with no application or setup required. Shopify Catalog sends your data for you. The spec is for merchants on other stacks, and direct feeds are open only to approved partners.
- Every required field has a home in Shopify: variant ID, title plus options, description, the product URL with `?variant=`, vendor, store name, variant image, inventory and price. The weak spots are GTINs, product dimensions, material, gender and age group, and review aggregates.
- Even if you never upload a file, the spec is a free checklist of what ChatGPT can use. Fill the matching Shopify fields (Barcode, category metafields, review metafields, return rules, policies) and Shopify Catalog carries them for you.
The OpenAI product feed spec defines how a merchant sends product data straight to OpenAI so ChatGPT can show it in shopping results. It asks for one row per purchasable variant, with nine required fields and about forty optional ones, delivered as a full catalog snapshot at least once a day. If you sell on Shopify, you almost certainly don't need to build it: OpenAI says Shopify catalogs are already integrated into ChatGPT through Shopify Catalog. But the spec is still the clearest list anyone has published of what ChatGPT can read about a product, so it's worth knowing where each field lives in your admin.
This guide maps each field to the Shopify field, setting or metafield it comes from, and flags where Shopify has no native home. Field rules come from OpenAI's Products spec and Shopify's help center as of October 22, 2026, listed under Sources.
- OpenAI product feed
- A structured catalog file (or API stream) that a merchant shares with OpenAI so ChatGPT can index its products and show current price and availability. It follows OpenAI's published Products spec and is part of the Agentic Commerce Protocol.
- Agentic Commerce Protocol (ACP)
- An open standard, developed by OpenAI and Stripe and licensed under Apache 2.0, for how AI agents and businesses exchange product data, checkout sessions and payment tokens. OpenAI says merchants start an ACP integration by sharing a product feed.
- Shopify Catalog
- Shopify's structured index of merchants' products, which feeds agentic storefronts in AI channels such as ChatGPT, Microsoft Copilot and Google AI Mode. It shares title, description, options, images, price, availability and other key attributes, and updates continuously.
Do Shopify merchants need to build an OpenAI product feed?
No, not if your store is eligible for Shopify's agentic storefronts. OpenAI's shopping help article says product data for Shopify merchants is already integrated into ChatGPT through Shopify Catalog, and no additional work is required from individual merchants. OpenAI's merchant page goes further: if you sell through Shopify or Etsy, your catalog is already integrated, and no additional setup or application is required.
Shopify says the same from its side. Its ChatGPT help page says products are discovered through Shopify Catalog, the channel is active by default for eligible stores, and there are no fees for selling in ChatGPT. You manage it under Sales channels → Agentic, not by exporting a file.
Direct feeds are for everyone else, and access is gated. OpenAI's get-started guide says onboarding product feeds is currently open to approved partners who apply through chatgpt.com/merchants, and that page says applicants join a waitlist. OpenAI's March 24, 2026 announcement also names third-party providers, including Salesforce and Stripe, as delivery paths.
| Your situation | How products reach ChatGPT | Build an OpenAI feed? | What to work on instead |
|---|---|---|---|
| Eligible Shopify store, agentic storefronts on (the default) | Shopify Catalog | No. OpenAI says no setup or application is needed | The Shopify fields this guide maps, plus Catalog Mapping |
| Shopify store with ChatGPT's Catalog access turned off | Open-web crawling only, per Shopify | Not documented. OpenAI's pages describe no direct-feed route for an opted-out Shopify store | Decide whether to turn access back on; see turning off agentic storefronts |
| Shopify store failing Catalog eligibility | Open web only, if at all | No. Fix eligibility first | Why products don't show in ChatGPT |
| Etsy seller | Etsy's integration | No. OpenAI says no setup is needed | Your Etsy listing data |
| Custom, headless or non-Shopify platform | Direct feed, or a provider such as Salesforce or Stripe | Yes, once approved | This spec, starting with a 100-item sample |
| Large multi-channel retailer | Direct ACP integration | Yes | Feed plus API updates and promotions |
How does a direct feed get to OpenAI?
OpenAI recommends the full feed once a day by file upload, then updates through the day by API. Promotions can only be sent by API.
- 01
Apply and wait for approval
Apply at chatgpt.com/merchants. Direct feeds are open to approved partners; OpenAI says a self-serve merchant platform is being built.
- 02
Validate a small sample
Start with around 100 items, every required field in every row, and QA the first full snapshot before automating.
- 03
Push full snapshots by SFTP
A complete export at least daily. OpenAI prefers Parquet (ideally zstd-compressed) and accepts
jsonl.gz,csv.gzandtsv.gz, in UTF-8, with stable file names overwritten each run and up to 500,000 items per shard. - 04
Send intraday changes by API
PATCH /product_feeds/{id}/productsupserts products matched byid. Its schema differs from the file: nested variants, and prices as integers in minor units. - 05
Remove products deliberately
A product missing from a snapshot is kept for up to 14 days. To pull one sooner, set
is_eligible_searchtofalse.
What are the nine required fields, and where does each come from in Shopify?
A missing or unrecognized availability value rejects the row outright. Elsewhere, OpenAI warns that not every invalid value is rejected, so a bad value can load and still mislead.
| OpenAI field | What OpenAI asks for | Shopify source | Watch out for |
|---|---|---|---|
item_id | Stable ID, unique per item or variant; never reused | The variant ID (or a SKU, if every variant has a unique one) | SKUs are optional in Shopify. Never key on something that changes when you edit a listing |
title | Product name with the variant; aim for 150 characters or fewer | Product title plus the variant's option values | "Trail shoe — black, size 10", not the bare product title on every row |
description | Factual plain text; aim for 5,000 characters or fewer | The product description, with HTML stripped | Put the buying facts early. Shopify asks for legal disclosures in the first 6,000 characters |
url | Product page with the variant selected; stable | https://yourstore.com/products/{handle}?variant={variant ID} | Shopify supports ?variant= deep links. Changing a handle breaks the URL |
brand | Brand as shown on the product page | Vendor | Shopify defines vendor as the manufacturer, wholesaler or other supplier. Resellers may hold the supplier there, not the brand |
seller_name | The seller supplying the offer | Your store name as shoppers know it | No placeholders. Keep it identical across rows |
image_url | Direct JPEG or PNG link showing this variant | The variant's image, else the first product media item | A lifestyle shot of a different colourway misdescribes the row |
availability | in_stock, out_of_stock, pre_order, backorder or unknown | Variant inventory plus the "Continue selling when out of stock" setting | Overselling at zero is a choice: map it to backorder or pre_order, whichever is true |
price | Regular price as 79.99 USD | Variant price, or the compare-at price during a genuine sale (see below) | No currency symbols, thousands separators or rounding |
Price and sale price: the one mapping that inverts
Shopify and OpenAI name prices the other way round. In Shopify, Price is what you charge and Compare-at price is the higher original shown beside it. In OpenAI's spec, price is the regular price and sale_price is the current sale price, which must be greater than zero, strictly lower than price and in the same currency, or it's ignored. So during a sale, the compare-at price goes in price and the Shopify price goes in sale_price. Outside a sale, send the Shopify price as price and omit sale_price.
Only do this when the compare-at price is a real regular price. Shopify's Catalog Mapping has its own switch for sending compare-at prices to AI agents. Sale dates don't schedule anything in OpenAI's spec, so update the feed when a sale starts and ends. When AI shopping quotes the wrong price covers what happens when these drift.
How do Shopify variants map to OpenAI's variant fields?
OpenAI wants a separate row for every purchasable selection, tied together by a parent ID. Shopify's product-and-variant model maps onto it cleanly:
- `group_id` ← the Shopify product ID. Every variant row shares it, and it must differ from each row's
item_id. - `listing_has_variations` ←
trueon every variant row of a product that has options. - `variant_dict` ← the variant's option names and values, such as
{"color":"Black","size":"10"}. Use the same option names across the group, and no duplicate combinations. - Single-variant products ← send one row without the three fields above. A
group_idthat equalsitem_iddoesn't create a group. - `offer_id` ← optional. If you use it, never put the price inside the ID.
Group only variants of the same product as presented on your site; each row carries its own price, availability, URL and images. Shopify Catalog solves the same grouping question with Combined Listings or Catalog Mapping. Our guide to variant data that doesn't confuse AI agents covers the structure in detail.
GTIN and MPN
gtin is optional but strict: exactly 8, 12, 13 or 14 digits with a valid check digit, no spaces or dashes, leading zeros kept. In Shopify it comes from the variant's Barcode. Shopify lets you add up to 20 barcodes per variant and type them (GTIN, UPC, EAN, ISBN, ASIN, or Custom, which takes any value up to 255 characters), so filter to real GTINs before export. An ISBN-10 isn't accepted; send the ISBN-13. Shopify also reserves standard metafields for UPC (facts.upc), EAN (facts.ean) and ISBN (facts.isbn) if an app writes them there.
mpn has no native Shopify field. Keep it in a product or variant metafield if the manufacturer assigns one. OpenAI is explicit: submit it with brand, and don't invent a value to stand in for a missing GTIN. Your SKU is not an MPN unless you're the manufacturer and they're the same thing.
Which optional fields matter, and where do they live in Shopify?
None are required, but they're the facts shoppers filter and compare on. OpenAI says optional fields can improve answer quality, and to leave one out if it needs brittle transforms.
| OpenAI field | Allowed values | Shopify source | Gap or catch |
|---|---|---|---|
product_category | Broad-to-specific path separated by > | Product category (Shopify Standard Product Taxonomy) | Shopify's category path already uses this shape |
condition | new, refurbished, used | The Condition category metafield, where your category has it | Omitted may be read as new. Always send used or refurbished |
color, size | Free text, consistent with the image | Variant options; Color and Size category metafields | When size separates variants, use variant_dict |
material | Principal materials | Material or Fabric category metafield | Often trapped in description prose. Move it to the field |
gender | male, female, unisex | Target gender category metafield | Map Shopify's values to OpenAI's three |
age_group | newborn, infant, toddler, kids, adult | Age group category metafield | A product attribute, not a purchase-age limit |
dimensions | At least two of length, width, height, plus unit | No native field; use a custom metafield | Shopify's packed size is package dimensions, which OpenAI excludes |
weight + item_weight_unit | Positive net weight; g, kg, oz, lb | Variant weight | Shopify's weight drives shipping rates. Send net weight, not packed |
additional_image_urls | Array, or comma-separated in CSV | Remaining product media | Percent-encode commas inside URLs as %2C |
seller_url | Storefront or seller page | Your store's home page | One value for the whole feed |
shipping_price | Non-negative money; omitted means unknown | No per-product shipping price field in Shopify | Send it only if one charge is true for the item. Omitted means unknown; zero means free |
accepts_returns, return_deadline_in_days | Boolean; positive whole days | Return rules under Settings → Policies (14, 30, 90 days or custom) | Final-sale products: false and no window |
return_policy | Public policy URL | /policies/refund-policy | A URL doesn't set accepts_returns for you |
review_count, star_rating | Count; 0–5 to two decimals | reviews.rating_count and reviews.rating metafields from your review app | Product reviews only. Rescale if your app's scale isn't 0–5 |
Category metafields are the attributes of Shopify's Standard Product Taxonomy, and which ones appear depends on the category you assign. Where one doesn't apply, omit the OpenAI field: the spec says to leave unknown optional values out rather than send placeholders. The product attribute schema design guide covers how to decide which attributes each category needs.
Some columns do nothing in a standard upload. marketplace_seller, size_system, store review fields, accepts_exchanges, is_digital and the shipping tuple all need an integration configured to carry them, and market columns (target_countries, store_country) don't change the default: standard uploads target the US.
What do the search, checkout and ads flags do?
The spec carries three opt-in flags, and each is independent of the others:
- `is_eligible_search` defaults to
true. Setting it tofalseremoves the item from search and also disables checkout for it. OpenAI notes eligibility doesn't guarantee display. - `is_eligible_checkout` defaults to disabled and only works when checkout is separately enabled for your integration. It also calls for
seller_privacy_policyandseller_tos(on Shopify,/policies/privacy-policyand/policies/terms-of-service). - `is_ads_eligible` is for ChatGPT ads, off unless your feed sets an Ads default, and has no effect on organic search. See ChatGPT ads for ecommerce.
Read the checkout flag in context. Since March 24, 2026, OpenAI lets merchants use their own checkout while it focuses on product discovery, and its merchant page says shoppers go to your site or app by default, with no fees on those purchases. What happened to Instant Checkout walks through the timeline. For a Shopify store the question doesn't arise: on ChatGPT, agentic storefronts send the purchase to your own online store checkout.
What breaks an OpenAI feed most often?
OpenAI names three common ingestion failures: missing required fields, outdated or non-spec field names, and malformed values. They usually come from these habits:
- Prices in the wrong shape.
$79.99and79.99don't match the money format. It has to be79.99 USD. - Placeholder strings.
nullorn/ain an optional field is worse than leaving it empty. Onlyavailabilityacceptsunknown. - Identifiers stored as numbers. Spreadsheets can strip leading zeros from GTINs and IDs. Keep identifiers as strings.
- Legacy column names. Old aliases such as
skuforitem_idstill load, but send one name per value, and migrate oldCustom_variant1_categorypairs tovariant_dict. - Stale snapshots. OpenAI says to update the feed whenever price or availability changes, not only on the daily run.
How do I make my Shopify data feed-ready without building a feed?
Treat the spec as a field audit for Shopify Catalog, which carries what your admin holds. Catalog Mapping, under Sales channels → Agentic → Sources → Shopify Catalog → Review product data mapping, lets you choose where title, description and category come from (product fields, metafields or metaobject references) and how variants group.
- 01
Fix the required nine first
Every variant needs a title with its options, a real description, an image, a vendor that holds the brand, a price above 0 and accurate stock. The title, image and price also decide Shopify Catalog eligibility.
- 02
Assign a product category to everything
The category unlocks category metafields (color, size, material, target gender, age group, condition), the same facts OpenAI's optional fields ask for.
- 03
Clean up barcodes
Set each real GTIN with the right barcode type and check digit. Leave Custom-type internal codes out of anything you call a GTIN.
- 04
Set return rules and policies
Configure the return window and final-sale exceptions under Settings → Policies, and complete the refund, privacy and terms pages. ChatGPT via Shopify requires all three policies.
- 05
Connect reviews to standard metafields
Make sure your review app writes
reviews.ratingandreviews.rating_count, so the aggregate exists as data and not only as a theme widget. - 06
Map anything custom
If material, dimensions or grouping live in custom metafields or tags, use Catalog Mapping where it supports the field, and keep the value in a structured field rather than prose.
The catalog enrichment for AI playbook sets the order of work for a large catalog. For how this route compares with Google Merchant Center, Microsoft and Perplexity, start with the AI shopping channels guide.
If you'd rather hand over the catalog work, from category metafields to GTIN cleanup and Catalog Mapping, that's what Agentic Commerce Setup covers for Shopify stores.
FAQ
What is the OpenAI product feed spec?
- It's OpenAI's published schema for sharing a product catalog with ChatGPT. Each row is one purchasable item or variant, with nine required fields (ID, title, description, URL, brand, seller name, image, availability and price) and optional fields for variants, attributes, shipping, returns, reviews, ads and checkout. It's delivered as a daily full snapshot by SFTP, with API updates.
Do I need an OpenAI product feed if I use Shopify?
- Not if your store is eligible for agentic storefronts. OpenAI says Shopify catalogs are already integrated into ChatGPT through Shopify Catalog, with no setup or application required, and Shopify says the ChatGPT channel is active by default for eligible stores. Your work is the product data in your Shopify admin, which Catalog sends for you.
Who can send a direct product feed to OpenAI?
- OpenAI says onboarding product feeds is currently open to approved partners, who apply at chatgpt.com/merchants and join a waitlist. OpenAI also says it supports delivery through third-party providers such as Salesforce and Stripe, and is building a self-serve merchant platform. Shopify and Etsy sellers don't need to apply.
Is GTIN required in the OpenAI product feed?
- No. `gtin` is optional, but if you send it, it must be exactly 8, 12, 13 or 14 digits with a valid check digit and no spaces or dashes. In Shopify it comes from the variant's Barcode field. Don't invent an MPN to replace a missing GTIN; OpenAI's spec says so explicitly.
How often should an OpenAI product feed update?
- OpenAI asks for a full snapshot at least daily, overwriting the same file names, and recommends sending changes during the day through its API. It also says to update the feed whenever prices or availability change. Products left out of later snapshots expire within 14 days unless you set is_eligible_search to false.
Does the product feed let customers check out inside ChatGPT?
- Not on its own. The checkout flag is off by default and only works when checkout is enabled for your integration, which OpenAI says is separate from the feed. Since March 24, 2026, OpenAI lets merchants use their own checkout, and its merchant page says shoppers go to your site or app by default.
Sources
- 1.Products (product feed specification) · OpenAIRequired feed fields; GTIN optional; keep price and availability current
- 2.File upload overview · OpenAI DevelopersDaily full snapshots over SFTP, file formats, common ingestion failures
- 3.Get started (Agentic Commerce) · OpenAI DevelopersFeeds open to approved partners; daily file plus API updates
- 4.Best practices (product feeds) · OpenAI DevelopersWhich optional fields improve answers
- 5.Products API · OpenAI DevelopersUpserts matched by id, nested variants, prices in minor units
- 6.Shopping with ChatGPT Search · OpenAI Help CenterHow ChatGPT picks products: provider metadata, Shopify Catalog, direct feeds; results aren't ads
- 7.Power product discovery in ChatGPT (merchants) · OpenAIShopify and Etsy catalogs need no application; shoppers go to the merchant's site by default
- 8.Powering product discovery in ChatGPT · OpenAIMarch 24, 2026: merchants' own checkout replaces Instant Checkout
- 9.Agentic Commerce Protocol · Agentic Commerce Protocol (OpenAI and Stripe)Open standard under Apache 2.0, developed by Stripe and OpenAI
- 10.Selling on ChatGPT · Shopify Help CenterProducts reach ChatGPT through Shopify Catalog; checkout on your store; no ChatGPT fees
- 11.Shopify Catalog Mapping · Shopify Help CenterTitle, description and category sources; variant grouping; compare-at price
- 12.Requirements for Shopify Catalog · Shopify Help CenterStarter plan or higher; no Plus requirement for AI channels
- 13.Product details page · Shopify Help CenterPrice vs compare-at, barcode types, vendor, weight
- 14.Category metafields · Shopify Help CenterCategory attributes from the Standard Product Taxonomy
- 15.List of standard metafield definitions · Shopify.devReview rating and count, UPC, EAN and ISBN metafields
- 16.Adding store policies · Shopify Help CenterPolicy page URLs the feed's policy fields point to

Founder of GigaCommerce, part of Gigaverse. Works with mid-market Shopify and Amazon merchants on agentic commerce installs, AI-ready catalogs, and Commerce GEO.
LinkedIn