Skip to main content

Product schema overview

The product schema is a standardized format that transforms your Shopify product data into an optimized structure for the search and browse engine.

Catalog scale and limits

Layers has no hard limits on the number of products, variants, or SKUs that can be synced and indexed. The platform is designed to scale with your business and has successfully handled catalogs with millions of SKUs. Whether you have hundreds or millions of products, variants, or SKUs, Layers can accommodate your catalog size without restrictions.

Schema fields

The following table outlines the key fields in the product schema, along with their data types, descriptions, and example values:
Field NameTypeDescriptionExample Value
idIntegerUnique identifier for the product7003338965178
titleStringTitle of the product"SUPREME SEALLINE SEE POUCH SMALL"
body_htmlStringHTML content describing the product"The Supreme Sealline See Pouch Small is a versatile and..."
vendorStringThe product’s vendor"SUPREME"
product_typeStringType of the product"Accessories"
created_atDateTimeDateTime when the product was created"2022-02-05T01:22:27.000000Z"
handleStringA unique human-friendly string for the product, used in the product’s URL"supreme-pouch-44370ss18a32-sm"
categoryObjectThe category of a product from Shopify’s Standard Product Taxonomy{"id": "gid://shopify/TaxonomyCategory/aa-1", "name": "Clothing", "is_leaf": false, "is_root": false, "full_name": "Apparel & Accessories > Clothing"}
combined_listing_parent_product_idInteger7003338965178
combined_listing_roleStringPARENT
featured_mediaObjectThe featured media.{"alt": "The top and bottom view of a snowboard. The top has view is turquoise and black with graphics of\n trees. The bottom view is turquoise with the word hydrogen written in cursive.", "src": "https://cdn.shopify.com/s/files/1/0630/8265/9999/files/Main.jpg?v=1736281499", "width": 1600, "height": 1600, "mediaContentType": "IMAGE"}
updated_atDateTimeDateTime when the product was last updated"2023-10-25T20:47:04.000000Z"
published_atDateTimeDateTime when the product was published"2022-02-05T01:22:27.000000Z"
tagsArray of StringsTags associated with the product["Collection: Best Seller", "Collection:Accessories", "Collection:Supreme Accessories"]
imagesArray of ObjectsImages related to the product.[{"alt": "SUPREME POUCH", "src": "https://cdn.shopify.com/", "width": 800, "height": 534, "variant_ids": []}]
metafieldsObjectConfigured metafields for the product{"product": {"alias": "SEALLINE SEE POUCH SMALL", "colorway": "BLACK", "styleCode": "SS18A30 BLACK", "yearOfRelease": 2018}}
availableBooleanAvailability status of the producttrue
is_gift_cardBooleanWhether the product is a gift cardfalse
has_variants_that_require_componentsBooleanWhether the product has variants that require bundle components (used for bundle products)false
price_rangeObjectPrice range of the product, including from and to fields{"from": 7.97, "to": 7.97, "compare_at_price": 7.97}
optionsObjectDynamically created object from product options (can be an array of any type, depending on the product configuration). The key is case-sensitive.{"Size": ["S", "M", "L"]}
original_optionsObjectDynamically created object from product options (can be an array of any type, depending on the product configuration). The key is case-sensitive. This set of options is unfiltered.{"Size": ["S", "M", "L"]}
options_v2Array of ObjectsEnhanced options array with swatch and linked metafield data. Preserves Shopify’s option ordering and includes visual swatch information (color, image) and linked metafield values for each option value.See options_v2 Structure
named_tagsObjectDynamically created object of ‘key:value’ tags on the product. Keys/values in this object are not included in the tags array{"YearOfRelease": 2016}
calculatedObjectCalculated attributes defined in the Layers dashboard. Contains dynamic values computed via JSONLogic formulas. Attributes that evaluate to null or an empty string are excluded from this object.{"sku_coverage": 0.85, "days_available": 30}
You can provide type-hints to Named Tags by using the {key}:{type}:{value} tag format. Supported types: number, boolean, and date.

API response type consistency

The following fields are guaranteed to always be returned as JSON objects (or null) in API responses, never as empty arrays. This ensures type consistency for API consumers and prevents type mismatches in strongly-typed clients:
  • metafields - Always an object or null
  • calculated - Always an object or null
  • named_tags - Always an object or null
  • category - Always an object or null
  • featured_media - Always an object or null
  • first_or_matched_variant - Always an object or null
  • price_range - Always an object or null
When these fields have no data, they will be returned as {} (empty object) or null, never as [] (empty array). This behavior is enforced at the API response level to maintain consistent typing across all endpoints.
Sequential array fields like tags and images are not affected by this enforcement and will continue to be returned as arrays.

Data types and formatting

  • Integer: Whole numbers without decimals.
  • String: Textual data, often used for titles or descriptions.
  • Decimal: Numbers with decimal points, typically used for prices.
  • Array: A list of values, used for tags or features.
  • Boolean: A true or false value, indicating binary states such as availability.

See also