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

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

Onboarding is currently for approved partners. OpenAI supports full file snapshots and API updates, and its stable schema has changed since this guide was first published.

TL;DR — ChatGPT product-feed onboarding is currently available to approved partners. OpenAI documents two integration methods: file upload through SFTP and API-based delivery. Its general recommendation is a complete file snapshot at least daily plus API updates during the day. The current stable discovery schema has nine required product fields. KaliCart Bridge 1.0.138, released on 27 September, aligns its JSONL generator and validator with that schema; delivery access and final acceptance remain OpenAI decisions.

Updated 27 September 2026. The original July version described JSONL as the only format, treated several optional fields as required, said omitted products disappeared immediately and predated WooCommerce's native MCP developer preview. On 26 September those claims were corrected against the current OpenAI and WooCommerce documentation. On 27 September Bridge 1.0.138 aligned Bridge's generator and validator with the current stable product schema and revalidated the real 95-row Project2209 feed.

1. The model: push, not pull

This is an onboarding and delivery integration, not ordinary web crawling. The documented pipeline is:

  1. Prepare product records against the current stable product schema, with one row per purchasable item or variant.
  2. Apply through OpenAI's merchant onboarding. Product-feed onboarding is currently limited to approved partners, and approval attaches to the integration rather than to the plugin that generated a draft.
  3. Choose the approved delivery method: a full snapshot uploaded to OpenAI's SFTP service, or the product-feed API. OpenAI recommends starting validation with a sample of about 100 items.
  4. Keep it current: OpenAI generally recommends a complete file snapshot at least daily and API updates during the day. Reuse stable filenames for SFTP snapshots.
  5. Remove deliberately: set is_eligible_search=false for prompt removal on the next processing pass. Omission from later snapshots can take up to 14 days to expire.

A download URL exposed by your own tooling remains useful for inspection, but it is not the documented delivery integration. Bridge does not submit the application, upload to SFTP or call the OpenAI product-feed API automatically.

2. What the spec actually requires

For file upload, OpenAI currently prefers Parquet and also accepts jsonl.gz, csv.gz and tsv.gz. Bridge prepares jsonl.gz. The stable OpenAI-format schema requires nine basic fields; other fields are optional or conditional:

FieldRuleReal-world gotcha
item_id, title, description, urlRequiredKeep the item identifier stable and use the actual purchasable product or variant URL
brand, seller_nameRequiredUse real merchant data, never placeholders or a guessed brand
image_urlRequired public URLThe image must represent the item or selected variant
price, availabilityRequiredUse major currency units and the documented availability enum
group_id, listing_has_variations, variant_dictConditional for variantsEach purchasable selection gets its own row and item ID
additional_image_urlsOptional array in JSONLThe comma-separated representation belongs to CSV/TSV cells, not JSONL
gtinOptionalIf supplied, it must be exactly 8, 12, 13 or 14 digits with a valid check digit
seller_url, returns and market fieldsOptional or setup-dependentCountry columns alone do not enable a market; confirm the integration setup with OpenAI

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

These are historical July 2026 generation results, useful as catalog-quality measurements but not evidence of conformance to today's stable schema. The generator writes atomically, so a failed run does not destroy the previous snapshot:

5. Discovery-first: the checkout stays yours

The product-feed schema treats discovery and checkout as separate scopes. Every discovery row points to the merchant's product URL; checkout requires a separately enabled integration, and setting is_eligible_checkout alone does not complete that onboarding. A clean discovery feed therefore does not transfer catalog authority or checkout control away from WooCommerce.

6. The honest disclaimers nobody writes

7. What you can do today

WooCommerce now includes native MCP support in developer preview. That is an authenticated surface for WooCommerce operations, not an OpenAI product-feed delivery path. KaliCart Bridge continues to expose a separate public, read-only catalog surface and a feed-readiness workflow.

Bridge 1.0.138 (released 27 September): the optional JSONL generator and bundled validator now follow the current stable schema. Products without a merchant-declared brand or configured own-label fallback are excluded, counted and listed; additional images are emitted as a list; optional store-policy fields no longer block generation; GTINs, prices, ratings and variant options are validated against the documented contract. Approved partners should still validate the exact deliverable and use the SFTP or API method enabled for their integration.

The one-line takeaway: treat this as an approved integration and data-quality process: verify the current schema, fix the source data, validate the exact deliverable, and keep it fresh.

Current primary sources

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