Skip to content
feedlab Request early access

Sales channel

OpenAI

Feeds are consumed by ChatGPT product discovery and Instant Checkout.

OpenAI ingests a merchant product feed so ChatGPT can surface products in shopping answers and complete purchases through Instant Checkout. It is the one major channel that does not fetch a feed URL you host: you push full catalogue snapshots to an OpenAI SFTP endpoint, and the most recently processed snapshot is retained for up to 14 days.

Feed specification

Destination
ChatGPT product discovery and Instant Checkout
Accepted formats
Parquet (zstd, preferred) JSONL (.jsonl.gz) CSV (.csv.gz) TSV (.tsv.gz)
Refresh
Feeds are pushed to OpenAI over SFTP rather than fetched from a URL, and the guidance is to publish a full catalogue snapshot on a predictable cadence of at least daily. OpenAI retains its most recently processed record for up to 14 days, so a catalogue that stops being pushed ages out rather than simply going stale.

Attributes for OpenAI

Every attribute documented in this knowledge base that OpenAI accepts.

Attribute Requirement Notes
availability Required Accepts in_stock, out_of_stock, pre_order, backorder or unknown. The Google-compatible variant spells the third one preorder.
brand Required Required, and sits alongside a required seller_name that no Shopify product field supplies, so that one comes from a static store-level value.
condition Optional One of new, refurbished or used.
ads_metadata Optional There is no custom_label_0. Custom labelling for Ads is carried under ads_metadata instead.
description Required Capped at 5,000 characters of plain text.
product_category Optional Called product_category, and it is your own path from broad to specific separated by >, not Google's numeric taxonomy. The Google values do not carry over.
gtin Optional Exactly 8, 12, 13 or 14 digits including a valid check digit. Carry it as a string so leading zeros survive.
item_id Required Called item_id. Variants are submitted as one row each, so every variant carries its own item_id.
image_url Required Called image_url, and must be a direct JPEG or PNG that is publicly reachable, HTTPS preferred. Further views go in additional_image_urls.
group_id Optional Called group_id rather than item_group_id, and it travels with listing_has_variations set true and a variant_dict mapping option names to values. A Google mapping has to be rebuilt here, not renamed.
url Required Called url. This is the page a ChatGPT shopper lands on, so it has to resolve for a logged-out visitor.
mpn Optional Manufacturer part number, accepted as an alternative identifier to gtin.
price Required A single string of amount, space, uppercase ISO 4217 code, so "79.99 USD" rather than an amount and a currency in separate fields.
sale_price Optional Must be greater than zero and strictly less than price, so an empty or equal sale price has to be dropped rather than sent.
title Required Capped at 150 characters of plain text.

What catches Shopify merchants out

You push the feed, it is not fetched

Every other channel here takes a feed URL and re-fetches it on a schedule. OpenAI expects full snapshots pushed to an SFTP endpoint it issues you. A feed built around "publish a URL and let the channel pull it" needs a delivery step added rather than just a mapping.

Price is one string, currency included

The price attribute is a decimal amount, a space, then an uppercase ISO 4217 code, so "79.99 USD" rather than an amount and a currency in separate columns. Shopify holds the two apart, so this is a formatting rule, not a field you can map straight across.

seller_name is required and is not a product field

Alongside the expected item_id, title, description, url, brand, image_url, availability and price, the spec requires seller_name. Nothing on a Shopify product carries it, so it has to come from a static value set once for the store.

Variants use a different shape to Google

Rather than Google's item_group_id, variants are grouped with group_id, flagged with listing_has_variations, and described by a variant_dict mapping option names to values. A feed already mapped for Google needs this rebuilt rather than renamed.

Common OpenAI errors

Frequently asked questions

How do I submit a product feed to OpenAI?

You push it. OpenAI issues an SFTP endpoint and you upload full catalogue snapshots to it, rather than hosting a feed URL for the channel to fetch. The recommended cadence is a full snapshot at least once a day.

What happens if my OpenAI feed stops updating?

OpenAI retains its most recently processed record for up to 14 days. If snapshots stop arriving, products age out of that window and stop being eligible for ChatGPT shopping surfaces, so a broken delivery empties the catalogue rather than freezing it.

Which file formats does the OpenAI product feed accept?

Parquet compressed with zstd is preferred. JSONL is the reference format for the schema, and gzipped JSONL, CSV and TSV are also accepted. The Google-compatible variant lets you reuse tab or comma delimited files you already generate, with some attribute differences.

Primary sources

Channel specifications change. These are the official documents this page is based on.

Last reviewed View as markdown