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 Name | Type | Description | Example Value |
|---|---|---|---|
| id | Integer | Unique identifier for the product | 7003338965178 |
| title | String | Title of the product | "SUPREME SEALLINE SEE POUCH SMALL" |
| body_html | String | HTML content describing the product | "The Supreme Sealline See Pouch Small is a versatile and..." |
| vendor | String | The product’s vendor | "SUPREME" |
| product_type | String | Type of the product | "Accessories" |
| created_at | DateTime | DateTime when the product was created | "2022-02-05T01:22:27.000000Z" |
| handle | String | A unique human-friendly string for the product, used in the product’s URL | "supreme-pouch-44370ss18a32-sm" |
| category | Object | The 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_id | Integer | 7003338965178 | |
| combined_listing_role | String | PARENT | |
| featured_media | Object | The 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_at | DateTime | DateTime when the product was last updated | "2023-10-25T20:47:04.000000Z" |
| published_at | DateTime | DateTime when the product was published | "2022-02-05T01:22:27.000000Z" |
| tags | Array of Strings | Tags associated with the product | ["Collection: Best Seller", "Collection:Accessories", "Collection:Supreme Accessories"] |
| images | Array of Objects | Images related to the product. | [{"alt": "SUPREME POUCH", "src": "https://cdn.shopify.com/", "width": 800, "height": 534, "variant_ids": []}] |
| metafields | Object | Configured metafields for the product | {"product": {"alias": "SEALLINE SEE POUCH SMALL", "colorway": "BLACK", "styleCode": "SS18A30 BLACK", "yearOfRelease": 2018}} |
| available | Boolean | Availability status of the product | true |
| is_gift_card | Boolean | Whether the product is a gift card | false |
| has_variants_that_require_components | Boolean | Whether the product has variants that require bundle components (used for bundle products) | false |
| price_range | Object | Price range of the product, including from and to fields | {"from": 7.97, "to": 7.97, "compare_at_price": 7.97} |
| options | Object | Dynamically 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_options | Object | Dynamically 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_v2 | Array of Objects | Enhanced 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_tags | Object | Dynamically created object of ‘key:value’ tags on the product. Keys/values in this object are not included in the tags array | {"YearOfRelease": 2016} |
| calculated | Object | Calculated 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 (ornull) 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 ornullcalculated- Always an object ornullnamed_tags- Always an object ornullcategory- Always an object ornullfeatured_media- Always an object ornullfirst_or_matched_variant- Always an object ornullprice_range- Always an object ornull
{} (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.