How to make your product catalog visible to AI assistants

Type
How-to
Applies to
Medusa v2.x
Updated

Short answer

To make products visible in ChatGPT, send OpenAI a product feed that follows its Agentic Commerce Protocol schema: nine required fields per variant, uploaded as a full snapshot at least daily. Add schema.org Product markup and agent-readable pages for other assistants. Medusa has an official guide that builds the feed with a workflow and scheduled job.

How do AI assistants read a product catalog?

AI assistants read a store's catalog through three channels: product feeds sent to the AI platform, structured data on product pages, and APIs or agent-readable files they call directly. ChatGPT shopping relies on a product feed. Assistants that browse the web also read schema.org markup and Markdown, so a visible catalog covers all three.

ChannelWhat the assistant readsMedusa status
ChatGPT product feed (ACP)A full catalog snapshot you upload to OpenAIOfficial guide
Google Merchant Center shopping feedsThe feeds Google's UCP page says merchants can reuseCustom
schema.org Product markupJSON-LD on storefront product pagesCustom
llms.txt and Markdown pagesAgent-friendly text versions of your pagesCustom
Store API product searchGET /store/products with a search termNative

What fields does the ChatGPT product feed need?

OpenAI's product file schema requires nine fields for every item or variant: Copy to clipboarditem_id, Copy to clipboardtitle, Copy to clipboarddescription, Copy to clipboardurl, Copy to clipboardbrand, Copy to clipboardseller_name, Copy to clipboardimage_url, Copy to clipboardavailability, and Copy to clipboardprice. Availability must be one of Copy to clipboardin_stock, Copy to clipboardout_of_stock, Copy to clipboardpre_order, Copy to clipboardbackorder, or Copy to clipboardunknown. Price uses major currency units with the currency code, such as Copy to clipboard79.99 USD.

Variants share a Copy to clipboardgroup_id and set Copy to clipboardlisting_has_variations and Copy to clipboardvariant_dict. To appear in Instant Checkout, an item also needs Copy to clipboardis_eligible_checkout, Copy to clipboardseller_privacy_policy, and Copy to clipboardseller_tos.

How often and in what format do you send the feed?

OpenAI's file upload guide sets these delivery rules:

  • Push full catalog snapshots over SFTP.
  • Use parquet (preferred), or jsonl.gz, csv.gz, or tsv.gz, in UTF-8.
  • Upload at least once a day, and overwrite the same file names each time.
  • Keep shards under about 500,000 items and 500MB.
  • A product missing from later snapshots expires within 14 days. Set Copy to clipboardis_eligible_search=false to hide it sooner.

Feed onboarding is open to approved partners, who apply through OpenAI.

How do Medusa fields map to ACP feed fields?

This mapping applies OpenAI's current product file schema to the Medusa data that Medusa's ACP guide reads, one row per variant. The guide itself writes older field names (link, image_link, item_group_id, separate color and size), so rename them for OpenAI's format:

ACP fieldMedusa source
item_idVariant id
group_idProduct id
titleProduct title; OpenAI asks you to name the variant too
descriptionProduct description
urlStorefront URL plus product handle
image_urlProduct thumbnail
priceVariant calculated price in the region's currency
availabilityVariant inventory, or in_stock when inventory isn't managed
variant_dictVariant option values, such as color and size
gtinVariant upc
brand, seller_nameNot in core; set from config, metadata, or a custom module

How do you generate the feed from Medusa?

In Medusa, you generate the feed in a workflow that reads products, prices, and stock with Query, then run it from a scheduled job. This job runs the guide's Copy to clipboardsendProductFeedWorkflow once a day:

import { MedusaContainer } from "@medusajs/framework/types"
import sendProductFeedWorkflow from "../workflows/send-product-feed"
export default async function syncProductFeed(container: MedusaContainer) {
await sendProductFeedWorkflow(container).run({
input: { currency_code: "usd", country_code: "us" },
})
}
export const config = {
name: "sync-product-feed",
schedule: "0 2 * * *",
}

The guide writes the feed as XML on a 15-minute schedule and logs it instead of uploading it. Change the output to a format OpenAI's current spec accepts, and add the SFTP upload once you have access.

How do you make product pages readable by agents?

Product pages become readable to web-browsing assistants through schema.org Product markup. Add a JSON-LD block with Copy to clipboardname, Copy to clipboarddescription, Copy to clipboardimage, Copy to clipboardsku or Copy to clipboardgtin, Copy to clipboardbrand, and an Copy to clipboardoffers object with Copy to clipboardprice, Copy to clipboardpriceCurrency, and Copy to clipboardavailability. Medusa storefronts are separate apps, so you add this in your product page using data from the Store API.

llms.txt is a proposed Markdown file at a site's root that lists the pages an agent should read. The same proposal suggests a Markdown copy of each page at the page URL plus Copy to clipboard.md. Medusa does not generate either for storefronts; you add them in the storefront.

How can agents query a Medusa catalog directly?

Agents that call APIs can search a Medusa catalog through the Store API. Copy to clipboardGET /store/products accepts a Copy to clipboardq search term and needs an Copy to clipboardx-publishable-api-key header, which scopes results to a sales channel. See List Products and publishable API keys.

When is Medusa not the right choice?

If you only need a ChatGPT feed and have no developer, a hosted platform or a feed management tool takes less work than building the feed in code. Medusa fits when you want the feed generated from your own product, price, and inventory data.

Common questions

What format does the ChatGPT product feed use?

OpenAI's file upload spec prefers parquet and also accepts jsonl.gz, csv.gz, and tsv.gz, delivered over SFTP as a full catalog snapshot. OpenAI recommends uploading at least once a day.

Can anyone submit a product feed to ChatGPT?

No. OpenAI states that product feed onboarding in ChatGPT is available to approved partners, who apply through OpenAI's merchant form.

Does Medusa add schema.org markup to product pages?

Medusa storefronts are separate applications, so you add schema.org Product JSON-LD in your storefront's product page, using product, price, and stock data from Medusa's Store API.

How do I remove a product from the ChatGPT feed?

Set is_eligible_search to false, or leave the product out of later full snapshots. OpenAI keeps a missing product's last record for up to 14 days before it expires.