A Google Shopping XML feed has to be converted before OpenAI can read it: OpenAI’s file upload overview lists parquet, jsonl.gz, csv.gz and tsv.gz, and XML is not on the list. OpenAI gives some fields its own names (link to url, image_link to image_url; id and item_group_id are still accepted for item_id and group_id), requires one field Google’s specification does not have (seller_name), and spells one availability value differently (pre_order). The values themselves carry over.
Google Shopping feed vs ChatGPT feed: the four differences
1. The container. Google’s specification names a text data source, an XML data source or the API. OpenAI’s file upload overview prefers parquet and also lists jsonl.gz, csv.gz and tsv.gz; its product feed page for ChatGPT Ads uses a UTF-8 CSV. Neither page mentions XML, so a Google XML feed has to be re-serialised, not just re-labelled.
2. The field names. Some fields keep their meaning and change their name (the table below). Others keep both name and meaning, among them title and description; Google’s limits for these two are 150 and 5,000 characters, and OpenAI asks to aim for at most 150 and 5,000.
3. The one new required field. seller_name, the name of the seller supplying the offer, is required on every row. Google’s external_seller_id identifies a seller only in a multi-seller account, where it is required. OpenAI asks for a real seller name, not a placeholder.
4. One spelling. Availability values match (in_stock, out_of_stock, backorder) except that Google’s preorder is OpenAI’s pre_order, and OpenAI adds unknown. A converter that copies the column untouched fails on the first preorder product.
The field map
| Google Shopping | OpenAI | Note |
|---|---|---|
id | item_id | Same rule: stable and unique per variant. OpenAI also accepts id. |
title | title | Google’s limit is 150; OpenAI asks to aim for at most 150. |
description | description | Google’s limit is 5,000; OpenAI asks to aim for at most 5,000. |
link | url | Renamed. |
image_link | image_url | Renamed; OpenAI names JPEG or PNG. |
additional_image_link | additional_image_urls | Renamed; an array in JSONL, comma-separated in CSV. |
brand | brand | Required by OpenAI for every row. |
— | seller_name | New. Required. A real seller name, not a placeholder. |
availability | availability | preorder becomes pre_order; unknown is added; the rest match. |
price | price | Same “amount CURRENCY” shape. |
sale_price | sale_price | Same idea; update when a sale starts or ends. |
item_group_id | group_id | Renamed (item_group_id is also accepted), plus listing_has_variations and variant_dict on the rows. |
color / size | color / size, variant_dict | Same names; for variants, also in variant_dict, keyed by option name. |
— | is_eligible_search / is_eligible_checkout / is_ads_eligible | New. Flags for where the product may appear. |
What to convert and what to add
To convert, rename the columns, re-serialise the file into one of the formats OpenAI lists, translate preorder, and put colour and size into variant_dict, with the same group_id, and listing_has_variations set to true, on every variant row. Adding is the part that needs a decision: seller_name for every row, and the eligibility flags, which say whether each product may appear in search, be bought inside ChatGPT (only with the checkout integration enabled) and be used in ads. A feed with everything converted and no flags set is eligible for search; checkout stays off until its flag is set, and ads unless the feed has an Ads default configured.
The defects carry over too. A Google feed with missing images, placeholder brands or ungrouped variants converts into an OpenAI feed with the same problems under new names, so run the free feed check on the Google feed first and fix the source; both files inherit the fix. FeedRobin renders the OpenAI JSONL and the Google XML from one catalogue, with the renaming, the availability spelling, seller_name and the variant fields handled in the renderer rather than in a spreadsheet.
Questions merchants ask
Can I upload my Google XML to OpenAI and let it convert?
No. OpenAI’s file upload overview lists parquet and gzip-compressed JSONL, CSV and TSV, and its product feed page for ChatGPT Ads uses a UTF-8 CSV; neither page mentions XML. Some fields take OpenAI’s names; id and item_group_id are still accepted for item_id and group_id. A converter, a feed tool or a spreadsheet does the renaming; the values mostly survive unchanged.
Which availability value differs in the conversion?
preorder. Google writes preorder as one word; OpenAI writes pre_order, and adds unknown. The other values match. OpenAI rejects a row with an unrecognised availability value, so a feed converted by renaming columns needs preorder translated.
Do I have to give OpenAI a seller_name if my brand is my store?
Yes; the field is required on every row. OpenAI asks for a real seller name, not a placeholder.
Does Google’s Merchant Center approval carry over to ChatGPT?
No. The two programmes are independent: OpenAI has its own application and its own validation of the file.
Sources
OpenAI’s file upload overview, products feed specification and product feeds for ChatGPT Ads; Google’s product data specification and availability attribute page.