OpenAI product feeds versus Google Merchant Center feeds
- OpenAI feeds are created with POST /feeds and filled by SFTP (host sftp.commerce.openai.com, port 443) or a hosted URL set up in Ads Manager; there is no endpoint that creates items directly.
- OpenAI's product set filters accept brand, product_category, item_id, offer_id, price, title, body, target_url, image_url, seller_name, condition, age_group, star_rating and ads_metadata.<key>; category, product_id, gtin, mpn and sku are refused.
- Google Merchant Center accepts tab-delimited text or XML files up to 4 GB, submitted by one-time upload, a fetched URL (http, https or sftp), Google Sheets or the Merchant API.
- Google's required fields include id (up to 50 characters), title (up to 150), description (up to 5,000), link, image_link (at least 500 x 500 px from 31 January 2027), availability and a price with an ISO 4217 currency code.
- Google shut down the Content API for Shopping on 18 August 2026; the Merchant API is now the programmatic path.
- The two feeds use different schemas: a Merchant Center or Channable file has to be mapped to OpenAI's Agentic Commerce product file format, not just re-uploaded.
A shop that already runs Google Shopping usually assumes its product feed is reusable everywhere. It is, as a source of truth, but not as a file: OpenAI's Ads API and Google Merchant Center define different schemas, accept files in different ways, and expose different filtering fields once a feed is live. This guide sets out what each platform actually requires, verified against OpenAI's own documentation and live API testing, and against Google's Merchant Center Help, and then covers the practical case of reusing an existing Merchant Center or Channable feed as the source for OpenAI.
- Treat the two feeds as different files with a shared source, not the same file uploaded twice.
- Map field names before uploading to OpenAI: its filters use product_category and item_id, not Google's category, product_id, gtin, mpn or sku.
- OpenAI items only arrive by SFTP, a hosted URL, or a manual upload set up in Ads Manager; there is no endpoint that creates an item from scratch.
- Google's Content API for Shopping is retired; anything still calling it needs to move to the Merchant API.
- If a Merchant Center or Channable feed already exists, generate the OpenAI file from it on a schedule rather than maintaining a second catalogue by hand.
What does an OpenAI product feed look like?
An OpenAI product feed follows the Agentic Commerce product file schema that OpenAI publishes for commerce. A feed object is created with POST /feeds, taking a name and a list of countries; the feed starts empty. Items then arrive by SFTP, with a password or an SSH key, to sftp.commerce.openai.com on port 443, not the usual port 22, or by a hosted URL an advertiser sets up in Ads Manager, or by a manual CSV or TXT upload there. There is no endpoint that creates a product item directly: PATCH /feeds/{id}/products only changes the title, price and availability of items that already exist.
Once a file is uploaded, it goes through scanning, then processing, then completed, visible through GET /feeds/uploads; in one observed test a 12-item file took about six and a half minutes end to end. A product that drops out of a later, successfully processed upload is not deleted immediately: it stays live for up to 14 days and then expires on its own, so mark an item out of stock in the file if you want it to stop serving sooner. Titles, including the variant, should stay within 150 characters.
How do product sets and filters work on OpenAI's feeds?
A product ad group targets a product set, a subset of the feed defined by filters on brand, product_category, item_id, offer_id, price, title, body, target_url, image_url, seller_name, condition, age_group, star_rating and any ads_metadata.<key> custom label. Text fields accept in, not_in, contains, not_contains and starts_with; numeric fields accept in, gt, gte, lt and lte. Matching on text is case-insensitive and trims surrounding spaces; product_category matches the exact path you give it, so filtering the parent category does not automatically include its children.
Several field names a Google feed uses every day are refused outright on OpenAI's filters, confirmed by live testing: category, product_id, gtin, mpn, sku, availability, sale_price and description all return a 400 error naming the field unsupported. The working equivalents are product_category for a category path and item_id or offer_id for a product identifier. This is the single most common mistake in reusing a Google-shaped feed: the file can be technically valid and still fail to filter the way you expect, because the field name it is filtered on does not exist under that name on OpenAI's side.
What does a Google Merchant Center feed require?
Google Merchant Center accepts a product file as tab-delimited text (.txt or .tsv) or XML (such as RSS 2.0 or Atom 1.0), optionally compressed as .gz, .zip or .bz2, up to 4 GB per file. Required attributes include id (up to 50 characters, unique per product), title (up to 150 characters), description (up to 5,000 characters), link, image_link (at least 500 by 500 pixels, enforced from 31 January 2027), availability (in_stock, out_of_stock, preorder or backorder) and price, formatted as a number with an ISO 4217 currency code, for example "15.00 USD".
brand (up to 70 characters) is required for most new products, and mpn is required when a product has no manufacturer-assigned gtin; condition is required only for used or refurbished items. Pricing rules differ by market: for the United States and Canada, price excludes tax; for most other countries, it includes VAT or GST. None of this is documented by OpenAI, because it governs Google Ads and free listings, a separate product from OpenAI's Ads API.
| OpenAI product feed | Google Merchant Center feed | |
|---|---|---|
| Schema | Agentic Commerce product file | Google's product data specification |
| File formats | CSV or TXT for upload; SFTP for automated delivery | Tab-delimited text, XML, or compressed .gz/.zip/.bz2 |
| Size limit | Not stated by OpenAI | 4 GB per file |
| Submission | SFTP, hosted URL, or manual upload in Ads Manager | One-time upload, fetched URL (http, https or sftp), Google Sheets, or the Merchant API |
| Item updates | PATCH changes title, price and availability only | Re-submit the file or update via the Merchant API |
| Category field | product_category (exact path, case-insensitive) | google_product_category and product_type |
| Identifier fields | item_id, offer_id | id, plus gtin or mpn |
How do you submit a feed to each platform?
On OpenAI, a feed is registered through the API and then filled by SFTP, which is the automated path, or by a hosted URL or manual file that Ads Manager fetches or accepts; GET /feeds lists existing feeds and GET /feeds/uploads shows upload history, although a feed's product count can lag behind a completed upload. On Google, a file can be uploaded once, fetched on a schedule from a URL you host over http, https or sftp, linked from a Google Sheet, or pushed through the Merchant API for accounts managing feeds programmatically.
The two platforms also differ in how the older programmatic path was retired. Google shut down the Content API for Shopping, the predecessor to the Merchant API, on 18 August 2026; any script or integration still calling it needs to move to the Merchant API.
Are the two feeds interchangeable?
No, not as a single file. Both describe a product catalogue, but the field names, the identifier scheme and the filtering vocabulary differ enough that a file built for one will not filter correctly, and may not even upload cleanly, on the other. A shop's actual product data, titles, images, prices, stock and categories, is the reusable part; the file format around it is not.
The practical approach is to keep one source of truth, typically the shop's own catalogue or an existing Merchant Center or Channable feed, and generate each platform's file from it. Clean titles, images and identifiers maintained for Google Shopping genuinely help OpenAI's side too, since the same fields supply the product ad template and the product set filters; the benefit is in the underlying data quality, not in the file itself being portable.
How does a shop reuse its Merchant Center or Channable feed?
Adsonomy builds the OpenAI-format file from a connected shop, or from an existing product feed URL in Google Shopping or Channable format, then delivers it to OpenAI over SFTP or a hosted feed URL it publishes at a private, signed HTTPS address that the customer pastes into Ads Manager once. Price and stock changes flow into that file on a schedule, so a promotion shows the promotional price in the ad without a manual re-export, and the field mapping described above, category and identifier names in particular, is handled once rather than on every catalogue change.
This is the same connection path covered for shop platforms directly in OpenAI Ads for Shopify, WooCommerce and BigCommerce: whether the source is the shop itself or an existing Merchant Center or Channable feed, the destination is the same OpenAI feed object, filled the same way, and the product ads it powers work exactly as described in how ads in ChatGPT work.
Frequently asked questions
Can I point OpenAI straight at my Google Merchant Center feed URL?
Not as-is. OpenAI expects the Agentic Commerce product file schema, a different set of field names to Google's, so a Merchant Center or Channable file has to be transformed first. Once transformed, OpenAI's hosted URL delivery method, set up in Ads Manager, works the same way as pointing at any other HTTPS address.
Does my Merchant Center GTIN or MPN data carry over to OpenAI?
Not directly for targeting. Live testing of OpenAI's product set filters found that gtin, mpn and sku are refused as filter field names, with a 400 error naming them unsupported; the accepted identifiers for filtering are item_id and offer_id. Whatever your feed calls a product, map it to those two fields for any ad group that filters by product identity.
Which feed updates faster, OpenAI's or Google's?
There is no single answer, since each has its own pipeline and OpenAI does not document a processing time. In one observed OpenAI test upload, a 12-item file went from upload to queryable in about six and a half minutes. Google Merchant Center's own refresh cadence depends on the schedule you set for a fetched feed or on how often you call the Merchant API.
What happens if an item disappears from my OpenAI feed?
A product missing from a processed upload is kept live for up to 14 days and then expires on its own. To stop it serving sooner, mark it out of stock in the next upload rather than waiting for it to drop out and expire.
Is the Content API for Shopping shutdown relevant to my OpenAI feed?
Not directly: Content API for Shopping is a Google product, unrelated to OpenAI's Ads API. But if your own tooling still calls the Content API to manage a Google feed, note that Google shut it down on 18 August 2026 in favour of the Merchant API, so that side of your stack needs the newer API regardless of what you do with OpenAI.
Adsonomy runs ads inside ChatGPT for shops and service businesses. Control edition: you run it with rules. Autopilot: the AI manager runs it inside your guardrails. Launching 1 October 2026.
Join the waitlist