# OpenAI

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.

- **Canonical URL:** https://www.feedlab.io/knowledge/channels/openai
- **Last reviewed:** 16 September 2026
- **Source:** feedlab knowledge base
- **Licence:** free to quote and cite with attribution to feedlab






## Feed specification

| Property | Value |
| --- | --- |
| Destination | ChatGPT product discovery and Instant Checkout |
| 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. |


### Accepted formats

- `Parquet (zstd, preferred)`
- `JSONL (.jsonl.gz)`
- `CSV (.csv.gz)`
- `TSV (.tsv.gz)`



## 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.








## 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

- [OpenAI: Product feed required fields](https://developers.openai.com/commerce/specs/file-upload/products)
- [OpenAI: File upload overview](https://developers.openai.com/commerce/specs/file-upload/overview)



