2026-07-03 · Save The Brain / KaliCart · field guide

How to get your WooCommerce products into ChatGPT: the actual process

OpenAI never fetches a URL from your site. The application is per-merchant, not per-plugin. Brand and image decide what ships. Here is the whole pipeline, from someone who read the spec and ran it on real catalogs.

TL;DR — ChatGPT product visibility runs on a push model: you generate a spec-conformant feed file, apply at chatgpt.com/merchants, and after approval OpenAI assigns you a private delivery channel (SFTP or API) where you upload the file. There is no URL to submit, no crawler to wait for. The two fields that decide what ships are brand and the primary image. We built the generation-and-validation half as an open-source plugin and ran it on real catalogs — numbers below.

1. The model: push, not pull

The single most common misconception: that OpenAI will crawl a feed URL on your site. It won't. The pipeline is:

  1. Generate a complete snapshot of your catalog in the OpenAI Product Feed format — one JSONL row per product or variant, validated field by field.
  2. Apply at chatgpt.com/merchants — store URL, business contact, product categories, order volume. This is a per-merchant application: approval attaches to the store, not to whatever software generated the file.
  3. After approval, OpenAI assigns your delivery channel — typically SFTP credentials to their endpoint (an API path also exists). You push the file there. During onboarding they validate a sample (~100 products) before the full catalog goes live.
  4. Refresh: a full snapshot at least daily, same filename every time; the system accepts uploads as frequent as every 15 minutes for fast-moving inventory. Because every upload is a complete snapshot, products removed from your catalog disappear from discovery automatically.

Your feed URL — if your tooling exposes one — is a convenience for you to download and inspect the file. It is not the delivery channel.

2. What the spec actually requires

The format is JSONL (one JSON object per line), UTF-8, gzip-compressed for delivery. The fields that trip people up in practice:

FieldRuleReal-world gotcha
item_idRequired, ≤100 chars, stable and uniqueDerive it from the product ID (wc-123), never from mutable data like SKUs that get edited
brandRequired by the spec, ≤70 charsThe #1 blocker on real stores — see section 3
image_urlRequired, HTTPSProducts without a featured image cannot ship a usable row; visual shopping needs the picture
additional_image_urlsComma-separated stringA string, not a JSON array — an easy validator failure
gtin8–14 digits when presentMalformed barcodes are better omitted than shipped
price, availabilityRequiredSale prices are separate fields; availability is an enum, not free text
seller_name, seller_url, return_policy, store_country, target_countriesRequired merchant-level contextseller_name ≤70 chars; target countries should mirror where you actually sell
VariantsOne row per purchasable variantA 300-product fashion catalog is often a 1,000+ row feed once sizes and colors expand

3. Brand: the field that decides your feed size

On paper, brand is just another required field. On real WooCommerce stores it is the gatekeeper, because most Woo stores have never filled a brand taxonomy — the data lives in product titles ("Wolford Velvet 66…") and in category names, not in a machine-readable field. Shopify sidesteps this structurally: its product model has a vendor field that defaults to the store name, so every Shopify product has something in that slot by construction.

What we learned running this on a real multi-brand catalog (~1,100 SKUs, luxury lingerie and beachwear):

4. Numbers from real generations

What the validator reports on actual catalogs (our plugin validates every row against the spec before it enters the file, and regenerates atomically — the previous good snapshot is never destroyed by a failed run):

5. Discovery-first: the checkout stays yours

OpenAI's commerce strategy has shifted away from in-chat instant checkout toward discovery-first: your products appear in ChatGPT's shopping answers, and the buyer clicks through to your product page and buys on your store. You remain the merchant of record; there is no transaction fee to OpenAI for this tier. Ranking is stated to be by relevance — data quality, not ad spend. (It also means the quality of your titles, descriptions and structured fields is your ranking lever.)

6. The honest disclaimers nobody writes

7. What you can do today

WooCommerce has announced native ACP/UCP/MCP integrations are being built, with no ship date yet. Until then, the pipeline above is available now: KaliCart Bridge (open source, on WordPress.org) generates and validates the feed, shows you exactly which products are excluded and why — with one-click access to a pre-filtered product list and a CSV export for bulk fixing — and prepares the file you will deliver once your application is approved. The application itself, and the decision, remain between you and OpenAI, as they should.

The one-line takeaway: getting into ChatGPT is not a growth hack — it is a data-quality exercise with a well-defined spec. Read the spec, fix brand and images, generate, apply, and keep the snapshot fresh.

Related — Why structured data wins: We ran blind AI agents against real WooCommerce stores — one HTTP header flipped the outcome from failure to 3/3.

← All posts