The short answer
A product feed specification defines the fields and formats a destination expects. Shopify source fields, Google feed fields, and OpenAI’s native discovery fields need an explicit mapping. This reference compares 20 concepts, with examples, failure cases, and a downloadable JSON edition.
Download the 20-field mapping reference
Use the JSON reference alongside the field-by-field comparisons below. It contains twenty entries, source notes, examples, and review decisions. The mapping edition was checked on September 13, 2026; confirm current destination requirements before using it for an upload.
Begin with the selected item, its parent group, price, availability, and landing page. The example fragments show individual decisions; they are not complete upload-ready product records.
Download the 20-field reference (JSON)Choose the destination path first
This edition compares selected Google feed fields and Shopify source locations with OpenAI’s Stable native discovery file-upload fields. It does not describe the complete Google-compatible OpenAI path, the Draft schema, checkout, or advertising eligibility. The comparison was checked on September 13, 2026.
OpenAI also documents a separately confirmed Google-compatible upload path. Its accepted formats and behavior are its own contract. A statement about that path cannot be applied to native JSONL by changing a filename.
Each example below is a small illustrative fragment. It is not a complete, upload-ready product record. The candidate shows a useful representation; source truth, other required fields, and account eligibility still need review.
Where do I find my Shopify product feed URL?
First identify how your products reach the destination. Shopify’s Google & YouTube channel syncs products with Merchant Center. A connected channel and a hosted file are different delivery methods; do not assume a store address is the feed URL.
For a file-based Merchant Center data source, open that source’s settings and inspect Scheduled updates. Google requires the URL to point directly to a supported product data file. Use the actual export URL supplied by the system producing that file, rather than guessing a path on your storefront.
Once you have identified the delivery method, review the destination fields below. Finding a working URL does not establish that the product data is complete, current, or eligible.
Source: Shopify: Set up the Google & YouTube channel; Google Merchant Center: Scheduled product data updates
Item identity
Use an immutable string for the sellable selection. Check uniqueness before choosing a SKU as the identifier; a parent record cannot identify every child.
Numeric conversion may erase leading zeros; do not reconstruct a lost identifier by guessing.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Variant ID or verified unique SKU |
| Google feed | id |
| OpenAI Stable native | item_id |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"item_id": "DEMO-MUG-BLUE"
},
"counterexample": {
"item_id": 12345
}
}Source: Google Merchant Center: Product ID; Shopify Admin API 2026-07: ProductVariant; OpenAI: Stable product file-upload specification
Title
Name the selection the visitor will receive. Assemble the title from supported facts and inspect the result after truncation.
A syntactically valid title can identify the wrong color. Compare it with the actual selected variant.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Product title + selected options |
| Google feed | title |
| OpenAI Stable native | title |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"title": "Demo ceramic mug — blue, 350 mL"
},
"counterexample": {
"title": "Demo mug — red"
}
}Source: Google Merchant Center: Product data specification; Shopify Admin API 2026-07: Product; OpenAI: Stable product file-upload specification
Description
Convert markup to readable text while retaining meaningful separations. Check claims against source facts instead of letting a cleanup step add benefits.
A claim without supporting evidence needs review even when it fits the destination field.
| Context | Field or source |
|---|---|
| Shopify source to inspect | descriptionHtml or reviewed plain description |
| Google feed | description |
| OpenAI Stable native | description |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"description": "Blue ceramic mug with a handle."
},
"counterexample": {
"description": "Guaranteed unbreakable mug."
}
}Source: Google Merchant Center: Product data specification; Shopify Admin API 2026-07: Product; OpenAI: Stable product file-upload specification
Product URL
Check the page in the intended market and selected option. A public parent URL is insufficient evidence that the correct item is selected.
The URL can resolve successfully while landing on the wrong offer.
| Context | Field or source |
|---|---|
| Shopify source to inspect | onlineStoreUrl + verified variant selection |
| Google feed | link |
| OpenAI Stable native | url |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"url": "https://example.com/mug?color=blue"
},
"counterexample": {
"url": "https://example.com/mug?color=red"
}
}Source: Google Merchant Center: Item group ID; Shopify Admin API 2026-07: Product; OpenAI: Stable product file-upload specification
Main image
Choose an image tied to the selection, then confirm the depicted finish and size where visible. Keep image identity separate from URL syntax.
Image review needs the asset itself. A filename is only a clue, not visual proof.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Variant-associated media |
| Google feed | image_link |
| OpenAI Stable native | image_url |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"image_url": "https://example.com/images/mug-blue.jpg"
},
"counterexample": {
"image_url": "https://example.com/images/mug-red.jpg"
}
}Source: Google Merchant Center: Product data specification; Shopify Admin API 2026-07: ProductVariant; OpenAI: Stable product file-upload specification
Brand
Confirm that the source vendor value is actually the product brand. In a reseller catalog, seller and brand can be different organizations.
Resolve the brand from approved product evidence; an invented placeholder is not a repair.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Verified brand; inspect product.vendor |
| Google feed | brand |
| OpenAI Stable native | brand |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"brand": "Example Workshop"
},
"counterexample": {
"brand": "Unknown"
}
}Source: Google Merchant Center: Product data specification; Shopify Admin API 2026-07: Product; OpenAI: Stable product file-upload specification
Seller
Attach the organization selling this offer. A Google-style row alone may not carry the seller information needed by a different integration.
Require an explicit trusted source for seller identity. Do not copy brand merely because a required cell is empty.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Verified seller identity for this offer |
| Google feed | Merchant/account context; no equivalent generic field assumed |
| OpenAI Stable native | seller_name |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"seller_name": "Example Retailer"
},
"counterexample": {
"seller_name": ""
}
}Source: OpenAI: Stable product file-upload specification; Google Merchant Center: Product data specification
Regular price
Keep amount, currency, market, and extraction time together. Compare the payable amount with page evidence for the same selection.
Both strings can parse. Only evidence establishes whether a cents-to-major-unit conversion was appropriate.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Variant price with market and currency context |
| Google feed | price |
| OpenAI Stable native | price |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"price": "18.00 USD"
},
"counterexample": {
"price": "1800 USD"
}
}Source: Google Merchant Center: Price; Shopify Admin API 2026-07: ProductVariant; OpenAI: Stable product file-upload specification
Availability
Use an explicit vocabulary mapping. Google preorder and native pre_order differ. A quantity alone does not resolve release status, sales-channel eligibility, or backorder policy.
The second spelling belongs to the Google vocabulary; choose the destination path before translating. Unknown stock must not become an in-stock claim.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Sellability evidence plus inventory policy |
| Google feed | availability |
| OpenAI Stable native | availability |
| Native scope | Required for native discovery |
{
"illustrativeFragment": {
"availability": "pre_order"
},
"counterexample": {
"availability": "preorder"
}
}Source: Google Merchant Center: Availability; Shopify Admin API 2026-07: ProductVariant; OpenAI: Stable product file-upload specification
Parent group
Preserve a parent identifier separately from each sellable item. Group only genuine selections of the same product.
A repeated parent/child identifier cannot express which selection is being offered.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Product/parent identity for verified sibling variants |
| Google feed | item_group_id |
| OpenAI Stable native | group_id |
| Native scope | Conditional: variants |
{
"illustrativeFragment": {
"item_id": "DEMO-BLUE",
"group_id": "DEMO-MUG"
},
"counterexample": {
"item_id": "DEMO-MUG",
"group_id": "DEMO-MUG"
}
}Source: Google Merchant Center: Item group ID; OpenAI: Stable product file-upload specification
Selected options
Keep the selected values as a map. Validate duplicate option names before building an object, because overwriting a key can conceal conflicting input.
Top-level attributes and selected options must agree. A transform should expose this contradiction, not silently choose a winner.
| Context | Field or source |
|---|---|
| Shopify source to inspect | selectedOptions name/value pairs |
| Google feed | variant_option plus applicable standard attributes |
| OpenAI Stable native | variant_dict + listing_has_variations |
| Native scope | Conditional: variants |
{
"illustrativeFragment": {
"variant_dict": {
"color": "Blue"
},
"listing_has_variations": true
},
"counterexample": {
"variant_dict": {
"color": "Blue"
},
"color": "Red"
}
}Source: Google Merchant Center: Item group ID; Shopify Admin API 2026-07: ProductVariant; OpenAI: Stable product file-upload specification
GTIN / barcode
Keep assigned identifiers as strings. Check length and check digit, then verify assignment to the exact trade item. A checksum alone does not prove ownership or authenticity.
These are deliberately unassigned synthetic checksum examples. The first has a valid checksum but is not a publishable real GTIN; the second fails the checksum.
| Context | Field or source |
|---|---|
| Shopify source to inspect | barcode, only after identifying its standard |
| Google feed | gtin |
| OpenAI Stable native | gtin |
| Native scope | Native optional; Google requirements depend on the product |
{
"illustrativeFragment": {
"gtin": "00000000000000"
},
"counterexample": {
"gtin": "00000000000001"
}
}Source: OpenAI: Stable product file-upload specification; Google Merchant Center: Product data specification; Shopify Admin API 2026-07: ProductVariant
Manufacturer part number
Keep the manufacturer identifier separate from an internal SKU. Preserve its original spelling and punctuation with the associated brand.
A missing GTIN does not authorize inventing a manufacturer identifier.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Manufacturer-controlled field or metafield |
| Google feed | mpn |
| OpenAI Stable native | mpn |
| Native scope | Native optional; Google requirements depend on the product |
{
"illustrativeFragment": {
"mpn": "DEMO-350-B"
},
"counterexample": {
"mpn": "autogenerated-missing-gtin"
}
}Source: OpenAI: Stable product file-upload specification; Google Merchant Center: Product data specification
Category
Treat taxonomy mapping as its own transformation. Record both source and destination taxonomy versions and inspect ambiguous or unmapped categories.
This editorial path is illustrative. A source-specific category ID is not automatically a destination category path.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Product category from a pinned taxonomy release |
| Google feed | google_product_category and/or product_type |
| OpenAI Stable native | product_category |
| Native scope | Native optional; Google context varies |
{
"illustrativeFragment": {
"product_category": "Home > Drinkware > Mugs"
},
"counterexample": {
"product_category": "gid://shopify/TaxonomyCategory/example"
}
}Source: Shopify: Versioned product taxonomy and mappings; Shopify Admin API 2026-07: Product; Google Merchant Center: Product data specification; OpenAI: Stable product file-upload specification
Color
Normalize presentation only when meaning is preserved. Do not merge distinct finishes because their labels contain the same color word.
Retain both observed values and resolve their authority before publishing.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Selected option or verified category metafield |
| Google feed | color |
| OpenAI Stable native | color |
| Native scope | Native optional; Google context varies |
{
"illustrativeFragment": {
"color": "Blue"
},
"counterexample": {
"color": "Blue",
"variant_dict": {
"color": "White"
}
}
}Source: Google Merchant Center: Item group ID; Shopify: Versioned product taxonomy and mappings; OpenAI: Stable product file-upload specification
Size
Preserve the selected label and its sizing context. A numeric size is not a measured product dimension.
Do not derive physical dimensions from a marketing size label. Use measured evidence.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Selected option plus explicit sizing context |
| Google feed | size; size_system when applicable |
| OpenAI Stable native | size; selected option where relevant |
| Native scope | Native optional; Google context varies |
{
"illustrativeFragment": {
"size": "350 mL"
},
"counterexample": {
"size": "Large, therefore 20 cm wide"
}
}Source: Google Merchant Center: Product data specification; Shopify Admin API 2026-07: ProductVariant; OpenAI: Stable product file-upload specification
Material
Distinguish a finish or appearance from the underlying material. Retain manufacturer wording when a stronger interpretation would add an unsupported claim.
Appearance is not evidence of composition.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Verified product fact or category metafield |
| Google feed | material |
| OpenAI Stable native | material |
| Native scope | Native optional; Google context varies |
{
"illustrativeFragment": {
"material": "Ceramic"
},
"counterexample": {
"material": "Solid brass because the finish is brass-colored"
}
}Source: Google Merchant Center: Product data specification; Shopify: Versioned product taxonomy and mappings; OpenAI: Stable product file-upload specification
Product dimensions
Store axes, units, and whether the measurement describes the item or its package. The native structured object uses at least two positive axes with one unit.
No unit can be inferred from country, category, or a neighboring row. Packaging measures cannot establish product fit.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Verified specification fields with basis and units |
| Google feed | product_length / product_width / product_height |
| OpenAI Stable native | dimensions |
| Native scope | Native optional; dependencies apply when supplied |
{
"illustrativeFragment": {
"dimensions": {
"length": "10",
"width": "8",
"unit": "cm"
}
},
"counterexample": {
"dimensions": {
"length": "10",
"width": "8"
}
}
}Source: Google Merchant Center: Product dimensions and weight; OpenAI: Stable product file-upload specification
Product weight
Separate net product weight from packed shipping weight. Record the basis before reusing an inventory or fulfillment field.
A bare number has no usable physical meaning. Supply the evidenced unit and basis.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Verified net product measure; inspect fulfillment-weight basis |
| Google feed | product_weight |
| OpenAI Stable native | weight + item_weight_unit |
| Native scope | Native optional; unit required when supplied |
{
"illustrativeFragment": {
"weight": "0.3",
"item_weight_unit": "kg"
},
"counterexample": {
"weight": "0.3"
}
}Source: Google Merchant Center: Product dimensions and weight; OpenAI: Stable product file-upload specification
Sale price
Identify the actual current regular and sale amounts. A compare-at value is not automatically the appropriate destination regular price.
Check the relationship, currency, and current payable amount before applying a promotion.
| Context | Field or source |
|---|---|
| Shopify source to inspect | Reviewed current promotion; inspect compare-at semantics |
| Google feed | sale_price |
| OpenAI Stable native | sale_price |
| Native scope | Optional; relationship and currency rules apply |
{
"illustrativeFragment": {
"price": "18.00 USD",
"sale_price": "15.00 USD"
},
"counterexample": {
"price": "18.00 USD",
"sale_price": "20.00 USD"
}
}Source: Google Merchant Center: Price; Shopify Admin API 2026-07: ProductVariant; OpenAI: Stable product file-upload specification
Review the assembled record
Field-level checks cannot establish record-level truth. Compare the resulting title, image, selected options, price, and stock with the same offer at the same time. Preserve disagreements as issues with an owner and evidence reference.
The accompanying portability experiment demonstrates which selected problems can be transformed and which require new evidence. Its fixtures are deliberately chosen examples, not an estimate of error prevalence in merchant catalogs.
Download ten failure cases and two controls (JSON)Source: Google Merchant Center: Item group ID; Google Merchant Center: Price; Google Merchant Center: Availability
Sources & scope
Primary references checked for this edition. The notes below distinguish source-backed facts from the frameworks and examples proposed in this guide.
- OpenAI: Stable product file-upload specification ↗
Native discovery fields and the distinct Google-compatible path. This edition is a selected comparison, not the complete upload contract.
Checked September 13, 2026 - Google Merchant Center: Product data specification ↗
Google feed field names and category-dependent requirements. This reference does not cover every country, category, or program.
Checked September 13, 2026 - Shopify Admin API 2026-07: Product ↗
Source product description, vendor, category, and online-store URL. Suggested transformations remain editorial decisions.
Checked September 13, 2026 - Shopify Admin API 2026-07: ProductVariant ↗
Variant identity, SKU, barcode, selected options, media, inventory, and pricing context. A source field does not prove destination eligibility.
Checked September 13, 2026 - Shopify: Versioned product taxonomy and mappings ↗
Existing category and attribute mappings. Record a pinned release and examine the actual mapping rather than equating category IDs.
Checked September 13, 2026 - Google Merchant Center: Product ID ↗
Stable distinct product identifiers, including separate variant IDs.
Checked September 13, 2026 - Google Merchant Center: Item group ID ↗
Variant groups, identifying attributes, and matching landing-page values.
Checked September 13, 2026 - Google Merchant Center: Price ↗
Amount and currency, plus agreement with landing page and checkout.
Checked September 13, 2026 - Google Merchant Center: Availability ↗
Google stock-state vocabulary and matching availability across shopping surfaces.
Checked September 13, 2026 - Google Merchant Center: Product dimensions and weight ↗
Product measures, accepted units, and agreement between repeated measurements. Packaging has a different meaning.
Checked September 13, 2026 - Shopify: Set up the Google & YouTube channel ↗
Documents the connected channel and product synchronization with Merchant Center. It does not establish a universal hosted feed URL for every Shopify store.
Checked September 20, 2026 - Google Merchant Center: Scheduled product data updates ↗
Documents Scheduled updates and the direct URL requirement for hosted product data files. These instructions apply to that delivery method.
Checked September 20, 2026
AI-assisted research and drafting. Provider-specific claims link to primary sources. Frameworks are editorial proposals; worked examples are illustrative and are not employer performance results.
Editorial policy & corrections ↗Cite this guide
George Kelly. Product feed specification: Shopify, Google, and ChatGPT iamgeorgekelly. Updated September 21, 2026. https://www.iamgeorgekelly.com/field-guide/product-feed-field-reference
Keep the source notes and example labels with an excerpt. For a provider requirement, follow the original documentation in Sources & scope.