Canonical definition
ACP Product Feed — Definition
TL;DR: An ACP product feed is a structured list of a merchant’s products — one row per purchasable item or variant — that the merchant sends to OpenAI so ChatGPT can show those products with current price and availability. Since March 2026, product discovery is the main job of the Agentic Commerce Protocol (ACP), so the feed is the part of ACP that most merchants actually use. It needs nine fields per row.
What is an ACP product feed?
An ACP product feed is a structured file or API stream of a merchant’s catalogue, with one record per purchasable item or variant, that the merchant shares with OpenAI under the Agentic Commerce Protocol so that ChatGPT can index, display and link to those products with accurate price, availability and seller information.
It is also called a ChatGPT product feed or an AI product feed. The official schema is OpenAI’s Product Feed Spec.
Why does the feed matter more now?
In September 2025 ACP was launched mainly for checkout inside ChatGPT. In March 2026 OpenAI changed direction: merchants now use their own checkout, and ACP was extended to carry product feeds and promotions for discovery (OpenAI, 24 March 2026). OpenAI’s merchant page now describes ACP as supporting product discovery through shared product data.
Is a feed required? No. OpenAI’s merchant FAQ says a store can appear without a feed if ChatGPT already crawls it. A feed gives more control and more current data. So allowing OAI-SearchBot and publishing correct Product schema still come first.
What fields are required?
Nine fields, on every row, in the Stable schema:
| Field | What it holds | Watch out for |
|---|---|---|
item_id | Stable ID of the item or variant | Never reuse it for a different item. OpenAI matches products by this ID. |
title | Product name, with the selected variant | Aim for 150 characters or fewer. |
description | Factual description | Plain text, up to about 5,000 characters. No HTML. |
url | Product page, with the variant selected if possible | Public, absolute, stable. |
brand | Brand as shown on the page | No placeholders like “unknown”. |
seller_name | Who supplies the offer | A real seller name. |
image_url | Main image of this variant | Direct JPEG or PNG URL, public. |
availability | in_stock, out_of_stock, pre_order, backorder or unknown | An empty or unknown value rejects the row. |
price | Regular price as amount CURRENCY | Write 79.99 USD — a space and an ISO 4217 code. |
A minimal valid record (JSON Lines):
{"item_id":"MUG-350-BLUE","title":"Blue ceramic mug, 350 mL","description":"Dishwasher-safe glazed ceramic mug with a handle.","url":"https://example.com/products/mug-blue","brand":"Northline","seller_name":"Northline Home","image_url":"https://example.com/images/mug-blue.jpg","price":"18.00 USD","availability":"in_stock"}
Optional fields add detail: sale_price, gtin, mpn, condition, product_category, additional_image_urls, shipping, returns (accepts_returns, return_deadline_in_days, return_policy) and review aggregates.
How are variants represented?
Each size or colour is its own row with its own item_id, price, stock, URL and image. Rows of the same product share a group_id, set listing_has_variations to true, and list the selected options in variant_dict. The group_id must differ from every item_id.
{"item_id":"TRAIL-BLK-10","group_id":"TRAIL","listing_has_variations":true,
"variant_dict":{"color":"Black","size":"10"}, ... ,"availability":"in_stock"}
{"item_id":"TRAIL-BLK-11","group_id":"TRAIL","listing_has_variations":true,
"variant_dict":{"color":"Black","size":"11"}, ... ,"availability":"out_of_stock"}
How is a feed delivered and refreshed?
- Formats: JSON Lines, CSV or TSV, optionally gzip-compressed. A Google-compatible product data file is also accepted, but only after OpenAI confirms it for your registered feed.
- Delivery: SFTP, API, or supported commerce platforms and feed providers. OpenAI names Salesforce and Stripe as delivery paths. The API has endpoints for feeds, products and promotions.
- Refresh: a full snapshot is the source of truth, recommended at least daily. Update price and availability whenever they change.
- Removal: a product missing from a snapshot is kept for up to 14 days. To hide it at once, set
is_eligible_searchtofalse. - Markets: standard uploads target the US. Other countries need setup confirmed by OpenAI.
What do the eligibility flags do?
| Flag | Default | Meaning |
|---|---|---|
is_eligible_search | true | The product may appear in ChatGPT search. Eligibility does not guarantee display. |
is_eligible_checkout | false | Checkout in ChatGPT. Works only with a separately enabled integration; not available to most merchants. |
is_ads_eligible | false | The product may be used for ads in ChatGPT, under a separate Ads feed guide. |
How is it different from other product signals?
| ACP product feed | Google Merchant Center feed | Product JSON-LD | llms.txt | |
|---|---|---|---|---|
| Read by | OpenAI / ChatGPT | Google Shopping, Gemini | Any crawler that parses the page | Mostly AI coding tools, rarely shopping bots |
| Pushed or crawled | Pushed by the merchant | Pushed by the merchant | Crawled | Crawled |
| Unit | One row per item or variant | One row per item or variant | One product page | Whole site summary |
| Needed to appear? | No, but gives control | For Google Shopping surfaces | Strongly recommended | No |
You usually want the feed and correct Product JSON-LD. They should agree: the same price and stock in the feed and on the page.
How does a Magento catalogue map to an ACP feed?
| Feed field | Magento source |
|---|---|
item_id | SKU of the simple product (for configurables: the child SKU) |
group_id | SKU of the parent configurable product |
variant_dict | The configurable attributes and the child’s values (for example colour and size) |
title, description | Name and description per store view, with Page Builder HTML reduced to plain text |
url, image_url | Product URL in the store view; child image, or parent image if the child has none |
brand | Magento has no standard brand field. Map manufacturer or your own brand attribute, and fill gaps |
seller_name | Store or company name |
availability | Salable status of the source item (MSI), mapped to in_stock or out_of_stock; backorders to backorder |
price, sale_price | Regular price and active special price, with the store view’s currency code |
Common mistakes on Magento: an empty brand, HTML left in descriptions, prices without a currency code, and stock that is updated only once a day while the store sells out faster.
How does a merchant get a feed into ChatGPT?
- Apply at chatgpt.com/merchants. As of 11 September 2026, applicants join a waitlist, and shopping is live for US users only.
- Shopify and Etsy catalogues are connected automatically. Magento stores are not.
- OpenAI plans a self-serve merchant portal “later this year”.
- There are no fees on purchases that start in ChatGPT. The purchase happens on your site.
Tools for Magento
- angeo/module-openai-product-feed — generates an ACP feed from the Magento catalogue on a schedule. Free, MIT.
- angeo/module-openai-product-feed-api — REST endpoints for feeds, products and promotions, for pull-based integrations.
- Free AEO scan — checks whether a feed is present and reachable from outside.
What we don’t know. How much a feed improves placement compared with crawling alone — OpenAI says richer data helps, but publishes no numbers. When the self-serve portal and non-US markets open. Whether checkout through the feed will return for ordinary merchants: the checkout flag still exists in the schema, but needs a separate integration.
Frequently asked questions
What is an ACP product feed?
It is a structured list of a merchant’s products, one row per purchasable item or variant, that the merchant sends to OpenAI under the Agentic Commerce Protocol so ChatGPT can show the products with current price and availability.
What fields does an ACP product feed require?
Nine fields on every row: item_id, title, description, url, brand, seller_name, image_url, availability and price. Price is written as an amount and a currency code, for example 79.99 USD.
Do I need a product feed to appear in ChatGPT?
No. OpenAI says a store can appear if ChatGPT already crawls it. A feed gives more control and more current price and stock data.
How often should an ACP feed be updated?
OpenAI recommends a full snapshot at least daily, and price and availability should be updated whenever they change. A product missing from a snapshot is kept for up to 14 days.
Can I use my Google Merchant Center feed for ChatGPT?
Sometimes. OpenAI accepts a Google-compatible CSV or TSV product data file, but only after it confirms that format for your registered feed. Otherwise use the OpenAI format.
Does the ACP feed enable checkout inside ChatGPT?
No. Checkout needs a separately enabled integration and is not available to most merchants. Since March 2026, purchases that start in ChatGPT normally complete on the merchant’s own site.
Related definitions
Sources
- OpenAI, Products — Product Feed Spec (Stable), checked 11 Sep 2026.
- OpenAI, File upload overview, checked 11 Sep 2026.
- OpenAI, Merchant page and FAQ, checked 11 Sep 2026.
- OpenAI, Powering Product Discovery in ChatGPT, 24 Mar 2026.
- OpenAI, Agentic Commerce Protocol — developer documentation.