Ensighten Tag Manager

If your site uses Ensighten Tag Manager to implement third-party tags such as the Bloomreach's Pixel, we have created this guide to help you implement our Pixel specification.

Bloomreach will provide you a list of Tags and Variables to add to your Ensighten container to help get you started.

It will be your responsibility:

  • 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 Ensighten 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: Configure Bloomreach Tag Triggers

There are 5 different tags to fire from Ensighten for a Bloomreach Pixel implementation.

Bloomreach Page View Tag Trigger

This tag needs to fire on every page view, including any AJAX interactions that trigger an additional page view, but not a full page load. An important thing to note here is that getting an accurate page type ( ptype ) classification is a major component and is covered in further details in the Data section.

The conditions value is dependent on your site setup; however, example conditions using events have been added. These example events are described in the Events section.

🚧

The Page View Tag also needs to fire on any virtual page views, such as AJAX interactions that load content outside of the normal page load cycle.

Page View Tag for Ensighten

ParameterValue
Tag TypeCustom Javascript
Tag NameBloomreach PageView Event
Labelsbloomreach
ValueSee Below Page View Code Snippet for Ensighten
Tag SpaceDepends on Ensighten manage setup
ConditionsAll Pages - Non blocking (Asynchronous)
Choose which tag must first fireBloomreach Page View
How soon should the tag fireAs soon as possible
window.br_data = window.br_data || {};
window.br_data.acct_id = %%data.Manage.bloomreach.acct_id%%; 
window.br_data.ptype = %%data.Manage.bloomreach.ptype%%;
   
if (window.br_data.ptype === "product") {
  window.br_data.prod_id = %%data.Manage.bloomreach.prod_id%%;
  window.br_data.prod_name = %%data.Manage.bloomreach.prod_name%%;
  window.br_data.sku = %%data.Manage.bloomreach.sku%%;
}
   
if (window.br_data.ptype === "category") {
  window.br_data.cat_id = %%data.Manage.bloomreach.cat_id%%;
  window.br_data.cat = %%data.Manage.bloomreach.cat%%;
}
   
if (window.br_data.ptype === "search") {
  window.br_data.search_term = %%data.Manage.bloomreach.search_term%%;
}
   
if (%%data.Manage.bloomreach.is_conversion%% === 1) {
  window.br_data.is_conversion = %%data.Manage.bloomreach.is_conversion%%;
  window.br_data.basket_value = %%data.Manage.bloomreach.basket_value%%;
  window.br_data.order_id = %%data.Manage.bloomreach.order_id%%;
  window.br_data.basket = %%data.Manage.bloomreach.basket%%;
}
   
(function() {
  var brtrk = document.createElement('script');
  brtrk.type = 'text/javascript';
  brtrk.async = true;
  brtrk.src = 'https:' == document.location.protocol ? "https://cdns.brsrvr.com/v1/br-trk-"+%%data.Manage.bloomreach.acct_id%%+".js" : "http://cdn.brcdn.com/v1/br-trk-"+%%data.Manage.bloomreach.acct_id%%+".js";
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(brtrk, s);
})();

Bloomreach ATC Tag Trigger

Any time 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. If an Add To Cart button is located anywhere else on your site (e.g. Product Collection pages) , please also fire this tag there as well.

Add To Cart Tag for Ensighten

ParameterValue
Tag TypeCustom Javascript
Tag NameBloomreach Add To Cart Event
Labelsbloomreach
ValueSee Snippet Below
Tag SpaceDepends on Ensighten manage setup
ConditionsEvents Add To Cart
Choose which tag must first fireBloomreach Page View
window.br_data = window.br_data || {};
window.br_data.acct_id = %%data.Manage.bloomreach.acct_id%%; 
window.br_data.ptype = %%data.Manage.bloomreach.ptype%%;

if (window.br_data.ptype === "product") {
  window.br_data.prod_id = %%data.Manage.bloomreach.prod_id%%;
  window.br_data.prod_name = %%data.Manage.bloomreach.prod_name%%;
  window.br_data.sku = %%data.Manage.bloomreach.sku%%;
}

if (window.br_data.ptype === "category") {
  window.br_data.cat_id = %%data.Manage.bloomreach.cat_id%%;
  window.br_data.cat = %%data.Manage.bloomreach.cat%%;
}

if (window.br_data.ptype === "search") {
  window.br_data.search_term = %%data.Manage.bloomreach.search_term%%;
}

if (%%data.Manage.bloomreach.is_conversion%% === 1) {
  window.br_data.is_conversion = %%data.Manage.bloomreach.is_conversion%%;
  window.br_data.basket_value = %%data.Manage.bloomreach.basket_value%%;
  window.br_data.order_id = %%data.Manage.bloomreach.order_id%%;
  window.br_data.basket = %%data.Manage.bloomreach.basket%%;
}  

(function() {
  var brtrk = document.createElement('script');
  brtrk.type = 'text/javascript';
  brtrk.async = true;
  brtrk.src = 'https:' == document.location.protocol ? "https://cdns.brsrvr.com/v1/br-trk-"+%%data.Manage.bloomreach.acct_id%%+".js" : "http://cdn.brcdn.com/v1/br-trk-"+%%data.Manage.bloomreach.acct_id%%+".js";

  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(brtrk, s);
})();

Bloomreach Suggest Tag Trigger

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. 
If you do not have autosuggest, skip this section. 
Suggest Tag for Ensighten

ParameterValue
Tag TypeCustom Javascript
Tag NameBloomreach Suggest Event
Labelsbloomreach
ValueSee Suggest Code Snippet Below.

Note: The last parameter (deferred) is set to "true", which the next pixel that is fired (typically the search page view pixel) will automatically contain the parameters fired in the Search Suggest event pixel prefixed with "df_".
Tag SpaceDepends on Ensighten manage setup
ConditionsEvents - Suggest
Choose which tag must first fireBloomreach Page View
How soon should the tag fireAs soon as possible
BrTrk.getTracker().logEvent('suggest', 'click', %%data.Manage.bloomreach.suggest%%, {}, true);

Bloomreach Search Tag Trigger

If a user types`woven scarf` and then clicks the search button or hits enter to submit the search, Bloomreach expects a search event pixel to fire that contains information about the search query. 
Search Tag for Ensighten

ParameterValue
Tag TypeCustom Javascript
Tag NameBloomreach Search Event
Labelsbloomreach
ValueSee Search Code Snippet Below.

Note: The last parameter ( deferred) is set to "true", which the next pixel that is fired (typically the search page view pixel) will automatically contain the parameters fired in the Search Submit event pixel prefixed with "df_".
Tag SpaceDepends on Ensighten manage setup
ConditionsEvents - Search
Choose which tag must first fireBloomreach Page View
BrTrk.getTracker().logEvent('suggest', 'submit', %%data.Manage.bloomreach.search%%, {}, true);

Bloomreach Quick View Tag Trigger

The Quick View event should be fired directly after someone opens a product quick view, commonly found category display pages. However, if you have quick view on other page types as well, this event should be fired.

Quickview Tag for Ensighten

ParameterValue
Tag TypeCustom Javascript
Tag NameBloomreach Quick View Event
Labelsbloomreach
ValueSee Quick View Code Snippet Below
Tag SpaceDepends on Ensighten manage setup
ConditionsEvents - Quickview
Choose which tag must first fireBloomreach Page View
BrTrk.getTracker().logEvent('product', 'quickview', %%data.Manage.bloomreach.quickview%%);

Step 2: Configure Bloomreach Events


Creating these events in Ensighten will make firing the appropriate BloomReach pixel easier to work with. Recommendation is to use Named Events and add the appropriate call to Bootstrapper.ensEvent.trigger in your application javascript

Add To Cart

ATC Event for Ensighten

EventValue
Event NameAdd To Cart
ConditionAll Pages - Non-blocking (Asynchronous)
Named EventATC Event Code Snippet
Bootstrapper.ensEvent.trigger("Add To Cart");

Suggest

Suggest Event for Ensighten

EventValue
Event NameSuggest
ConditionAll Pages - Non-blocking (Asynchronous)
Named EventSuggest Event Code Snippet
Bootstrapper.ensEvent.trigger("Suggest");

Search

Search Event for Ensighten

EventValue
Event NameSearch
ConditionAll Pages - Non-blocking (Asynchronous)
Named EventSearch Event Code Snippet
Bootstrapper.ensEvent.trigger("Search");

Quick View

Quick View Event for Ensighten

EventValue
Event NameQuick View
ConditionAll Pages - Non-blocking (Asynchronous)
Named EventQuick View Event Code Snippet
Bootstrapper.ensEvent.trigger("Quick View")

Step 3: Configure Bloomreach Variables


It is possible to add these data elements inline in the associated Tag’s javascript; however, it’s recommended to separate them out into their own data elements for easier management and tracking.

Custom example values have been provided; however, if you need assistance please reach out.

Bloomreach Data Variables for Ensighten

Account ID

VariableFormatExamplesDependenciesDescription
acct_idVariable Type: StringVariable Example: "1235"Consistent with acct_id passed in API callThe BloomReach-provided Account identifier
ParameterValue
Data Definition Nameacct_id
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  return "1235";
}

 Ptype

VariableFormatExamplesDependenciesDescription
ptypeVariable Type: StringVariable Example: "homepage"Getting an accurate page type ( ptype ) classification is a major component for all of Bloomreach's products.Maps your site's page type classifications to the values BloomReach expects for our page type classifications. 

Required on all page views, including desktop, mobile, and tablet versions. 

BloomReach has 7 Page Type classifications: 
 homepage - homepage or landing pages 
 category - category listing pages and category product listing pages 
 search - search listing pages 
 product - product or product collection pages 
 thematic - BloomReach thematic pages 
 content - content pages 
* other - any page type that is not one of the above types ==
ParameterValue
Data Definition Nameptype
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below for Snippet
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  var pageType = "";

  if (dataLayer && dataLayer.pageType) {
    pageType = dataLayer.pageType
  }

  if (pageType === "home") {
    return "homepage";
  } 

  if (pageType === "pdp") {
    return "product";
  } 

  if (pageType === "Category Page" || pageType === "High Level Category") {
    return "category";
  }

  if (pageType === "search") {
    return "search";
  }

  if (pageType === "content") {
    return "content";
  }  

  if (pageType === "thematic") {
    return "thematic";
  }

  if (pageType === "mlt") {
    return "mlt";
  }

  if (pageType === "personalized") {
    return "personalized";
  }
}

 Product ID

VariableFormatDependenciesDescription
prod_idVariable Type: String 
This field value is case-sensitive.
Product ID or Product Collection ID needs to match the product ID field in the feedThis is the unique ID, which describes a product or product collection. 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.
ParameterValue
Data Definition Nameprod_id
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.product && dataLayer.product.group_id) {
    return dataLayer.product.group_id;
  }
}
ScenarioExamples
Product Detail Page (PDP)If your product ID is prod1234, br_data.prod_id="prod1234"
Product Collection page with a unique Product IDIf 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.

If your collection ID is collection5678, br_data.prod_id="collection5678"
Product Collection page with a unique ID, but cannot be purchased as a wholeIf 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

 Product Name

VariableFormatExamplesDependenciesDescription
prod_nameVariable Type: StringVariable Example: "Blue Lace Dress"N/AThe name of the product being viewed.

For Product PageViews (single product or product collection pages) only.
ParameterValue
Data Definition Nameprod_name
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.product && dataLayer.product.name) {
    return dataLayer.product.name;
  }
}

 SKU

VariableFormatExamplesDependenciesDescription
skuVariable Type: StringVariable Example: "sku7778"Needs to match the sku ID field in the feed.Unique SKU id that representing the selected variant of this product 
(e.g. size M, color blue of a t-shirt). 

If your site does not have SKUs, leave this blank.
ParameterValue
Data Definition Namesku
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.product && dataLayer.product.sku) {
    return dataLayer.product.sku;
  }
}

 Category ID

VariableFormatDependenciesDescription
cat_idVariable Type: String 
This field value is case-sensitive.
The category ID needs to match the "crumb_id" in the feed.

For Search implementations, the unique category ID needs to be passed in the API call.
Unique category ID as referred to in the database/catalog.
Bloomreach requires the cat_id field to be unique across your site.
ParameterValue
Data Definition Namecat_id
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.category && dataLayer.category.id) {
    return dataLayer.category.id;
  }
}
ScenarioExamples
Unique Category ID (preferred scenario)Your site has a unique category ID for every category.

Variable Examples: 
br_data.cat_id="106121"
br_data.cat_id="cat749"
No unique category ID, but unique crumb pathYour site page does not have a unique category ID for every category, but it has a unique crumb path for every category.
In this case, we ask you to concatenate the unique crumb path without any delimiters or special characters and send the value 
in the cat_id field.


Variable Example: 
Your unique crumb path is " jewelry|by-collection|inspirational-jewelry"
br_data.cat_id="jewelrybycollectioninspirationaljewelry "
No unique category ID and no unique crumb pathPlease talk to your Bloomreach representative before or during the Kickoff call to discuss options for your implementation.

 Category Name/ Bread crumb

VariableFormatDependenciesDescription
catVariable Type: StringMatch the "crumbs" field in the product feedThe breadcrumb of the page.
ParameterValue
Data Definition Namecat
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.category && dataLayer.category.name) {
    return dataLayer.category.name.split(" > ").join("|");
  }
}
ScenarioExamples
Unique Category ID and unique breadcrumb ID (preferred scenario)Your site has a unique category ID for every category and a unique bread crumb in form of an ID for every category.

Variable Format:
cat="

" Variable Example: cat="106120
Unique breadcrumb pathYour site has a unique bread crumb path for every category.

Variable Format: cat="
cat="HomeClothing
No unique category ID and Nounique crumb pathPlease talk to your Bloomreach representative before or during the Kickoff call to discuss options for your implementation.

 Search Term

VariableFormatExamplesDependenciesDescription
search_termVariable Type: StringExample Values: 
search_term="blue dress"
The value of the search query describing the page.

For search page views only.
ParameterValue
Data Definition Namesearch_term
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.search) {
    return dataLayer.search;
  }
}

 Is Conversion

VariableFormatExamplesDependenciesDescription
is_conversionVariable Type: IntegerVariable Example:
br_data.is_conversion=1
N/ASet to 1 on the Conversion or Thank you page 
(page after the customer completes the purchase). 

For Conversion Pages only.
ParameterValue
Data Definition Nameis_conversion
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.checkout && dataLayer.checkout === true) {
    return 1;
  }
  return 0;
}

 Order ID

VariableFormatExamplesDependenciesDescription
order_idVariable Type: StringVariable Example:
order_id="12123455"
This id has to match the orderID used in your analytics systemsThe order id associated with the order placed. This id should match the orderID used in your analytics systems.

For Conversion pages only
ParameterValue
Data Definition Nameorder_id
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.transaction && dataLayer.transaction.id) {
      return dataLayer.transaction.id;
  }
}
Additional Information
The Order ID is used to reconcile BloomReach's analytics data with your analytics systems.

 Basket Value

VariableFormatExamplesDependenciesDescription
basket_valueVariable Type: String 

Variable Format:
The total price of the checkout basket in the account currency without any symbols.
If the checkout basket was $100 with $5 tax and $10 shipping, the value for this parameter should be 
basket_value="115.00".
The total price of the checkout basket including tax, discounts, shipping and/or discounts in the account currency. For conversion pages only.
ParameterValue
Data Definition Namebasket_value
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if (dataLayer && dataLayer.transaction && dataLayer.transaction.total) {
    return dataLayer.transaction.total;
  }
}
ScenarioExamples
Checkout with tax & shippingIf the checkout basket was $100 with $5 tax and $10 shipping, the value for this parameter should be 
basket_value= "115.00"
Checkout with discount, tax & shippingIf the checkout basket was $100 with $0 tax, $10 discount and $10 shipping, the value for this parameter should be 
basket_value= "100.00"

 Basket

VariableFormatDescription
br_data.basketVariable Type: Object

This 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 below.
{ "items":
   [
    {
      "prod_id" : "pid123456",
      "sku": "sku789",
      "name": "Cashmere Sweater",
      "quantity": "1",
      "price": "65.95"
    },
    {
      "prod_id" : "pid56789",
      "sku": "",
      "name": "Blue Skinny Jeans",
      "quantity": "2",
      "price": "79.99"
    }
   ]
};
Basket Object ItemsVariable TypeDependencyDescription
prod_idStringNeeds to match Product ID sent in feedThis is the unique ID, which describes a product or product collection.
skuStringNeeds to match SKU ID sent in feed.

Only applies if your site has SKUs.
If your site has Skus, list the sku(s) in the basket.
nameString??The name of the product in the basket.
quantityIntegerN/AThe quantity of the product in the basket.
priceString??The unit price per product, not the total price. 
If item is on sale, this is the unit sale price.
ParameterValue
Data Definition Namebasket
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  var items = [];
  if (dataLayer && dataLayer.transaction && dataLayer.transaction.products && dataLayer.transaction.products.length > 0) {
    for (var i = 0; i < dataLayer.transaction.products.length; i++) {
        items.push({
            "prod_id": dataLayer.transaction.products[i].id,
            "name": dataLayer.transaction.products[i].name,
            "sku": dataLayer.transaction.products[i].sku,
            "quantity": dataLayer.transaction.products[i].quantity,
            "price": dataLayer.transaction.products[i].price
        });
    }
  }
  return {"items": items};
}
ScenarioExample
2 Products, 
→ the first product has a sku, 
→ the second product does not have a Sku
2 products, first product has a sku, second product does not have a sku.

First Product: Individual Product** 
Product ID: pid123456
Sku ID: sku789

Second Product: Individual Product**
Product ID: pid56789

See Sample Code Snippet
{ "items":
   [
    {
      "prod_id" : "pid123456",
      "sku": "sku789",
      "name": "Cashmere Sweater",
      "quantity": "1",
      "price": "65.95"
    },
    {
      "prod_id" : "pid56789",
      "sku": "",
      "name": "Blue Skinny Jeans",
      "quantity": "2",
      "price": "79.99"
    }
   ]
};
ScenarioExample
2 Products, 
→ the first product (pullover) was purchased in white and blue (2 different Skus) 
→ the second product does not have a Sku
The first product was purchased in two Skus (e.g. a pullover purchased in white and blue), the second product does not have a sku.

First Product: Individual product purchased in 2 Skus** 
Product ID (e.g. pullover): pid123456
Sku ID 1 (white): sku789
Sku ID 2 (blue): sku790

Second Product: Individual product**
Product ID: pid56789

See Sample Code Snippet
{ "items":
   [
    {
      "prod_id" : "pid123456",
      "sku": "sku789",
      "name": "Cashmere Sweater White",
      "quantity": "2",
      "price": "120.00"
    },
    {
      "prod_id" : "pid123456",
      "sku": "sku790",
      "name": "Cashmere Sweater Blue",
      "quantity": "1",
      "price": "60.00"
    },
    {
      "prod_id" : "pid56789",
      "sku": "",
      "name": "Blue Skinny Jeans",
      "quantity": "2",
      "price": "79.99"
    }
   ]
};
ScenarioExample
2 Products, 
→ the first product is a Product Collection with its own unique ID and is sold exactly like standalone products, 
→ the second product is an individual product.
Your Collection Pages have their own unique ID and are sold exactly like standalone products, then enter the collection ID in the prod_id field. Make sure that this collection ID is sent in the feed in the product ID field.

First Product: Product Collection 
Collection ID: collection223344

Second Product: Individual Product
Product ID: pid56789

See Sample Code Snippet
{ "items":
   [
    {
      "prod_id" : "collection223344",
      "sku": "",
      "name": "Linen Bed Sheet Set",
      "quantity": "1",
      "price": "265.95"
    },
    {
      "prod_id" : "pid56789",
      "sku": "",
      "name": "Blue Skinny Jeans",
      "quantity": "2",
      "price": "79.99"
    }
   ]
};
ScenarioExample
2 Products, 
→ the first product is a Product Collection with 2 individual products. The Collection has its own unique ID but it cannot be purchased as a whole , 
→ the second product is an individual product.
Your Product Collections have their own unique ID, but cannot be purchased as a whole; only the collections' individual parts/products 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 prod_id is the the ID of each product. 

First Product: Product Collection 
Collection ID: collection223344 with 2 individuals products.
Product ID: pid1111
Product ID: pid2222

Second Product: Individual Product
Product ID: pid56789


Make sure that each product ID is sent in the feed in the product ID field.

See Sample Code Snippet
{ "items":
   [
    {
      "prod_id" : "pid1111",
      "sku": "",
      "name": "Linen Pillow",
      "quantity": "1",
      "price": "35.95"
    },
    {
      "prod_id" : "pid2222",
      "sku": "",
      "name": "Linen Comforter",
      "quantity": "1",
      "price": "230.00"
    }, 
    {
      "prod_id" : "pid56789",
      "sku": "",
      "name": "Blue Skinny Jeans",
      "quantity": "2",
      "price": "79.99"
    }
   ]
};
ScenarioExample
2 Products, 
→ the first product is a Product Collection with 2 individual products. The products are part of a collection, but can only be purchased from their own individual page. 
→ the second product is an individual product.
Products that are a part of a Collection but can only be purchased from their own individual product page.
 

First Product: Product Collection 
Collection ID: collection223344 with 2 individuals products.
Product ID: pid1111
Product ID: pid2222

Second Product: Individual Product
Product ID: pid56789

See Sample Code Snippet
{ "items":
   [
    {
      "prod_id" : "pid1111",
      "sku": "",
      "name": "Linen Pillow",
      "quantity": "1",
      "price": "35.95"
    },
    {
      "prod_id" : "pid2222",
      "sku": "",
      "name": "Linen Comforter",
      "quantity": "1",
      "price": "230.00"
    }, 
    {
      "prod_id" : "pid56789",
      "sku": "",
      "name": "Blue Skinny Jeans",
      "quantity": "2",
      "price": "79.99"
    }
   ]
};

Additional Information
The key-value data you send us will be transformed into the format below:

E.g. !ipid123456'ssku789'nCashmere Sweater'q1.0'p69.95!ipid56789'nBlue Skinny Jeans'q1.0'p79.99

Each product in the cart will be separated by !. Each product's details will be separated by '.

  • i<prod_id> - This is the product id and not another id such as sku id or collection id. This should match the unique product id sent in the feed.
  • s - Sku id, only applies if you have skus.
  • n<product_name>
  • q
  • p - This should be the unit price per product and not total price. If the item is on sale, this is the unit sale price.

 Search

ParameterValue
Data Definition Namesearch
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
    if (dataLayer && dataLayer.search) {
        return {"q": dataLayer.search};
    }
}

 Suggest

ParameterValue
Data Definition Namesuggest
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
    if (dataLayer && dataLayer.suggest) {
        return {"q": dataLayer.suggest.suggestedQuery, "aq": dataLayer.suggest.typedQuery};
    }
}

 quickview

ParameterValue
Data Definition Namequickview
What kind of data element are you creatingCustom
Select collectionbloomreach
Get the Data FromCustom
Custom Example ValueSee Below
Advanced Settings, PersistenceInstance
Advanced Settings, TriggerImmediate
Spacesdepends on Ensighten manage setup
ConditionsAll Pages - Non-blocking (Asynchronous)
function() {
  if  (dataLayer && dataLayer.quickView) {
    return {"prod_id": dataLayer.quickView.id, "sku": dataLayer.quickView.sku, "prod_name": dataLayer.quickView.name};
  }
}

 Domain Key (Only required for multiple language versions)

VariableFormatExamplesDependenciesDescription
domain_keyVariable Type: String
This field value is case-sensitive.
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.
Additional Information
This parameter is optional and only required if you integrate on a site with multiple language versions.
Your BloomReach Technical Account Manager will provide the domain key information during the technical Kickoff call if you have a site with multiple language versions.

 View ID (Only required for multiple site versions)

VariableFormatExamplesDependenciesDescription
view_idVariable Type: String
This field value is case-sensitive.
Variable Example: "10200"Consistent in Pixel, API & Feed.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.
Additional Information
This parameter is optional and only required if you integrate on a site with multiple site versions with unique product catalog characteristics.
Your BloomReach Technical Account Manager will provide the domain key information during the technical Kickoff call if you have a site with multiple language versions.

User ID (Only required for tracking users with a universal customer ID)

VariableFormatExamplesDependenciesDescription
user_idVariable Type: StringVariable Example: "947345478564"If you track users via a universal customer ID, populate this parameter with that ID. 
This should be an anonymized string (e.g. 947345478564). It should not contain the user's email or other personally identifiable information.
Additional Information
This parameter is optional and only required if you track users via a universal customer ID .
This will allow Bloomreach to recognize users in a way that is aligned with your system for various personalization features.  
If you do not track users this way, leave this blank.

Tms (Only required if you are transitioning from one tag manager to another)

VariableFormatExamplesDependenciesDescription
tmsVariable Type: StringVariable Example: tlmThe name of the Tag Management system, that should be filtered out. 

In case of migration from one tag management system to another, there may be a transition time frame, when the pixel is fired by two systems simultaneously. Setting the "tms" param will allow  BloomReach analytics system  to filter out duplicate pixels. 

BloomReach has the following Tag Mgmt classifications:
tms="tlm" for Tealium
Additional Information
This parameter is optional and only required during the transition time from one tag management system to another. 
Leave this field empty, if this scenario does not apply.