← The field guide

Product feed specification: Shopify, Google, and ChatGPT

Map 20 product feed fields across Shopify, Google Merchant Center, and ChatGPT. Compare IDs, price, stock, and variants; download the JSON reference.

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.

Source: OpenAI: Stable product file-upload specification

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.

ContextField or source
Shopify source to inspectVariant ID or verified unique SKU
Google feedid
OpenAI Stable nativeitem_id
Native scopeRequired 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.

ContextField or source
Shopify source to inspectProduct title + selected options
Google feedtitle
OpenAI Stable nativetitle
Native scopeRequired 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.

ContextField or source
Shopify source to inspectdescriptionHtml or reviewed plain description
Google feeddescription
OpenAI Stable nativedescription
Native scopeRequired 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.

ContextField or source
Shopify source to inspectonlineStoreUrl + verified variant selection
Google feedlink
OpenAI Stable nativeurl
Native scopeRequired 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.

ContextField or source
Shopify source to inspectVariant-associated media
Google feedimage_link
OpenAI Stable nativeimage_url
Native scopeRequired 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.

ContextField or source
Shopify source to inspectVerified brand; inspect product.vendor
Google feedbrand
OpenAI Stable nativebrand
Native scopeRequired 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.

ContextField or source
Shopify source to inspectVerified seller identity for this offer
Google feedMerchant/account context; no equivalent generic field assumed
OpenAI Stable nativeseller_name
Native scopeRequired 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.

ContextField or source
Shopify source to inspectVariant price with market and currency context
Google feedprice
OpenAI Stable nativeprice
Native scopeRequired 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.

ContextField or source
Shopify source to inspectSellability evidence plus inventory policy
Google feedavailability
OpenAI Stable nativeavailability
Native scopeRequired 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.

ContextField or source
Shopify source to inspectProduct/parent identity for verified sibling variants
Google feeditem_group_id
OpenAI Stable nativegroup_id
Native scopeConditional: 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.

ContextField or source
Shopify source to inspectselectedOptions name/value pairs
Google feedvariant_option plus applicable standard attributes
OpenAI Stable nativevariant_dict + listing_has_variations
Native scopeConditional: 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.

ContextField or source
Shopify source to inspectbarcode, only after identifying its standard
Google feedgtin
OpenAI Stable nativegtin
Native scopeNative 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.

ContextField or source
Shopify source to inspectManufacturer-controlled field or metafield
Google feedmpn
OpenAI Stable nativempn
Native scopeNative 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.

ContextField or source
Shopify source to inspectProduct category from a pinned taxonomy release
Google feedgoogle_product_category and/or product_type
OpenAI Stable nativeproduct_category
Native scopeNative 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.

ContextField or source
Shopify source to inspectSelected option or verified category metafield
Google feedcolor
OpenAI Stable nativecolor
Native scopeNative 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.

ContextField or source
Shopify source to inspectSelected option plus explicit sizing context
Google feedsize; size_system when applicable
OpenAI Stable nativesize; selected option where relevant
Native scopeNative 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.

ContextField or source
Shopify source to inspectVerified product fact or category metafield
Google feedmaterial
OpenAI Stable nativematerial
Native scopeNative 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.

ContextField or source
Shopify source to inspectVerified specification fields with basis and units
Google feedproduct_length / product_width / product_height
OpenAI Stable nativedimensions
Native scopeNative 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.

ContextField or source
Shopify source to inspectVerified net product measure; inspect fulfillment-weight basis
Google feedproduct_weight
OpenAI Stable nativeweight + item_weight_unit
Native scopeNative 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.

ContextField or source
Shopify source to inspectReviewed current promotion; inspect compare-at semantics
Google feedsale_price
OpenAI Stable nativesale_price
Native scopeOptional; 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.

  1. 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
  2. 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
  3. Shopify Admin API 2026-07: Product ↗

    Source product description, vendor, category, and online-store URL. Suggested transformations remain editorial decisions.

    Checked September 13, 2026
  4. 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
  5. 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
  6. Google Merchant Center: Product ID ↗

    Stable distinct product identifiers, including separate variant IDs.

    Checked September 13, 2026
  7. Google Merchant Center: Item group ID ↗

    Variant groups, identifying attributes, and matching landing-page values.

    Checked September 13, 2026
  8. Google Merchant Center: Price ↗

    Amount and currency, plus agreement with landing page and checkout.

    Checked September 13, 2026
  9. Google Merchant Center: Availability ↗

    Google stock-state vocabulary and matching availability across shopping surfaces.

    Checked September 13, 2026
  10. 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
  11. 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
  12. 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.

Choose your next task ↗ · Browse the source directory ↗

Keep going

Can you copy a product feed unchanged? A 12-case testSKU vs GTIN: differences, barcodes, and variant IDsDoes the product page match the variant you submitted?Product data ownership: resolve a price conflictChatGPT product feeds: sale prices, stock changes, and stale-data checks