Channel comparison
Pinterest vs OpenAI: feed requirements compared
Pinterest and OpenAI are the two channels least like the Google baseline, in opposite directions. Pinterest asks for less than anyone and wants a separate feed per market; OpenAI asks for a different shape entirely, requires brand and seller_name, and takes delivery by SFTP push.
Where the two specifications diverge
The 5 attributes one channel treats differently from the other. Everything else is identical and is listed further down.
| Attribute | OpenAI | What that means | |
|---|---|---|---|
| brand | Optional | Required | Stricter on OpenAI. |
| id | Required id | Required item_id | The field is named differently on each channel. |
| image_link | Required image_link | Required image_url | The field is named differently on each channel. |
| item_group_id | Optional item_group_id | Optional group_id | The field is named differently on each channel. |
| link | Required link | Required url | The field is named differently on each channel. |
Differences a table cannot show
Requirement levels are the easy part. These are the differences in values, structure and delivery that break a feed copied from one channel to the other.
OpenAI requires what Pinterest made optional
Brand is optional on Pinterest and required on OpenAI. A catalogue fed only to Pinterest has never had to have complete brand data, so this is usually the largest piece of real work in the migration, and it is data work rather than mapping work.
Four core fields change name
id becomes item_id, link becomes url, image_link becomes image_url and item_group_id becomes group_id. OpenAI also takes product_category and ads_metadata, neither of which exists in a Pinterest feed at all.
Delivery and cadence are unrelated
Pinterest fetches one feed per market once every 24 hours at a time you choose. OpenAI expects full snapshots pushed to an SFTP endpoint at least daily, retained for up to 14 days. One is a pull you schedule, the other is a push you monitor.
Price formatting differs
Pinterest follows the amount-plus-currency convention of the Google-derived specifications. OpenAI wants a decimal amount, a space and an uppercase ISO 4217 code in a single string, which has to be assembled at generation time from the two values Shopify holds separately.
Market structure inverts
Pinterest wants a separate data source per country and language pair, so a multi-market store maintains several feeds. OpenAI expects a full catalogue snapshot. The pipeline shape you built for one is the wrong shape for the other.
Variants are described rather than grouped
Pinterest treats item_group_id as optional and does little with it. OpenAI wants group_id, a listing_has_variations flag and a variant_dict mapping option names to values, so variants have to be described rather than merely tied together.
Reusing one feed for the other channel
What actually has to change, in the order it is worth doing.
-
Audit brand coverage before anything else
Count the products with no usable brand value. Pinterest never forced the question, OpenAI will, and filling brand properly is data entry rather than configuration, so it sets the timeline.
-
Build the snapshot and the push
OpenAI wants the whole catalogue in one file pushed to its SFTP endpoint, not a per-market feed pulled from your server. Build that pipeline separately rather than adapting the Pinterest one.
-
Rename the four shared fields and add the two new ones
Map item_id, url, image_url and group_id from what you already produce, then add product_category and seller_name, neither of which exists in a Pinterest feed.
-
Assemble the price string
Join the decimal amount and the uppercase ISO currency code with a space, and do the same for sale prices. Pinterest never needed this, so there is no existing rule to extend.
-
Describe the variants
Set group_id from the Shopify product id, flag products with more than one variant, and build variant_dict from the option names and values. On Pinterest this relationship was optional and probably unmapped.
-
Keep the Pinterest image choice for Pinterest
If you mapped a portrait image to suit Pinterest, do not carry that decision across. OpenAI has no preference for vertical crops, so send the primary product image and keep the channel-specific choice where it belongs.
Every attribute, side by side
All 16 attributes documented in this knowledge base, as Pinterest and OpenAI each treat them.
| Attribute | OpenAI | |
|---|---|---|
| availability | Required availability | Required availability |
| brand | Optional brand | Required brand |
| condition | Optional condition | Optional condition |
| custom_label_0 | Not documented here — | Optional ads_metadata |
| description | Required description | Required description |
| google_product_category | Not documented here — | Optional product_category |
| gtin | Optional gtin | Optional gtin |
| id | Required id | Required item_id |
| identifier_exists | Not documented here — | Not supported — |
| image_link | Required image_link | Required image_url |
| item_group_id | Optional item_group_id | Optional group_id |
| link | Required link | Required url |
| mpn | Optional mpn | Optional mpn |
| price | Required price | Required price |
| sale_price | Optional sale_price | Optional sale_price |
| title | Required title | Required title |
Frequently asked questions
Can I build an OpenAI feed from my Pinterest feed?
It is the weakest starting point of any channel here. Pinterest treats brand and the identifiers as optional, OpenAI requires brand, and the field names, price format, variant structure and delivery all differ.
What does OpenAI need that Pinterest does not?
Brand on every item, seller_name as a store-level value, a price string with the currency code inside it, product_category, and a variant structure built from group_id, listing_has_variations and variant_dict.
Do both channels need one feed per market?
No, and this is one of the sharper differences. Pinterest wants a separate data source for each country and language pair, while OpenAI expects a full catalogue snapshot pushed as one file.
Which of the two keeps a catalogue more current?
Neither is fast. Pinterest fetches once every 24 hours at a time you pick; OpenAI expects a push at least daily and retains the last processed snapshot for up to 14 days. Both are structurally a day behind at worst.
Both specifications in full
- Pinterest Pinterest turns an uploaded product feed into Product Pins, which are shoppable pins that carry live price and availability from the catalogue. Its feed specification borrows Google's attribute names, and its distinguishing requirement is that every item needs a genuinely usable image, because the image is the entire unit of discovery on Pinterest.
- OpenAI OpenAI ingests a merchant product feed so ChatGPT can surface products in shopping answers and complete purchases through Instant Checkout. It is the one major channel that does not fetch a feed URL you host: you push full catalogue snapshots to an OpenAI SFTP endpoint, and the most recently processed snapshot is retained for up to 14 days.
Errors on either channel
- Missing value: brand The "Missing value: brand" issue means a channel expects a brand name for a product and the feed did not supply one, or supplied a placeholder it treats as empty. On Shopify it usually means the vendor field is blank, or holds a supplier or internal category rather than the brand a shopper would recognise.
- Image link cannot be crawled An image crawl failure means the channel could not retrieve the file at image_link, or retrieved it and judged it unusable. On Shopify the URL itself is rarely wrong, so the cause is usually a rate limit hit during a first full crawl, a temporary CDN response, or an image whose content breaks policy rather than one that is genuinely missing.
Related concepts
- Variant-level feed A variant-level feed emits one row for each purchasable variant rather than one row per product, because sales channels treat every size, colour and material as a separately buyable item with its own price, stock and barcode. A Shopify product with four sizes in three colours is one product in the admin and twelve items to a channel.
- Feed scheduling Feed scheduling is the arrangement where a sales channel fetches a feed from a fixed URL on a repeating timetable instead of the merchant uploading a file. It matters because the interval between regenerations is the window in which a channel can be wrong about a price or a stock level, and most mismatch disapprovals are caused by that window being too wide rather than by a bad mapping.
- Product feed A product feed is a structured file listing every item a shop sells, with one row per purchasable item and one column per attribute the destination understands. Sales channels use it to build their own copy of a catalogue, which is why a feed is a translation of a shop's data into another system's schema rather than an export of it.
Primary sources
Channel specifications change. These are the official documents this page is based on.