OpenAI Product Feed for Magento 2 — module reference
OpenAI Product Feed builds the product feed that ChatGPT reads, so your catalog can be found inside ChatGPT. It writes one CSV file per store view, in line with the OpenAI Product Feed file-upload specification (Stable).
It covers every Magento product type: simple, virtual, downloadable, configurable, bundle and grouped.
What it does
- Writes the spec columns, such as
item_id,is_eligible_search,is_eligible_checkout,image_url,item_weight_unitandreturn_deadline_in_days. - Exports configurable products as a parent row plus one row per variant (
group_id,variant_dict,item_group_title). - Links grouped products through
related_product_idandrelationship_type. - Flags digital goods with
is_digital. - Keeps going when a product fails: the product is logged and skipped, the run does not stop.
- Loads stock and category data in batches, so large catalogs stay fast.
How product types are exported
| Type | Rows in the feed |
|---|---|
| Simple | One row |
| Virtual / downloadable | One row, is_digital=true, no weight |
| Configurable | A parent row (listing_has_variations=true) and one row per enabled child, with group_id, item_group_title and a JSON variant_dict |
| Grouped | One row at the lowest price; children in related_product_id with relationship_type=part_of_set |
| Bundle | One row: the “from” price for dynamic bundles, the fixed price otherwise |
Requirements
| Magento | 2.4.6+ (Open Source, Mage-OS or Adobe Commerce) — magento/framework >=103.0.6 <104 |
|---|---|
| PHP | 8.1 – 8.5 — ~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0 |
| Other packages | magento/module-inventory-sales-api >=1.2.3 <2 |
The feed reads stock from the Multi-Source Inventory index, so MSI must be installed. If a SKU is missing from the batch preload, the module falls back to Magento’s normal per-product APIs.
Installation
composer require angeo/module-openai-product-feed
bin/magento module:enable Angeo_OpenAiProductFeed
bin/magento setup:upgrade
bin/magento setup:di:compile # production mode only
bin/magento cache:flush
Setting it up
- Open Stores → Configuration → Angeo → OpenAi Feed.
- Under Seller, fill in the seller name, URL, privacy policy and terms of service. The spec requires the privacy policy and terms when checkout is enabled for a product.
- Under Return policy, set the return policy URL and the return window in days.
- On each product, open the OpenAI Configurations attribute group and set Enable Search and Enable Checkout.
Enable Search is exported as is_eligible_search. Enable Checkout is exported as is_eligible_checkout. If search is off, checkout is forced to false in the feed, as the spec requires.
Generating the feed
# All store views
bin/magento angeo:product-feed:generate
# Only some store views (the option can repeat)
bin/magento angeo:product-feed:generate --store=default --store=en_us
| Command | What it does |
|---|---|
bin/magento angeo:product-feed:generate |
The command prints progress per page and the total time. Output files are written to var/angeo/openai_feed/<store_code>.csv. Skipped products and a summary per store go to var/log/angeo_openai_feed.log.
On the reference benchmark (1,900 configurable products, 5 store views, about 10,300 rows per file), the batch loaders remove tens of thousands of per-product queries compared to 2.0.x.
Configuration reference
All settings are under Stores → Configuration → Angeo → OpenAi Feed. The table shows each field, its config path (for bin/magento config:set) and its default value.
Seller (4)
| Setting | Config path | Default |
|---|---|---|
| Seller Name | openai_feed/seller/name | Example Store |
| Seller Url | openai_feed/seller/url | https://example.com/store |
| Privacy Policy | openai_feed/seller/privacy_policy | https://example.com/privacy |
| Terms of service | openai_feed/seller/tos | https://example.com/terms |
Return policy (2)
| Setting | Config path | Default |
|---|---|---|
| Return Policy Url | openai_feed/return_policy/url | https://example.com/returns |
| Return Window | openai_feed/return_policy/return_window | 30 |
Cron
The feed is built daily at 02:00.
| Job | Cron group | Schedule |
|---|---|---|
angeo_generate_openai_feed | default | 0 2 * * * |
Upgrading from 1.x
2.0.0 is a breaking release. Feed columns were renamed to match the OpenAI specification, and ProductMapperInterface::map() now returns a list of rows. No data migration is needed: the enable_search and enable_checkout product attributes stay the same. Only the column names in the file change.
FAQ
Where is the feed file?
In var/angeo/openai_feed/<store_code>.csv, one file per store view. It is rebuilt daily at 02:00, or when you run the CLI command.
How do I hide a product from ChatGPT?
Set Enable Search to No on the product. It is then exported with is_eligible_search=false, and checkout is forced to false as well.
Does it handle configurable products?
Yes. You get a parent row and one row per enabled child, linked by group_id, with the variant options in variant_dict.
Do I also need the Feed API module?
Not to build the file. The OpenAI Product Feed API adds REST endpoints for incremental updates next to the daily file.
What happens when a product fails?
It is logged in var/log/angeo_openai_feed.log and skipped. The rest of the feed is still built.
Related
- OpenAI Product Feed API — ACP REST endpoints for feeds, products and promotions
- Rich Data — one linked JSON-LD graph per page, with offers and policies
- AEO Audit — score 20 AI-visibility signals from the command line
- All module reference pages · Compatibility matrix
This page was written from the README.md, composer.json and etc/*.xml files of tag 2.1.1, read on 16 October 2026. Settings, commands and defaults come straight from that code. If a newer release is out, the README on GitHub wins.