ChatGPT product feed: OpenAI’s spec and where the category goes
A ChatGPT product feed is a file of your catalog that OpenAI ingests so ChatGPT can show your products with current prices and stock. OpenAI’s spec asks for nine fields on every row: item_id, title, description, url, brand, seller_name, image_url, availability and price. The category is optional. In OpenAI’s own format it goes in product_category as a path such as “Apparel & Accessories > Shoes”. In a Google-compatible feed, OpenAI reads product_type first and only falls back to google_product_category when product_type is empty.
What this comes down to
- OpenAI’s product spec requires nine fields per row: item_id, title, description, url, brand, seller_name, image_url, availability and price.
- In OpenAI’s format the category is product_category, written as a path from broad to specific, separated by >.
- In a Google-compatible feed, the first product_type value takes precedence over google_product_category.
- File feeds are full snapshots pushed by SFTP, at least daily; an API takes product updates and promotions in between.
- OpenAI says feed onboarding is currently available to approved partners, who apply through a form.
What the feed is for
OpenAI’s commerce documentation describes the product feed as the data ChatGPT uses for product discovery: what you sell, what it costs and whether it is in stock. Ads and checkout sit on top of it with requirements of their own, and checkout needs a separately enabled integration. This guide covers the discovery feed, which is the part every merchant needs first.
Access is not open yet. OpenAI says onboarding product feeds is currently available to approved partners, who apply through a form on its commerce site. The feed is worth preparing anyway, because most of it is the data a Google feed already holds.
It follows the same idea as a Google Shopping feed, one row per product or variant, which is why so much of it will look familiar. The product feed guide covers the general idea if this is your first feed.
If your feed already sends product_type, that, not your Google category, is what ChatGPT reads.
The nine required fields
| Field | What goes in it |
|---|---|
item_id | A stable ID, unique per item or variant, never reused |
title | The product name, with the variant when relevant |
description | A factual, plain-text description |
url | The product page, with the variant selected when possible |
brand | The brand as shown on the product page |
seller_name | The seller of this offer |
image_url | A direct link to the main image of this variant |
availability | in_stock, out_of_stock, pre_order, backorder or unknown |
price | Amount and currency code, for example 79.99 USD |
A missing or unrecognised availability value rejects the row, so send unknown explicitly rather than leaving it blank. For optional fields the spec says the opposite: leave an unknown value out, and do not write placeholders such as n/a.
A minimal row, in the JSONL form OpenAI shows:
{"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","product_category":"Home & Garden > Kitchen & Dining > Tableware > Drinkware > Mugs"}Where the product category goes
OpenAI accepts two shapes of file, and the category travels differently in each.
OpenAI’s own format
The field is product_category: your category path, from broad to specific, separated by >. OpenAI’s example is a Google taxonomy path, so the path you already use for Google works unchanged. Note that it is the path, not the numeric ID that Google prefers. The taxonomy download has both side by side, so a lookup from ID to path is one column.
A Google-compatible feed
OpenAI also reads a Google-style file, but only after it confirms that format for your registered feed, and only as CSV, TSV or TXT. XML and spreadsheets are not part of this route. Here two of Google’s fields map to OpenAI’s category, in a set order:
- The first non-empty value in
product_typewins. google_product_category, as an ID or a path, is used only whenproduct_typeis empty.
That order matters more than it looks. Many stores fill product_type with their own navigation, such as “Sale > Summer”, which is fine for Google, where it sits beside the Google category. In this profile it is the only category ChatGPT gets. If your product_type values are internal labels, consider making them descriptive paths. The product type guide explains how the two fields differ.
One exception needs the ID: a zero-price phone or tablet sold with a subscription must carry google_product_category 267 (mobile phones) or 4745 (tablets). A path does not qualify.
How the feed is delivered
- Push, not fetch. You upload to an SFTP location; OpenAI processes every file in its root directory.
- Full snapshots. Each upload is the whole catalog, at least daily, under the same file names each time.
- Formats. Parquet is preferred;
jsonl.gz,csv.gzandtsv.gzare also supported. - Removal. A product left out of later snapshots is retained for up to 14 days before it expires.
- Market. The standard upload currently targets the US; other markets need OpenAI to confirm them for your integration.
OpenAI suggests starting with a sample of around 100 items, every one carrying all the required fields, and checking the first full snapshot before automating it.
The API route
OpenAI also takes product data by API, with endpoints for feeds, for products and for promotions. Products are upserted by ID, so a price or stock change can go out as soon as it happens. Promotions can only be sent this way. OpenAI’s recommended setup is both at once: the daily file for the full catalog, and API updates during the day.
In the API, a product’s category is an object with two parts: the value, a label or a hierarchical path, and the taxonomy it comes from, where google_product_category is one of the named options. A Google taxonomy path can therefore travel labeled as exactly what it is.
Starting from a Google feed you already have
Most of the work is renaming: id becomes item_id, link becomes url, image_link becomes image_url. Three things do not carry over by renaming alone:
seller_namehas no Google equivalent and is required on every row in OpenAI’s format.- Availability is spelled
pre_orderin OpenAI’s format andpreorderin Google’s. - The category moves from an ID in
google_product_categoryto a path inproduct_category.
If your catalog has no Google categories yet, the Bulk Mapper returns the ID and the full path for every row, so the same run fills both feeds.
Questions
Is product_category required in the ChatGPT product feed?
No. It is optional in OpenAI’s spec. The nine required fields are item_id, title, description, url, brand, seller_name, image_url, availability and price.
Can I send my Google Merchant Center feed to OpenAI?
OpenAI supports a Google-compatible profile, but only after it confirms that format for your registered feed, and only as a CSV, TSV or TXT file. XML feeds are not supported on that route.
Should product_category be a Google category ID or a path?
A path. OpenAI describes product_category as a category path from broad to specific, separated by >, and its example is a Google taxonomy path. Google category IDs are accepted in google_product_category on the Google-compatible route.
How often should the feed be updated?
OpenAI recommends a full snapshot at least daily, uploaded under the same file names each time, with API updates for changes during the day.
Read next
ACP vs UCP: OpenAI’s and Google’s agentic commerce protocols compared
ACP and UCP compared: where each one sells, how product data reaches it, who can get access today, and which parts of the work carry over between them.
Google product category vs product_type: what's the difference
One is Google's fixed taxonomy, the other is your own. They do different jobs, and confusing the two is why feeds end up miscategorised.
Google product category: use the ID or the full path?
Google accepts either the numeric ID or the full category path, not both. Why the ID is the safer choice, and how Microsoft treats each.