ChatGPT processes over 50 million shopping queries per day. Appearing in those results is not automatic for Magento stores — it requires a deliberate application process, a spec-compliant product feed, and passing OpenAI’s conformance checks.
This guide walks through the entire process: from the pre-check that determines if your store is ready, to the application, to the ongoing cron setup that keeps your feed current.
Shopify and Etsy merchants: have integrations, but visibility is not guaranteed. This guide is for Magento.
Before You Apply: The Pre-Check
OpenAI’s conformance checks verify technical requirements before granting production access. Stores that fail the pre-check go into a review queue and receive vague rejection emails. Do the pre-check yourself first.
bin/magento angeo:aeo:audit ✓ PASS robots.txt — OAI-SearchBot and GPTBot allowed ✓ PASS llms.txt — store content map present ✓ PASS Product Schema — JSON-LD with offers.availability ✗ FAIL AI Product Feed — no feed found
Signal #5 (AI Product Feed) will fail until the next step. Signals #1, #2, and #3 must all PASS before applying.
Step-by-Step Registration
Install the product feed modules
composer require angeo/module-openai-product-feed angeo/module-openai-product-feed-api
Then bin/magento setup:upgrade && bin/magento cache:flush
Configure seller information
Go to Stores → Configuration → Angeo → Product Feed API. Fill in: seller name, target country (ISO 3166 two-letter code, e.g. US), and policy page URLs — privacy policy, returns, shipping, terms. These populate seller.links on every product and are merchant credibility signals in OpenAI’s scoring.
Generate and verify the feed
Run bin/magento angeo:aeo:feed:generate to produce the .jsonl.gz feed file. Then spot-check the output:
bin/magento angeo:aeo:feed:validate
Confirm: each product has a variants array, prices are correct, availability.status is present, and seller.links has at least two policy URLs.
Verify promotions output
Active Magento cart price rules should appear automatically as ACP promotions with active_period, benefits, and status: "active". Run bin/magento angeo:aeo:feed:validate --type=promotions to confirm.
Apply at chatgpt.com/merchants
Submit your store URL and business details. OpenAI tests schema compliance, HTTP response codes, and feed integrity. Onboarding is currently US-only(availability may vary by region) and available to approved partners — you will be placed on a waitlist.
Receive SFTP endpoint and push the feed
After approval, OpenAI provides a private SFTP endpoint for your store. Push your .jsonl.gz feed file to this endpoint — do not host the feed publicly on your website. Submit a sample first; after it passes validation, push the full catalog.
Set up 15-minute cron for real-time updates
OpenAI accepts feed refreshes every 15 minutes. Full feed re-submission is required each time — there is currently no incremental update support. Stale availability data — out-of-stock products showing as available — is the most common reason products get suppressed after initial approval.
Feed Format: What OpenAI Actually Accepts
The original article’s feed example showed a JSON structure that resembled the Checkout API payload. The actual product feed format is different.
OpenAI accepts two formats for the product feed file:
| Format | Extension | Notes |
|---|---|---|
| JSON Lines | .jsonl.gz | Recommended. One product object per line. Handles nested variants cleanly. |
| CSV | .csv.gz | Works for flat catalogs. Variant structures need to be flattened. |
Note: TSV and XML were in OpenAI’s original spec announcement but have since been removed from the supported formats. Always check the official feed spec for the current list.
The feed is pushed to a private SFTP endpoint OpenAI provides after merchant approval. It is not a public REST endpoint you expose on your store. This is a key difference from how the original article presented it.
The Price Format: Minor Units vs Decimal
The single most common implementation error across all ACP integrations. Price must be sent in ISO 4217 minor units as an integer — €14.99 = 1499, $149.00 = 14900. Sending 14.99 as a float fails schema validation with a non-obvious error message.
The module handles this automatically: (int) round($price * 100). But if you are building a custom integration or mapping from a Google Shopping feed, this is the field to double-check first.
What OpenAI’s Conformance Check Validates
| Check | What it verifies | Module that handles it |
|---|---|---|
| Feed schema | Required fields present, correct data types, valid URIs | ProductMapper |
| Price format | Integer minor units, ISO 4217 currency code | ProductMapper |
| Availability flags | enable_search and availability.status present | ProductMapper |
| Promotion schema | benefits array with type, dates, status field | PromotionMapper |
| Seller links | At least 2 policy URLs present | Admin config → seller.links |
| Product IDs | Unique, stable, no duplicates across the feed | ProductMapper |
No Fees for Discovery
Product discovery results in ChatGPT are currently organic and unsponsored. There is no cost to submit a product feed or appear in shopping results. The 4% transaction fee that was announced with Instant Checkout applied only to completed in-chat purchases — and OpenAI is now moving away from that model toward merchant-owned checkout experiences. As of April 2026, there are no fees on purchases that start in ChatGPT.
After approval: ChatGPT merchant status does not guarantee immediate product appearances. The feed needs to be indexed, which typically takes 48–72 hours after approval. Products with complete Product JSON-LD schema, high availability accuracy, rich descriptions, and active promotions appear first.
Checklist Before Submitting
bin/magento angeo:aeo:audit— robots.txt, llms.txt, Product schema all PASS- Feed generates without errors and produces valid
.jsonl.gz - Each product has
variants, correct prices in minor units,availability.status - Seller information complete: name, country, at least 2 policy URLs
- Active promotions appear in promotions output with
status: "active" - 15-minute cron configured for post-approval updates
From zero to ChatGPT Shopping in 90 minutes. All modules free, MIT licensed.
0 Comments