Google Tag Manager

If your site uses Google Tag Manager (GTM) to implement third-party tags such as Bloomreach's Pixel, follow the steps given in this section.

Below are GTM templates that you can download and import in your GTM (how-to described in sections below) to get you started. You can consult with your Bloomreach representative as to which you should download/use.

The Tags and Variables will be delivered in a single JSON file that you can import into your GTM console. You can start from the template files below:

❗️

Replace accountId value in the JSON file

Find 5014 and replace it with your corresponding account ID. You can find your account ID from the account package received, or you can consult with your Bloomreach representative.

{
    "exportFormatVersion": 2,
    "exportTime": "2018-01-10 00:47:02",
    "containerVersion": {
        "path": "accounts/1321514653/containers/8206506/versions/0",
        "accountId": "1321514653",
        "containerId": "8206506",
        "containerVersionId": "0",
        "container": {
            "path": "accounts/1321514653/containers/8206506",
            "accountId": "1321514653",
            "containerId": "8206506",
            "name": "Default Template",
            "publicId": "GTM-K3D3NRV",
            "usageContext": [
                "WEB"
            ],
            "fingerprint": "1515545191256",
            "tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/1321514653/containers/8206506/workspaces?apiLink=container"
        },
        "tag": [
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "tagId": "1",
                "name": "BloomReach Add To Cart Event",
                "type": "html",
                "notes": "When a user adds an item to their cart, BloomReach's Add To Cart Event should fire. Typically this includes the product display page and product listing pages such as category or search pages.\n\nIf an Add To Cart button is located anywhere else on your site (e.g. Product Collection or Sku Set pages) , please also fire this tag there as well.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent(\"cart\", \"click-add\", {{BloomReach Cart Data}});\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515545070754",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "tagId": "2",
                "name": "BloomReach PageView",
                "type": "html",
                "notes": "Base configuration for BloomReach tracking pixel that needs to fire on all page views. When fired, requests BloomReach's tracker javascript and configures it according to your site-wide settings.\n\nAt time of evaluation, if the BloomReach Page Type variable is one of (\"product\", \"category\", \"search\"), will set additional required parameters for those page types. If BloomReach Is Conversion variable is 1, the conversion page view additional required parameters will also be set.\n\nFor facet filters on Category and Search Pages:\nIf a user applies a facet filter and refreshes results, the Category and Search pixels respectively should fire again each time filters are applied. BloomReach uses this information to understand which filters are commonly used.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  var br_data = br_data || {};\n\n  br_data.acct_id = {{BloomReach Account ID}};\n  br_data.user_id = {{BloomReach User ID}};\n\n  br_data.tms= {{BloomReach Tag Manager ID}};\n  \n  br_data.ptype = {{BloomReach Page Type}};\n  \n  switch (br_data.ptype) {\n    case 'product':\n      br_data.prod_id = {{BloomReach Product ID}};\n      br_data.prod_name = {{BloomReach Product Name}};\n      br_data.sku = {{BloomReach Product SKU}};\n      break;\n    case 'category':\n      br_data.cat_id = {{BloomReach Category ID}};\n      br_data.cat = {{BloomReach Category}};\n      break;\n    case 'search':\n      br_data.search_term = {{BloomReach Search Term}};\n      break;\n  }\n  \n  if ({{BloomReach Is Conversion}}) {\n    br_data.is_conversion = {{BloomReach Is Conversion}};\n    br_data.basket_value = {{BloomReach Basket Value}};\n    br_data.order_id = {{BloomReach Order ID}};\n    br_data.basket = {{BloomReach Basket}};\n  }\n  \n  (function() {\n  var brtrk = document.createElement('script');\n  brtrk.type = 'text/javascript';\n  brtrk.async = true;\n  brtrk.src = 'https:' == document.location.protocol ? \"https://cdns.brsrvr.com/v1/br-trk-{{BloomReach Account ID}}.js\" : \"http://cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js\";\n  var s = document.getElementsByTagName('script')[0];\n  s.parentNode.insertBefore(brtrk, s);\n  })();\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515545104222",
                "firingTriggerId": [
                    "2147479553"
                ],
                "parentFolderId": "6",
                "tagFiringOption": "ONCE_PER_LOAD"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "tagId": "3",
                "name": "BloomReach Quick View Event",
                "type": "html",
                "notes": "Anytime a user opens a Quick View to display more details about a product on your site, BloomReach expects a Quick View Event to fire.\n\nQuick Views are commonly found on Product Listing pages, but if there are alternate locations to trigger a Quick View, please also fire on those locations as well.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent('product', 'quickview', {{BloomReach Quick View Data}});\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515545070756",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "tagId": "4",
                "name": "BloomReach Search Event",
                "type": "html",
                "notes": "When a user clicks on the submit button or hits the enter key on a search form, BloomReach expects a Search Submit Event to fire.\n\nNote: the next pixel that is fired (typically the search page view pixel) will automatically contain the parameters fired in Search Submit event pixel prefixed with \"df_\".",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent('suggest', 'submit', {{BloomReach Search Data}}, {}, true);\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515545070757",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "tagId": "5",
                "name": "BloomReach Suggest Event",
                "type": "html",
                "notes": "If you have an auto-suggest feature in your search form, when a user clicks on a search suggestion, BloomReach expects a Search Suggest Event to fire.\n\nNote: the next pixel that is fired (typically the search page view pixel) will automatically contain the parameters fired in Search Suggest event pixel prefixed with \"df_\".",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent('suggest', 'click', {{BloomReach Suggest Data}}, {}, true);\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515545070758",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            }
        ],
        "variable": [
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "1",
                "name": "BloomReach Account ID",
                "type": "c",
                "notes": "The BloomReach-provided Account identifier. This ID is a constant and is pre-populated. If your account ID is not pre-populated, please reach out to your Technical Project Manager.\n\nVariable Type: String\nExample: \"1235\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "value",
                        "value": "5014"
                    }
                ],
                "fingerprint": "1515545070742",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "2",
                "name": "BloomReach Basket",
                "type": "jsm",
                "notes": "The BloomReach Basket Object contains detailed conversion parameters for each product that was purchased. An example basket object that this variable might return:\n\n{\n   \"items\": [\n        {\n          \"prod_id\" : \"pid123456\",\n          \"sku\": \"sku789\",.\n          \"name\": \"Cashmere Sweater\",\n          \"quantity\": \"1\",\n          \"price\": \"65.95\"\n        }\n }\n\n## Detailed Basket Spec\n\nType: Object\n\nThis object contains a property called `items` which is an array of the product objects purchased. For each product in the `items` array, the following properties should be included as specified:\n\nname: prod_id\ntype: String\nexample: \"pid123456\"\ndescription: Product ID. Needs to match Product ID sent in feed.\n\nname: sku\ntype: String\nexample: \"sku789\"\ndescription: Product SKU. Should match SKU ID sent in feed. Only applies if you have SKUs.\n\nname: name\ntype: String\nexample: \"Cashmere Sweater\"\ndescription: Product Name.\n\nname: quantity\ntype: Integer\nexample: 2\ndescription: Quantity of this product in the basket\n\nname: price\ntype: String\nexample: \"pid123456\"\ndescription: Unit price *per* product, not the total price. If item is on sale, this is the unit sale price.\n\n## Additional Examples\n\n2 products, first product has a sku, second product does not have a sku:\n\n{\n   \"items\": [\n        {\n          \"prod_id\" : \"pid123456\",\n          \"sku\": \"sku789\",.\n          \"name\": \"Cashmere Sweater\",\n          \"quantity\": \"1\",\n          \"price\": \"65.95\"\n        },\n        {\n          \"prod_id\" : \"pid56789\",\n          \"sku\": \"\",\n          \"name\": \"Blue Skinny Jeans\",\n          \"quantity\": \"2\",\n          \"price\": \"79.99\"\n        }\n      ]\n };\n\n2 products, first product is a Product Bundle, second product is an individual product:\n\n{\n   \"items\": [\n        {\n          \"prod_id\" : \"bundle223344\",\n          \"sku\": \"\",.\n          \"name\": \"Linen Bed Sheet Set\",\n          \"quantity\": \"1\",\n          \"price\": \"265.95\"\n        },\n        {\n          \"prod_id\" : \"pid56789\",\n          \"sku\": \"\",\n          \"name\": \"Blue Skinny Jeans\",\n          \"quantity\": \"2\",\n          \"price\": \"79.99\"\n        }\n      ]\n};\n\n## Additional Details \n\nIf the item in the basket is a Product Collection, Product Bundle or Sku Set:\n         (a)  Your Collection Pages have their own unique ID and are sold exactly like standalone products, then enter the collection ID in the prod_id \n                field. Make sure that this collection ID is sent in the feed in the product ID field.\n\n         (b) Your Product Collections have their own unique ID, but cannot be purchased as a whole; only the collections' individual parts/products \n               can be purchased and each of these individual parts have their own ID. In this case, list all individual products in the basket and the \n               prod_id is the the ID of each product. Make sure that each product ID is sent in the feed in the product ID field.\n\n         (c) Products that are a part of a Collection but can only be purchased from their own individual product page. In this case follow the same \n               guideline as described in (b)\n\n## Custom Javascript Variable Example\n\nThis variable will normally be setup as the Custom JavaScript type. Here is an example of the function you might write. The example assumes you've implemented Google Enhanced Ecommerce and the purchase object is available on the data layer.\n\nfunction () {\n    var products = google_tag_manager[{{Container ID}}].dataLayer.get(\"ecommerce.purchase.products\");\n    var item;\n    var items = [];\n\n    if (products && products.length > 0) {\n        for (var i = 0; i < products.length; i++) {\n            console.log(products[i]);\n            item = {};\n            item.prod_id = products[i].id;\n            item.name = products[i].name;\n            item.quantity = products[i].quantity;\n            item.price = products[i].price;\n            items.push(item);\n        }\n    }\n\n    return {\"items\": items};\n}",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return {\n    \"items\": [{\n      \"prod_id\": \"EXAMPLEVALUE\", \n      \"sku\": \"EXAMPLEVALUE\", \n      \"name\": \"EXAMPLEVALUE\", \n      \"quantity\": \"EXAMPLEVALUE\", \n      \"price\": \"EXAMPLEVALUE\" }]\n  }; \n}"
                    }
                ],
                "fingerprint": "1515545070743",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "3",
                "name": "BloomReach Basket Value",
                "type": "jsm",
                "notes": "The total price of the checkout basket including tax, shipping and/or discounts in the account currency.\n\nVariable Type: String\n\nFormat: The total price of the checkout basket, in the account currency, without any symbols. \n\nExample: If the checkout basket was $100 with $5 tax and $10 shipping, the value for this parameter should be \"115.00\".",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070743",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "4",
                "name": "BloomReach Cart Data",
                "type": "jsm",
                "notes": "The BloomReach Cart Object contains detailed product information when a product is added to a cart. An example Cart object that this variable might return:\n\n {\n      \"prod_id\" : \"pid123456\",\n      \"sku\": \"sku789\"\n}\n\n## Detailed Cart Spec\n\nType: Object\n\nProperties:\n\nname: prod_id\ntype: String\nexample: \"pid123456\"\ndescription: Product ID. Needs to match Product ID sent in feed.\n\nname: sku\ntype: String\nexample: \"sku789\"\ndescription: Product SKU. Should match SKU ID sent in feed. Only applies if you have SKUs.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return  {\n    \"prod_id\" : \"EXAMPLEVALUE\",\n    \"sku\": \"EXAMPLEVALUE\",\n  }; \n}"
                    }
                ],
                "fingerprint": "1515545070744",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "5",
                "name": "BloomReach Category",
                "type": "jsm",
                "notes": "The breadcrumb of the page.\n\nDependencies: Needs to match the \"crumbs\" field in the product feed that you send to BloomReach.\n\nVariable Type: String\n\nFormat: <top level crumb>|<first level crumb>|<second level crumb>\nCrumbs need to be delimited by |\n\nExample:\nIf your category crumb is \"Home/Clothing/Outerwear\", then return \"Home|Clothing|Outerwear\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070745",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "6",
                "name": "BloomReach Category ID",
                "type": "jsm",
                "notes": "A Unique category ID as referred to in the database/catalog. This refers to the ID of the leaf node. \nIf your category page does not have a unique ID, but it has a unique breadcrumb path, then enter the name of the last crumb (leaf node).\nIf your category page does not have a unique bread crumb path, please consult with your BloomReach Technical Project Manager for options.\n\nDependencies: This should match the \"crumbs_id\" field in the product feed that you send to BloomReach. \nThis ID typically refers to the \"leaf\" of the crumb.\n\nVariable Type: String. This field value is case-sensitive.\n\nExample (1) with unique Category ID: \"cat749\"\n\nExample (2) with unique Bread Crumb path:\nIf you crumb path is Home/Women/Outerwear, enter \"Outerwear\" as Category ID. \nPlease ensure that this leaf node is sent in the \"crumbs_id\" field in the Product feed that you send to BloomReach.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070745",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "8",
                "name": "BloomReach Is Conversion",
                "type": "jsm",
                "notes": "Set to 1 on the Conversion or Thank you page (page after the customer completes the purchase).\n\nVariable Type: Integer\n\nExample: 1",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070747",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "9",
                "name": "BloomReach Order ID",
                "type": "jsm",
                "notes": "The order id associated with the order placed. This id should match the orderID used in your analytics systems. This is used to reconcile BloomReach's analytics data with your analytics systems.\n\nVariable Type: String\n\nExample: \"12123455\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070747",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "10",
                "name": "BloomReach Page Type",
                "type": "jsm",
                "notes": "Maps your site's page type classifications to the values BloomReach expects for our page type classifications.\n\nRequired on *all* page views, including desktop, mobile, and tablet versions.\n\nBloomReach's Page Type classifications:\n\n* homepage -  homepage or landing pages\n* category - category listing pages and category product listing pages\n* search - search listing pages\n* product - product, product bundle, product collection or sku set pages\n* thematic - BloomReach thematic pages\n* content -  content pages\n* other - any pagetype that is not one of the above types. If not one of above, required to return other.\n\nVariable Type: String of enumerated type of (\"homepage\", \"product', \"category\", \"search\", \"content\", \"thematic\", \"jfy\", \"mlt\", \"trend\")\n\nVariable Example: \"homepage\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"other\"; \n}"
                    }
                ],
                "fingerprint": "1515545070748",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "11",
                "name": "BloomReach Product ID",
                "type": "jsm",
                "notes": "This is the unique ID, which describes a product, product bundle, product collection or sku set. If a product is available in multiple SKUs (e.g. color/size combinations), this field refers to the id shared by all the SKUs for a product.\n\nData Type: String, This field value is case-sensitive.\n\nDependencies: This field needs to match the unique product id sent in the feed.\n\nExamples:\n(1) Product Page: If your product ID is prod1234, return \"prod1234\"\n\n(2) Product Collection Page: \n    (a) If your Product Collection page has their own unique ID and is sold exactly like a standalone product, enter the collection ID. Make sure that this collection ID is sent in the feed as a product ID.\n\n    (b) If your Product Collection has their own unique ID, but cannot be purchased as a whole; only the collections' individual parts can be purchased and each of these individual parts have their own ID, enter the collection ID. Make sure that this collection ID is sent in the feed as a product ID.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070748",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "12",
                "name": "BloomReach Product Name",
                "type": "jsm",
                "notes": "The name of the product being viewed.\n\nFor Product PageViews (single product, product collection, product bundle, or sku set pages) only.\n\nVariable Type: String\nVariable Example: \"Blue Lace Dress\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070749",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "13",
                "name": "BloomReach Product SKU",
                "type": "jsm",
                "notes": "For Product PageViews only.\n\nUnique SKU ID representing the selected variant of this product (e.g. size M, color blue of a t-shirt). If SKU is not applicable to the product, leave this blank.\n\nVariable Type: String\nVariable Examples:\n\n\"789\"\n\"SM123\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070749",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "14",
                "name": "BloomReach Quick View Data",
                "type": "jsm",
                "notes": "The BloomReach Quick View Object contains detailed product information about a product being viewed in a Quick View. An example Quick View object that this variable might return:\n\n {\n      \"prod_id\" : \"pid123456\",\n      \"sku\": \"sku789\",\n      \"prod_name\": \"cashmere sweater\"\n}\n\n## Detailed Quick View Object Spec\n\nType: Object\n\nProperties:\n\nname: prod_id\ntype: String\nexample: \"pid123456\"\ndescription: Product ID. Needs to match Product ID sent in feed.\n\nname: sku\ntype: String\nexample: \"sku789\"\ndescription: Product SKU. Should match SKU ID sent in feed. Only applies if you have SKUs.\n\nname: prod_name\ntype: String\nexample: \"Cashmere Sweater\"\ndescription: Product Name.\n\n## Additional Details\n\nIf the Product Quick View is a Product Collection, Product Bundle or Sku Set:\n         (a)  Your Collection Pages have their own unique ID and are sold exactly like standalone products, then enter the collection ID in the prod_id \n                field. Make sure that this collection ID is sent in the feed in the product ID field.\n\n         (b) Your Product Collections have their own unique ID, but cannot be purchased as a whole; only the collections' individual parts/products \n               can be purchased and each of these individual parts have their own ID. In this case,  enter the collection ID in the prod_id field. Make sure \n               that this collection ID is sent in the feed in the product ID field.\n\n         (c) Your Products are a part of a Collection but can only be purchased from their own individual product page. In this case enter the product \n               ID of the first product in the prod_id field.\n\n## Additional Examples\n\nQuick view for product with a Sku:\n\n{\"prod_id\": \"34561234\", \"prod_name\": \"Blue Lace Dress\", \"sku\": \"987\"}\n\nQuick view for product without a sku:\n\n{\"prod_id\": \"12349028\", \"prod_name\": \"Beach Ball\"}\n\nQuick view for a Product Bundle: \n\n{\"prod_id\": \"set223344\", \"prod_name\": \"Linen Bed Set\"}",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070750",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "15",
                "name": "BloomReach Search Data",
                "type": "jsm",
                "notes": "The BloomReach Search Submit Object contains information about the search query being submitted. For example, if a user types `blue dress` and then clicks the search button or hits enter to submit the search,  this variable should return:\n\n{\"q\": \"blue dress\"}\n\n## Detailed Quick View Object Spec\n\nType: Object\n\nProperties:\n\nname: q\ntype: String\nexample: \"blue lace dress\"\ndescription: User's typed search query submitted to search box.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return {\"q\": \"EXAMPLEVALUE\"}; \n}"
                    }
                ],
                "fingerprint": "1515545070750",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "16",
                "name": "BloomReach Search Term",
                "type": "jsm",
                "notes": "For search page views only, this it the value of the search query describing the page.\n\nVariable Type: String\nExample Values: \"blue dress\", \"red dress\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070751",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "17",
                "name": "BloomReach Suggest Data",
                "type": "jsm",
                "notes": "The BloomReach Search Suggest Object contains information about the search suggestion that was clicked as well as the typed value that lead to the suggestion from your auto suggest interface.\n\nFor example, when a user types `blu` and the auto-suggest window shows up and a user clicks the suggested search `blue summer dress`, this variable should return:\n\n{\n    \"aq\": \"blu\",\n    \"q\": \"blue summer dress\"\n}\n\n## Detailed Quick View Object Spec\n\nType: Object\n\nProperties:\n\nname: q\ntype: String\nexample: \"blue summer dress\"\ndescription: Value of suggested search, ie, search that is submitted to the search service.\n\nname: aq\ntype: String\nexample: \"blu\"\ndescription: User's typed search query submitted to search box.\n\n## Additional Examples:\n\n{\"aq\": \"re\", \"q\": \"red shoes\"}\n\n{\"aq\": \"blue su\", \"q\": \"blue summer dress\"}",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return {\"aq\": \"EXAMPLEVALUE\", \"q\": \"EXAMPLEVALUE\"}; \n}"
                    }
                ],
                "fingerprint": "1515545070751",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "18",
                "name": "BloomReach Tag Manager ID",
                "type": "c",
                "notes": "When more than one tag management solutions are firing BloomReach pixels simultaneously, this value is used as an identifier to filter out duplicate pixels. This value can be any string identifier as long as it is constant per tag manager solution.\n\nVariable Type: String\nExample Values: \"gtm\", \"googletagmanager\", \"dtm\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "value",
                        "value": "gtm"
                    }
                ],
                "fingerprint": "1515545070752",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "variableId": "19",
                "name": "BloomReach User ID",
                "type": "jsm",
                "notes": "Universal customer ID, if you use one, to pass to BloomReach to recognize users in a way that is aligned with our system for various personalization features.  Should be an anonymized string and should not contain the user's email or other personally identifiable information.\n\nVariable Type: String\nExample Value: \"947345478564\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515545070752",
                "parentFolderId": "7"
            }
        ],
        "folder": [
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "folderId": "5",
                "name": "BloomReach Events",
                "fingerprint": "1515545070741"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "folderId": "6",
                "name": "BloomReach PageViews",
                "fingerprint": "1515545070741"
            },
            {
                "accountId": "1321514653",
                "containerId": "8206506",
                "folderId": "7",
                "name": "BloomReach Variables",
                "fingerprint": "1515545070741"
            }
        ],
        "fingerprint": "0",
        "tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/1321514653/containers/8206506/versions/0?apiLink=version"
    }
}
{
    "exportFormatVersion": 2,
    "exportTime": "2018-01-10 00:43:36",
    "containerVersion": {
        "path": "accounts/1321514653/containers/7061771/versions/0",
        "accountId": "1321514653",
        "containerId": "7061771",
        "containerVersionId": "0",
        "container": {
            "path": "accounts/1321514653/containers/7061771",
            "accountId": "1321514653",
            "containerId": "7061771",
            "name": "Multisite Template",
            "publicId": "GTM-TT6QMSF",
            "usageContext": [
                "WEB"
            ],
            "fingerprint": "1515545008135",
            "tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/1321514653/containers/7061771/workspaces?apiLink=container"
        },
        "tag": [
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "tagId": "1",
                "name": "BloomReach Add To Cart Event",
                "type": "html",
                "notes": "When a user adds an item to their cart, BloomReach's Add To Cart Event should fire. Typically this includes the product display page and product listing pages such as category or search pages.\n\nIf an Add To Cart button is located anywhere else on your site (e.g. Product Collection or Sku Set pages) , please also fire this tag there as well.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent(\"cart\", \"click-add\", {{BloomReach Cart Data}});\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1497546022269",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "tagId": "2",
                "name": "BloomReach PageView",
                "type": "html",
                "notes": "Base configuration for BloomReach tracking pixel that needs to fire on all page views. When fired, requests BloomReach's tracker javascript and configures it according to your site-wide settings.\n\nAt time of evaluation, if the BloomReach Page Type variable is one of (\"product\", \"category\", \"search\"), will set additional required parameters for those page types. If BloomReach Is Conversion variable is 1, the conversion page view additional required parameters will also be set.\n\nFor facet filters on Category and Search Pages:\nIf a user applies a facet filter and refreshes results, the Category and Search pixels respectively should fire again each time filters are applied. BloomReach uses this information to understand which filters are commonly used.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  var br_data = br_data || {};\n\n  br_data.acct_id = {{BloomReach Account ID}};\n  br_data.user_id = {{BloomReach User ID}};\n  br_data.domain_key = {{BloomReach Domain Key}};\n  br_data.view_id = {{BloomReach View ID}};\n  br_data.tms= {{BloomReach Tag Manager ID}};\n  \n  br_data.ptype = {{BloomReach Page Type}};\n  \n  switch (br_data.ptype) {\n    case 'product':\n      br_data.prod_id = {{BloomReach Product ID}};\n      br_data.prod_name = {{BloomReach Product Name}};\n      br_data.sku = {{BloomReach Product SKU}};\n      break;\n    case 'category':\n      br_data.cat_id = {{BloomReach Category ID}};\n      br_data.cat = {{BloomReach Category}};\n      break;\n    case 'search':\n      br_data.search_term = {{BloomReach Search Term}};\n      break;\n  }\n  \n  if ({{BloomReach Is Conversion}}) {\n    br_data.is_conversion = {{BloomReach Is Conversion}};\n    br_data.basket_value = {{BloomReach Basket Value}};\n    br_data.order_id = {{BloomReach Order ID}};\n    br_data.basket = {{BloomReach Basket}};\n  }\n  \n  (function() {\n  var brtrk = document.createElement('script');\n  brtrk.type = 'text/javascript';\n  brtrk.async = true;\n  brtrk.src = 'https:' == document.location.protocol ? \"https://cdns.brsrvr.com/v1/br-trk-{{BloomReach Account ID}}.js\" : \"http://cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js\";\n  var s = document.getElementsByTagName('script')[0];\n  s.parentNode.insertBefore(brtrk, s);\n  })();\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515544817776",
                "firingTriggerId": [
                    "2147479553"
                ],
                "parentFolderId": "6",
                "tagFiringOption": "ONCE_PER_LOAD"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "tagId": "3",
                "name": "BloomReach Quick View Event",
                "type": "html",
                "notes": "Anytime a user opens a Quick View to display more details about a product on your site, BloomReach expects a Quick View Event to fire.\n\nQuick Views are commonly found on Product Listing pages, but if there are alternate locations to trigger a Quick View, please also fire on those locations as well.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent('product', 'quickview', {{BloomReach Quick View Data}});\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1497545023634",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "tagId": "4",
                "name": "BloomReach Search Event",
                "type": "html",
                "notes": "When a user clicks on the submit button or hits the enter key on a search form, BloomReach expects a Search Submit Event to fire.\n\nNote: the next pixel that is fired (typically the search page view pixel) will automatically contain the parameters fired in Search Submit event pixel prefixed with \"df_\".",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent('suggest', 'submit', {{BloomReach Search Data}}, {}, true);\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515544839230",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "tagId": "5",
                "name": "BloomReach Suggest Event",
                "type": "html",
                "notes": "If you have an auto-suggest feature in your search form, when a user clicks on a search suggestion, BloomReach expects a Search Suggest Event to fire.\n\nNote: the next pixel that is fired (typically the search page view pixel) will automatically contain the parameters fired in Search Suggest event pixel prefixed with \"df_\".",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "html",
                        "value": "<script type=\"text/javascript\">\n  BrTrk.getTracker().logEvent('suggest', 'click', {{BloomReach Suggest Data}}, {}, true);\n</script>"
                    },
                    {
                        "type": "BOOLEAN",
                        "key": "supportDocumentWrite",
                        "value": "false"
                    }
                ],
                "fingerprint": "1515544849137",
                "parentFolderId": "5",
                "tagFiringOption": "ONCE_PER_EVENT"
            }
        ],
        "variable": [
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "1",
                "name": "BloomReach Account ID",
                "type": "c",
                "notes": "The BloomReach-provided Account identifier. This ID is a constant and is pre-populated. If your account ID is not pre-populated, please reach out to your Technical Project Manager.\n\nVariable Type: String\nExample: \"1235\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "value",
                        "value": "5014"
                    }
                ],
                "fingerprint": "1497544955836",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "2",
                "name": "BloomReach Basket",
                "type": "jsm",
                "notes": "The BloomReach Basket Object contains detailed conversion parameters for each product that was purchased. An example basket object that this variable might return:\n\n{\n   \"items\": [\n        {\n          \"prod_id\" : \"pid123456\",\n          \"sku\": \"sku789\",.\n          \"name\": \"Cashmere Sweater\",\n          \"quantity\": \"1\",\n          \"price\": \"65.95\"\n        }\n }\n\n## Detailed Basket Spec\n\nType: Object\n\nThis object contains a property called `items` which is an array of the product objects purchased. For each product in the `items` array, the following properties should be included as specified:\n\nname: prod_id\ntype: String\nexample: \"pid123456\"\ndescription: Product ID. Needs to match Product ID sent in feed.\n\nname: sku\ntype: String\nexample: \"sku789\"\ndescription: Product SKU. Should match SKU ID sent in feed. Only applies if you have SKUs.\n\nname: name\ntype: String\nexample: \"Cashmere Sweater\"\ndescription: Product Name.\n\nname: quantity\ntype: Integer\nexample: 2\ndescription: Quantity of this product in the basket\n\nname: price\ntype: String\nexample: \"pid123456\"\ndescription: Unit price *per* product, not the total price. If item is on sale, this is the unit sale price.\n\n## Additional Examples\n\n2 products, first product has a sku, second product does not have a sku:\n\n{\n   \"items\": [\n        {\n          \"prod_id\" : \"pid123456\",\n          \"sku\": \"sku789\",.\n          \"name\": \"Cashmere Sweater\",\n          \"quantity\": \"1\",\n          \"price\": \"65.95\"\n        },\n        {\n          \"prod_id\" : \"pid56789\",\n          \"sku\": \"\",\n          \"name\": \"Blue Skinny Jeans\",\n          \"quantity\": \"2\",\n          \"price\": \"79.99\"\n        }\n      ]\n };\n\n2 products, first product is a Product Bundle, second product is an individual product:\n\n{\n   \"items\": [\n        {\n          \"prod_id\" : \"bundle223344\",\n          \"sku\": \"\",.\n          \"name\": \"Linen Bed Sheet Set\",\n          \"quantity\": \"1\",\n          \"price\": \"265.95\"\n        },\n        {\n          \"prod_id\" : \"pid56789\",\n          \"sku\": \"\",\n          \"name\": \"Blue Skinny Jeans\",\n          \"quantity\": \"2\",\n          \"price\": \"79.99\"\n        }\n      ]\n};\n\n## Additional Details \n\nIf the item in the basket is a Product Collection, Product Bundle or Sku Set:\n         (a)  Your Collection Pages have their own unique ID and are sold exactly like standalone products, then enter the collection ID in the prod_id \n                field. Make sure that this collection ID is sent in the feed in the product ID field.\n\n         (b) Your Product Collections have their own unique ID, but cannot be purchased as a whole; only the collections' individual parts/products \n               can be purchased and each of these individual parts have their own ID. In this case, list all individual products in the basket and the \n               prod_id is the the ID of each product. Make sure that each product ID is sent in the feed in the product ID field.\n\n         (c) Products that are a part of a Collection but can only be purchased from their own individual product page. In this case follow the same \n               guideline as described in (b)\n\n## Custom Javascript Variable Example\n\nThis variable will normally be setup as the Custom JavaScript type. Here is an example of the function you might write. The example assumes you've implemented Google Enhanced Ecommerce and the purchase object is available on the data layer.\n\nfunction () {\n    var products = google_tag_manager[{{Container ID}}].dataLayer.get(\"ecommerce.purchase.products\");\n    var item;\n    var items = [];\n\n    if (products && products.length > 0) {\n        for (var i = 0; i < products.length; i++) {\n            console.log(products[i]);\n            item = {};\n            item.prod_id = products[i].id;\n            item.name = products[i].name;\n            item.quantity = products[i].quantity;\n            item.price = products[i].price;\n            items.push(item);\n        }\n    }\n\n    return {\"items\": items};\n}",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return {\n    \"items\": [{\n      \"prod_id\": \"EXAMPLEVALUE\", \n      \"sku\": \"EXAMPLEVALUE\", \n      \"name\": \"EXAMPLEVALUE\", \n      \"quantity\": \"EXAMPLEVALUE\", \n      \"price\": \"EXAMPLEVALUE\" }]\n  }; \n}"
                    }
                ],
                "fingerprint": "1515544509766",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "3",
                "name": "BloomReach Basket Value",
                "type": "jsm",
                "notes": "The total price of the checkout basket including tax, shipping and/or discounts in the account currency.\n\nVariable Type: String\n\nFormat: The total price of the checkout basket, in the account currency, without any symbols. \n\nExample: If the checkout basket was $100 with $5 tax and $10 shipping, the value for this parameter should be \"115.00\".",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515542371281",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "4",
                "name": "BloomReach Cart Data",
                "type": "jsm",
                "notes": "The BloomReach Cart Object contains detailed product information when a product is added to a cart. An example Cart object that this variable might return:\n\n {\n      \"prod_id\" : \"pid123456\",\n      \"sku\": \"sku789\"\n}\n\n## Detailed Cart Spec\n\nType: Object\n\nProperties:\n\nname: prod_id\ntype: String\nexample: \"pid123456\"\ndescription: Product ID. Needs to match Product ID sent in feed.\n\nname: sku\ntype: String\nexample: \"sku789\"\ndescription: Product SKU. Should match SKU ID sent in feed. Only applies if you have SKUs.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return  {\n    \"prod_id\" : \"EXAMPLEVALUE\",\n    \"sku\": \"EXAMPLEVALUE\",\n  }; \n}"
                    }
                ],
                "fingerprint": "1515544464963",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "5",
                "name": "BloomReach Category",
                "type": "jsm",
                "notes": "The breadcrumb of the page.\n\nDependencies: Needs to match the \"crumbs\" field in the product feed that you send to BloomReach.\n\nVariable Type: String\n\nFormat: <top level crumb>|<first level crumb>|<second level crumb>\nCrumbs need to be delimited by |\n\nExample:\nIf your category crumb is \"Home/Clothing/Outerwear\", then return \"Home|Clothing|Outerwear\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515542405474",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "6",
                "name": "BloomReach Category ID",
                "type": "jsm",
                "notes": "A Unique category ID as referred to in the database/catalog. This refers to the ID of the leaf node. \nIf your category page does not have a unique ID, but it has a unique breadcrumb path, then enter the name of the last crumb (leaf node).\nIf your category page does not have a unique bread crumb path, please consult with your BloomReach Technical Project Manager for options.\n\nDependencies: This should match the \"crumbs_id\" field in the product feed that you send to BloomReach. \nThis ID typically refers to the \"leaf\" of the crumb.\n\nVariable Type: String. This field value is case-sensitive.\n\nExample (1) with unique Category ID: \"cat749\"\n\nExample (2) with unique Bread Crumb path:\nIf you crumb path is Home/Women/Outerwear, enter \"Outerwear\" as Category ID. \nPlease ensure that this leaf node is sent in the \"crumbs_id\" field in the Product feed that you send to BloomReach.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515542421383",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "7",
                "name": "BloomReach Domain Key",
                "type": "jsm",
                "notes": "The BloomReach-provided ID of the domain receiving the request. This parameter identifies the specific site language version when one account ID hosts multiple site versions with different languages. BloomReach uses this value to ensure that only query and analytics data that pertain to that language are used for respective features.\n\nVariable Type: String, This field value is case-sensitive.\n\nAdditional information: Your BloomReach Technical Account Manager will provide this information during technical Kickoff call if necessary.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515542435370",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "8",
                "name": "BloomReach Is Conversion",
                "type": "jsm",
                "notes": "Set to 1 on the Conversion or Thank you page (page after the customer completes the purchase).\n\nVariable Type: Integer\n\nExample: 1",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515542445766",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "9",
                "name": "BloomReach Order ID",
                "type": "jsm",
                "notes": "The order id associated with the order placed. This id should match the orderID used in your analytics systems. This is used to reconcile BloomReach's analytics data with your analytics systems.\n\nVariable Type: String\n\nExample: \"12123455\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515542456447",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "10",
                "name": "BloomReach Page Type",
                "type": "jsm",
                "notes": "Maps your site's page type classifications to the values BloomReach expects for our page type classifications.\n\nRequired on *all* page views, including desktop, mobile, and tablet versions.\n\nBloomReach's Page Type classifications:\n\n* homepage -  homepage or landing pages\n* category - category listing pages and category product listing pages\n* search - search listing pages\n* product - product, product bundle, product collection or sku set pages\n* thematic - BloomReach thematic pages\n* content -  content pages\n* other - any pagetype that is not one of the above types. If not one of above, required to return other.\n\nVariable Type: String of enumerated type of (\"homepage\", \"product', \"category\", \"search\", \"content\", \"thematic\", \"jfy\", \"mlt\", \"trend\")\n\nVariable Example: \"homepage\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"other\"; \n}"
                    }
                ],
                "fingerprint": "1515544367022",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "11",
                "name": "BloomReach Product ID",
                "type": "jsm",
                "notes": "This is the unique ID, which describes a product, product bundle, product collection or sku set. If a product is available in multiple SKUs (e.g. color/size combinations), this field refers to the id shared by all the SKUs for a product.\n\nData Type: String, This field value is case-sensitive.\n\nDependencies: This field needs to match the unique product id sent in the feed.\n\nExamples:\n(1) Product Page: If your product ID is prod1234, return \"prod1234\"\n\n(2) Product Collection Page: \n    (a) If your Product Collection page has their own unique ID and is sold exactly like a standalone product, enter the collection ID. Make sure that this collection ID is sent in the feed as a product ID.\n\n    (b) If your Product Collection has their own unique ID, but cannot be purchased as a whole; only the collections' individual parts can be purchased and each of these individual parts have their own ID, enter the collection ID. Make sure that this collection ID is sent in the feed as a product ID.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515542471617",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "12",
                "name": "BloomReach Product Name",
                "type": "jsm",
                "notes": "The name of the product being viewed.\n\nFor Product PageViews (single product, product collection, product bundle, or sku set pages) only.\n\nVariable Type: String\nVariable Example: \"Blue Lace Dress\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515543916882",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "13",
                "name": "BloomReach Product SKU",
                "type": "jsm",
                "notes": "For Product PageViews only.\n\nUnique SKU ID representing the selected variant of this product (e.g. size M, color blue of a t-shirt). If SKU is not applicable to the product, leave this blank.\n\nVariable Type: String\nVariable Examples:\n\n\"789\"\n\"SM123\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515543928451",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "15",
                "name": "BloomReach Quick View Data",
                "type": "jsm",
                "notes": "The BloomReach Quick View Object contains detailed product information about a product being viewed in a Quick View. An example Quick View object that this variable might return:\n\n {\n      \"prod_id\" : \"pid123456\",\n      \"sku\": \"sku789\",\n      \"prod_name\": \"cashmere sweater\"\n}\n\n## Detailed Quick View Object Spec\n\nType: Object\n\nProperties:\n\nname: prod_id\ntype: String\nexample: \"pid123456\"\ndescription: Product ID. Needs to match Product ID sent in feed.\n\nname: sku\ntype: String\nexample: \"sku789\"\ndescription: Product SKU. Should match SKU ID sent in feed. Only applies if you have SKUs.\n\nname: prod_name\ntype: String\nexample: \"Cashmere Sweater\"\ndescription: Product Name.\n\n## Additional Details\n\nIf the Product Quick View is a Product Collection, Product Bundle or Sku Set:\n         (a)  Your Collection Pages have their own unique ID and are sold exactly like standalone products, then enter the collection ID in the prod_id \n                field. Make sure that this collection ID is sent in the feed in the product ID field.\n\n         (b) Your Product Collections have their own unique ID, but cannot be purchased as a whole; only the collections' individual parts/products \n               can be purchased and each of these individual parts have their own ID. In this case,  enter the collection ID in the prod_id field. Make sure \n               that this collection ID is sent in the feed in the product ID field.\n\n         (c) Your Products are a part of a Collection but can only be purchased from their own individual product page. In this case enter the product \n               ID of the first product in the prod_id field.\n\n## Additional Examples\n\nQuick view for product with a Sku:\n\n{\"prod_id\": \"34561234\", \"prod_name\": \"Blue Lace Dress\", \"sku\": \"987\"}\n\nQuick view for product without a sku:\n\n{\"prod_id\": \"12349028\", \"prod_name\": \"Beach Ball\"}\n\nQuick view for a Product Bundle: \n\n{\"prod_id\": \"set223344\", \"prod_name\": \"Linen Bed Set\"}",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515544582712",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "16",
                "name": "BloomReach Search Data",
                "type": "jsm",
                "notes": "The BloomReach Search Submit Object contains information about the search query being submitted. For example, if a user types `blue dress` and then clicks the search button or hits enter to submit the search,  this variable should return:\n\n{\"q\": \"blue dress\"}\n\n## Detailed Quick View Object Spec\n\nType: Object\n\nProperties:\n\nname: q\ntype: String\nexample: \"blue lace dress\"\ndescription: User's typed search query submitted to search box.",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return {\"q\": \"EXAMPLEVALUE\"}; \n}"
                    }
                ],
                "fingerprint": "1515544861006",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "18",
                "name": "BloomReach Search Term",
                "type": "jsm",
                "notes": "For search page views only, this it the value of the search query describing the page.\n\nVariable Type: String\nExample Values: \"blue dress\", \"red dress\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515544060432",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "17",
                "name": "BloomReach Suggest Data",
                "type": "jsm",
                "notes": "The BloomReach Search Suggest Object contains information about the search suggestion that was clicked as well as the typed value that lead to the suggestion from your auto suggest interface.\n\nFor example, when a user types `blu` and the auto-suggest window shows up and a user clicks the suggested search `blue summer dress`, this variable should return:\n\n{\n    \"aq\": \"blu\",\n    \"q\": \"blue summer dress\"\n}\n\n## Detailed Quick View Object Spec\n\nType: Object\n\nProperties:\n\nname: q\ntype: String\nexample: \"blue summer dress\"\ndescription: Value of suggested search, ie, search that is submitted to the search service.\n\nname: aq\ntype: String\nexample: \"blu\"\ndescription: User's typed search query submitted to search box.\n\n## Additional Examples:\n\n{\"aq\": \"re\", \"q\": \"red shoes\"}\n\n{\"aq\": \"blue su\", \"q\": \"blue summer dress\"}",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return {\"aq\": \"EXAMPLEVALUE\", \"q\": \"EXAMPLEVALUE\"}; \n}"
                    }
                ],
                "fingerprint": "1515544870186",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "19",
                "name": "BloomReach Tag Manager ID",
                "type": "c",
                "notes": "When more than one tag management solutions are firing BloomReach pixels simultaneously, this value is used as an identifier to filter out duplicate pixels. This value can be any string identifier as long as it is constant per tag manager solution.\n\nVariable Type: String\nExample Values: \"gtm\", \"googletagmanager\", \"dtm\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "value",
                        "value": "gtm"
                    }
                ],
                "fingerprint": "1497544955860",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "20",
                "name": "BloomReach User ID",
                "type": "jsm",
                "notes": "Universal customer ID, if you use one, to pass to BloomReach to recognize users in a way that is aligned with our system for various personalization features.  Should be an anonymized string and should not contain the user's email or other personally identifiable information.\n\nVariable Type: String\nExample Value: \"947345478564\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515544081695",
                "parentFolderId": "7"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "variableId": "21",
                "name": "BloomReach View ID",
                "type": "jsm",
                "notes": "Identifies the specific site catalog view to show when one BloomReach account ID hosts multiple site versions with unique product catalog characteristics, such as product price, availability, or titles. BloomReach uses View ID value to display the right product information for a user based on their site view. This must be consistent in the pixel, API and product catalog sent to BloomReach.\n\nThis field value is case-sensitive.\n\nVariable Type: String\nExample Value: \"10200\"",
                "parameter": [
                    {
                        "type": "TEMPLATE",
                        "key": "javascript",
                        "value": "function () {\n  // This is a sample custom function with no implementation.\n  // You will need to replace with own custom function that returns according to spec,\n  // or choose different gtm variable type that returns according to spec.\n  return \"EXAMPLEVALUE\"; \n}"
                    }
                ],
                "fingerprint": "1515544093860",
                "parentFolderId": "7"
            }
        ],
        "folder": [
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "folderId": "5",
                "name": "BloomReach Events",
                "fingerprint": "1497544955831"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "folderId": "6",
                "name": "BloomReach PageViews",
                "fingerprint": "1497544955832"
            },
            {
                "accountId": "1321514653",
                "containerId": "7061771",
                "folderId": "7",
                "name": "BloomReach Variables",
                "fingerprint": "1497544955832"
            }
        ],
        "fingerprint": "0",
        "tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/1321514653/containers/7061771/versions/0?apiLink=version"
    }
}

🚧

Using the GTM Templates

The GTM template files require you to insert your correct Bloomreach values (account id, domain_key, view_id) as needed. Additionally, the variables within the template need to be mapped to the variables you have in GTM. Importing the template without configuring these variables will not result in a working pixel.

It will be your responsibility to do the following:

  • For each Bloomreach tag, associate the proper triggers needed for the tag specification as provided in the tag's notes section.
  • For each Bloomreach variable, configure the variable's type and definition to return data that matches our specification provided in the variable's notes section.

The Step-by-Step Guide below assumes that:

  • You already have a GTM account and a container published on your website.
  • You have edit permissions to the container you wish to implement against.

If you need further help, please see the main pixel specification or consult with your Bloomreach representative. 

Step 1: Import Bloomreach tags/variables into your container

Your Bloomreach representative has created a JSON file that you can import into your GTM container. You can then modify the container triggers, variables, and rules as needed. You should also refer to Google's documentation to make your changes.

All Bloomreach items are prefixed with "Bloomreach" and are unlikely to conflict with existing items on your site. The items are categorized into folders prefixed with Bloomreach to help keep your container organized.

The name of the file follows the format BLOOMREACH-GTM-{{ACCT_ID}}-v1.json.

  1. Sign in to your Google Tag Manager Account.

  2. Select the container you wish to implement our pixels with.

  3. Select the Admin tab to navigate to the account and container settings page.

  4. In the container settings column, select Import Container.

  5. Click the Choose Container File button and select your provided JSON file (BLOOMREACH-GTM-{{ACCT_ID}}-v1.json).

  6. Select New workspace, name it Bloomreach Pixel Init, provide an optional description, and click Save.

  7. [IMPORTANT] Select Merge as the import option and then Rename conflicting tags, triggers, and variables. The imported items are scoped with Bloomreach names and it's highly unlikely you'll encounter naming conflicts.

  8. Preview, Verify, and then Confirm the import.

The Import Settings will look similar to image below, right before you confirm the import.

1134

Step 2: Configure Bloomreach Tag Triggers

All Bloomreach tags, except Bloomreach PageView are added without an associated trigger. You need to add triggers to each of the remaining tags based on how your site is configured.

If your GTM container doesn't have an existing Trigger that satisfies the criteria for firing the Bloomreach tag, you will need to setup a new Trigger.

  1. Navigate to Bloomreach Pixel Init workspace.

  2. Select Tags left-hand navigation item.

  3. Select the first Bloomreach tag.

  4. Use the Notes section to understand when you should fire this tag on your site (e.g. when a user clicks on the add to cart button)

  5. If you have an existing Trigger in GTM that satisfies the criteria, select Choose a trigger to make this tag fire and select from list of existing. If you do not have an existing Trigger, create one with the + icon.

  6. Repeat steps 4-5 for each remaining BloomReach tag until all tags have triggers.

Bloomreach Tags will look similar to below after triggers are added:

1920

Step 3: Configure Bloomreach Variables

At this point your tags will fire; however, they will be missing required data. You still need to configure each individual Bloomreach Variable.

📘

Note

On initial import, each Bloomreach Variable has been imported with a default variable type and setting for illustration purposes. Out of the box, none of the variables will resolve properly until they are configured according to how your site and GTM container is setup.

  1. Navigate to Bloomreach Pixel Init workspace.

  2. Select Variables left-hand navigation item.

  3. Select the first Bloomreach Variable.

  4. Use the Notes section to understand how to configure what type of GTM variable to use to.

  5. Select Variable Type and select the appropriate type from list. Commonly used ones will be Data Layer VariableJS Variable, and Custom JavaScript.

  6. Configure the variable such that when it is evaluated, it will return the type and format expected.

  7. Click Save.

Note: For integrating pixel using Google Tag Manager, we don’t have a checkout/conversion event. We have a pageview event that requires conversion data to be passed in at the time of the pageview. In the pageview event, we have a parameter called 'is_conversion'. For the Checkout Confirmation page(right after checkout), set the value of 'is_conversion' parameter to "1". For the rest of the checkout process pages, set the value of 'is_conversion' parameter to "0".

Step 4: Verify Pixel Implementation

  1. Deploy Container to your development environment or use the preview functionality of GTM to simulate your Bloomreach Pixel work.

  2. Use the Bloomreach Chrome Extension Pixel Validator to verify each tag.

  3. If you have any validation issues, please update GTM container appropriately to resolve.

  4. Notify your Bloomreach representative that container is deployed on staging.

Step 5: Publish

When you are confident your container is passing all validations and is ready to be deployed to production, publish your Bloomreach Pixel Init workspace to your production environment and notify your Bloomreach representative.

Step 6: Pixel Validation

The final step of the setup is to test your pixel configuration scenarios. Please follow the Bloomreach Pixel validation guidelines to ensure that your Bloomreach Pixel fires as expected.