Once your ChatGPT business profile is verified, you can give ChatGPT a list of what you sell, with prices and availability, from a file you control.
Setting one up is quick. What takes care is the detail that gets rows rejected: the price format, the image type, and the nine fields every row needs.
We added a feed to our own profile, and it processed cleanly. This page has the steps we followed and the field rules in one place, so you can build the file once and keep it right.
Get the free ChatGPT Profile Audit Kit
What a product feed is
A product feed is a file that lists your products, one per row, with the same fields for each. You add it in the Products section of ChatGPT’s Business Hub.
It isn’t only for physical goods. We listed subscription plans as digital products. If that’s your situation, see how to list software plans in ChatGPT.
Step 1: choose how the feed is delivered
Setup asks for a feed name, at least one country, an optional currency, and a delivery method. The method decides how your products stay current, so choose it on purpose.
| Method | Best for | The catch |
|---|---|---|
| Upload a file | Getting started, small catalogs that rarely change | The file doesn’t update itself |
| Hosted URL | Prices or stock that change | You host and maintain the file |
| SFTP | Large catalogs | More setup |
An uploaded file is a snapshot. Raise a price next month without uploading a new file, and ChatGPT still has the old one. For anything that changes, start with a hosted URL.
Step 2: build the file
Required fields
Every row needs all nine.
| Field | Format | Notes |
|---|---|---|
item_id | Text | Unique and stable, such as brand-product-variant. Don’t change it once set. |
title | Text | The product name plus a few words on what it is. Aim for 150 characters or fewer. |
description | Plain text | Factual. Aim for 5,000 characters or fewer. |
url | Full http or https address | Must open without a login. |
brand | Text | Your brand name. |
seller_name | Text | The business selling the product. |
image_url | Direct link | JPEG or PNG. |
availability | One of five values | A missing value rejects the row. |
price | Number, space, currency code | For example, 49.00 USD. |
A sample row
Here’s one product as a CSV header and row, using a made-up store:
item_id,title,description,url,brand,seller_name,image_url,availability,price
acme-wallet-brown,"Acme Leather Wallet, Brown","Full-grain leather bifold wallet with six card slots.",https://www.example.com/products/wallet-brown,Acme,Acme Goods,https://www.example.com/images/wallet-brown.jpg,in_stock,49.00 USD
Optional fields
| Field | What it’s for |
|---|---|
offer_id | An identifier for the offer |
condition | Such as new |
product_category | The product’s category |
is_digital | true for software and subscriptions |
is_eligible_search | Setting it to false removes a product from search |
sale_price | Must be lower than price |
target_countries | Where the product is sold |
seller_url | Your website |
seller_tos | Your terms of service page |
seller_privacy_policy | Your privacy policy page |
This isn’t every optional field. It’s the set we used or confirmed in OpenAI’s documentation.
Value formats
- Price: a number, a space, and a currency code. No currency symbol.
- Availability:
in_stock,out_of_stock,pre_order,backorder, orunknown. - Links: full, public http or https addresses.
- Images: a direct link to a JPEG or PNG. The part of the spec we read gives no pixel size.
- Empty values: leave the cell empty. Placeholders such as “n/a” aren’t allowed. The word
unknownis valid in the availability field only.
Take the details from your own product pages. Don’t write new claims for the feed. If a product has no listed price, leave it out, because the price field is required.
File types and size
Business Hub accepts Parquet, which it prefers, plus gzipped JSONL, CSV, and TSV, and uncompressed CSV, TSV, and tab-separated text.
- Text files must be UTF-8.
- An uploaded file can be up to 20 MiB.
- A gzip file must also be 20 MiB or smaller once decompressed.
- Larger feeds use a hosted URL or SFTP.
We uploaded gzipped JSONL. A CSV is the easiest to build in a spreadsheet, and the kit includes a template with the columns in place. We haven’t uploaded a CSV ourselves, so read the preview carefully if you use one.
Step 3: upload and check the preview
- In Products, choose to add products.
- Enter the feed name and countries.
- Choose your delivery method and add the file or URL.
- Read the preview.
The preview checks a sample of rows and reports errors before you confirm. Compare the product names and prices with your site. Don’t confirm while errors are showing. Fix the file and upload again.
Step 4: confirm and check the result
After you confirm, Business Hub says processing may take a few minutes to a few hours. Our three-product feed showed as Processed within 12 minutes.
Then check two tabs:
- Upload history should show Processed.
- Issues should be empty. Rows rejected after processing appear here, not in the preview.
Likely errors and how to fix them
Our own feed passed the preview with no errors, so we didn’t hit these. We’ve inferred them from the rules above, as a starting point for diagnosis.
| Symptom | Likely cause | Fix |
|---|---|---|
| Row rejected for price | Currency symbol, missing code, or no space | Use 49.00 USD |
| Row rejected for availability | Empty, or a value outside the five allowed | Use one of the five values |
| Image error | WebP, SVG, or a link to a page instead of a file | Link directly to a JPEG or PNG |
| Row rejected for a placeholder | ”n/a”, “none”, or ”-” in a cell | Leave the cell empty |
| Link error | Relative link, or a page behind a login | Use the full public address |
| Sale price error | sale_price equal to or higher than price | Make it lower, or remove it |
| File rejected | Wrong encoding, or over 20 MiB | Save as UTF-8, or use a hosted URL |
| Duplicate products | An item_id changed between uploads | Keep IDs stable |
One difference catches people who’ve just set up their profile photos: feed images must be JPEG or PNG, while profile photos accept WebP.
Keep it current
This is the part that’s easy to forget.
- If you used a hosted URL, update the hosted file when prices or products change.
- If you uploaded a file, set a reminder to upload a new one whenever prices change.
- If you remove a product, it’s kept for up to 14 days after it’s left out of a new file, according to OpenAI’s feed documentation. Setting
is_eligible_searchto false removes it sooner.
Then back the feed up on your website. Add Product or Offer schema to the pages your feed links to, with the same prices. When we audited our own profile, the feed was fine and the pricing page had no Offer schema at all.
Before you confirm
- Every row has all nine required fields.
- Prices match your live site.
- Each image link opens the image file itself.
- The preview shows 0 rows with errors.
The feed is one section of the profile. Our complete guide to ChatGPT business profiles covers the others.
Get the free ChatGPT Profile Audit Kit
Sources and method
The setup screens, accepted file types, size limit, preview, processing time, and tabs are what we saw adding a feed to Rankability’s own profile on November 11, 2026. The required fields, formats, sale price rule, and 14-day retention come from OpenAI’s product feed documentation as we read it that day. The error table is inferred from those rules. The sample row describes a made-up store. If the upload screen and this page disagree, follow the screen, because the product is in beta.