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_**

**Parameter****Value**
**Tag Type**Custom Javascript
**Tag Name**Bloomreach PageView Event
**Labels**bloomreach
**Value**See Below Page View Code Snippet for Ensighten
**Tag Space**Depends on Ensighten manage setup
**Conditions**All Pages - Non blocking (Asynchronous)
**Choose which tag must first fire**Bloomreach Page View
**How soon should the tag fire**As soon as possible


#### 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_**

**Parameter**Value
**Tag Type**Custom Javascript
**Tag Name**Bloomreach Add To Cart Event
**Labels**bloomreach
**Value**See Snippet Below
**Tag Space**Depends on Ensighten manage setup
**Conditions**Events Add To Cart
**Choose which tag must first fire**Bloomreach Page View


#### 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_**

**Parameter**Value
**Tag Type**Custom Javascript
**Tag Name**Bloomreach Suggest Event
**Labels**bloomreach
**Value**See Suggest Code Snippet Below. <br><br> 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 Space**Depends on Ensighten manage setup
**Conditions**Events - Suggest
**Choose which tag must first fire**Bloomreach Page View
**How soon should the tag fire**As soon as possible


#### 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_**

**Parameter**Value
**Tag Type**Custom Javascript
**Tag Name**Bloomreach Search Event
**Labels**bloomreach
**Value**See Search Code Snippet Below.<br><br> 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 Space**Depends on Ensighten manage setup
**Conditions**Events - Search
**Choose which tag must first fire**Bloomreach Page View


#### 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_**

**Parameter**Value
**Tag Type**Custom Javascript
**Tag Name**Bloomreach Quick View Event
**Labels**bloomreach
**Value**See Quick View Code Snippet Below
**Tag Space**Depends on Ensighten manage setup
**Conditions**Events - Quickview
**Choose which tag must first fire**Bloomreach Page View


## 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_**

**Event**Value
**Event Name**Add To Cart
**Condition**All Pages - Non-blocking (Asynchronous)
**Named Event**ATC Event Code Snippet


### Suggest

**_Suggest Event for Ensighten_**

**Event**Value
**Event Name**Suggest
**Condition**All Pages - Non-blocking (Asynchronous)
**Named Event**Suggest Event Code Snippet


### Search

**_Search Event for Ensighten_**

**Event**Value
**Event Name**Search
**Condition**All Pages - Non-blocking (Asynchronous)
**Named Event**Search Event Code Snippet


### Quick View

**_Quick View Event for Ensighten_**

**Event**Value
**Event Name**Quick View
**Condition**All Pages - Non-blocking (Asynchronous)
**Named Event**Quick View Event Code Snippet


## 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)


 **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.  <br> <br>Required on **all** page views, including desktop, mobile, and tablet versions.  <br> <br>**BloomReach has 7 Page Type classifications: ** <br>_ **homepage** \- homepage or landing pages  <br>_ **category** \- category listing pages and category product listing pages  <br>_ **search** \- search listing pages  <br>_ **product** \- product or product collection pages  <br>_ **thematic** \- BloomReach thematic pages  <br>_ **content** \- content pages  <br>* **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)


** Product ID**

VariableFormatDependenciesDescription
prod_idVariable Type: String  <br>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)

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. <br> <br>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.  <br>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. <br> <br>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)


** 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  <br>(e.g. size M, color blue of a t-shirt).  <br> <br>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)


** Category ID**

VariableFormatDependenciesDescription
cat_idVariable Type: String  <br>This field value is case-sensitive.The category ID needs to match the "crumb_id" in the feed. <br> <br>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. <br>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)

ScenarioExamples
Unique Category ID (preferred scenario)Your site has a unique category ID for every category. <br> <br>Variable Examples:  <br>br\_data.cat\_id="106121" <br>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. <br>In this case, we ask you to concatenate the unique crumb path **without any delimiters or special characters** and send the value  <br>in the cat_id field.<br><br> <br>**Variable Example:**  <br>Your unique crumb path is " jewelry|by-collection|inspirational-jewelry" <br>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)

ScenarioExamplesColumn Title
Column Title
Column Title
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. <br> <br>Variable Format:


cat=" <unique bread crumb ID><unique catID><br> <br> " Variable Example: cat="106120106121"

Unique breadcrumb pathYour site has a unique bread crumb path for every category. <br> <br>Variable Format: cat="<top level crumb><first level crumb><second level crumb>" <br> <br> Crumbs need to be delimited by pipe () <br> <br>Variable Example: If your category crumb is "Home/Clothing/Outerwear" or "Home>Clothing>Outerwear" <br> <br>
cat="HomeClothingOuterwear"

**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.



** Search Term**

VariableFormatExamplesDependenciesDescription
search_termVariable Type: StringExample Values:  <br>search_term="blue dress"
The value of the search query describing the page. <br> <br>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)


** Is Conversion**

VariableFormatExamplesDependenciesDescription
is_conversionVariable Type: IntegerVariable Example: <br>br\_data.is\_conversion=1N/ASet to 1 on the Conversion or Thank you page  <br>(page after the customer completes the purchase).  <br> <br>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)


 **Order ID**

VariableFormatExamplesDependenciesDescription
order_idVariable Type: StringVariable Example: <br>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. <br> <br>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)

Additional Information
The Order ID is used to reconcile BloomReach's analytics data with your analytics systems.

** Basket Value**

VariableFormatExamplesDependenciesDescription
basket_valueVariable Type: String  <br> <br>Variable Format: <br>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  <br>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)

ScenarioExamples
Checkout with tax & shippingIf the checkout basket was $100 with $5 tax and $10 shipping, the value for this parameter should be  <br>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  <br>basket_value= "100.00"

** Basket**

VariableFormatDescription
br_data.basketVariable Type: Object <br> <br>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.

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. <br> <br>**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.  <br>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)

ScenarioExample
2 Products,  <br>→ the first product has a sku,  <br>→ the second product does not have a Sku2 products, first product has a sku, second product does not have a sku.<br><br>**First Product: **Individual Product** ** <br>Product ID: pid123456 <br>Sku ID: sku789<br><br>**Second Product: Individual Product** <br>Product ID: pid56789<br><br>See Sample Code Snippet

ScenarioExample
2 Products,  <br>→ the first product (pullover) was purchased in white and blue (2 different Skus)  <br>→ the second product does not have a SkuThe first product was purchased in two Skus (e.g. a pullover purchased in white and blue), the second product does not have a sku.<br><br>**First Product: **Individual product purchased in 2 Skus** ** <br>Product ID (e.g. pullover): pid123456 <br>Sku ID 1 (white): sku789 <br>Sku ID 2 (blue): sku790<br><br>**Second Product: Individual product** <br>Product ID: pid56789<br><br>See Sample Code Snippet

ScenarioExample
2 Products,  <br>→ the first product is a Product Collection with its own unique ID and is sold exactly like standalone products,  <br>→ 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.<br><br>**First Product: Product Collection**  <br>Collection ID: collection223344<br><br>**Second Product: Individual Product** <br>Product ID: pid56789<br><br>See Sample Code Snippet

ScenarioExample
2 Products,  <br>→ 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 ,  <br>→ 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.  <br> <br>**First Product: Product Collection**  <br>Collection ID: collection223344 with 2 individuals products. <br>Product ID: pid1111 <br>Product ID: pid2222<br><br>**Second Product: Individual Product** <br>Product ID: pid56789<br><br> <br>Make sure that each product ID is sent in the feed in the product ID field.<br><br>See Sample Code Snippet

ScenarioExample
2 Products,  <br>→ 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.  <br>→ 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. <br> <br><br>**First Product: Product Collection**  <br>Collection ID: collection223344 with 2 individuals products. <br>Product ID: pid1111 <br>Product ID: pid2222<br><br>**Second Product: Individual Product** <br>Product ID: pid56789<br><br>See Sample Code Snippet


**Additional Information** The key-value data you send us will be transformed into the format below:<br><br>E.g. !ipid123456'ssku789'nCashmere Sweater'q1.0'p69.95!ipid56789'nBlue Skinny Jeans'q1.0'p79.99<br><br>Each product in the cart will be separated by !. Each product's details will be separated by '.<br><br>

  • 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> - Sku id, only applies if you have skus.

  • n<product_name>

  • q<quantity>

  • p<price> - 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)


 **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)


 **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)


** Domain Key (Only required for multiple language versions)**

VariableFormatExamplesDependenciesDescription
domain_keyVariable Type: String <br>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**. <br>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 <br>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.  <br> <br>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**. <br>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.  <br>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** . <br>This will allow Bloomreach to recognize users in a way that is aligned with your system for various personalization features.   <br>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: tlm
The name of the Tag Management system, that should be filtered out.  <br> <br>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.  <br> <br>**BloomReach has the following Tag Mgmt classifications:** <br>tms="tlm" for Tealium
Additional Information
This parameter is **optional** and only required during the transition time from one tag management system to another.  <br>Leave this field empty, if this scenario does not apply.