Conversion Page View Pixel

What are Conversion Page View Pixels


Conversion page view pixels are page view events that track views of conversion pages (e.g., post-purchase Thank you page).

How to Implement Conversion Page View Pixels


  • Go to your Conversion/ Thank You Page Template and add basket and Conversion specific Page View parameters in the Global Tracking snippet.
  • When your checkout page (or portions of it) is loaded dynamically via AJAX, remember to add additional handlers for single page application tracking.

Conversion Page View Variables Checklist


The following lists the tracking variables required specifically for conversion page view pixels. Please note that these must be included in addition to the Global Page View variables.

VariableValue name, exampleDescription
basketObject containing an array of product objects like {prod_id, sku, name, quantity, price}This object contains a property called items, which is an array of the product objects purchased.
basket_valuestring, "100.00"The total price of the checkout basket, which may include tax, discounts, and shipping (depending on how you wish to report revenue, ideally matching other BI reports).

If the checkout basket was $100 with $5 tax and $10 shipping, then br_data.basket_value="115.00"

If the checkout basket was $100 with $0 tax, $10 discount, and $10 shipping, then br_data.basket_value="100.00"

The total price is taken either in
a) the account currency or
b) the currency specified by the currency parameter

For example:
If the account currency is USD and the incoming event has basket_value=”100” and an undefined or empty currency parameter, the value will be stored in USD.
If currency=”EUR” is also passed with basket_value=95, it is converted (based on exchange rate) to the account currency and stored as 100 USD.
Read more on multi-currency .

This basket value must match the basket value used in your analytics systems.
currencystring, "GBP"Designates the currency code for the transaction. We configure the currency value according to your needs.

You can choose from EUR, GBP, USD, or any other supported currency mentioned below.
AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTC, BTN, BWP, BYN, BZD, CAD, CDF, CHF, CLF, CLP, CNH, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GGP, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, IMP, INR, IQD, IRR, ISK, JEP, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MRU, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLL, SOS, SRD, SSP, STD, STN, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VEF, VES, VND, VUV, WST, XAF, XAG, XAU, XCD, XDR, XOF, XPD, XPF, XPT, YER, ZAR, ZMW, ZWL
is_conversioninteger, "1"This parameter is set to 1 to indicate this is a Conversion or Thank you page (page after the customer completes the purchase).

If you are using JS tracker brtrk, then value 1 also means that brtrk will encode basket JSON into basket encoded string for the API.

🚧 Deprecated
If you send ptype = "other" on the Conversion page, is_conversion must be set to 1.
order_idstring, "12123455"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.

Basket Object

Each basket object contains an items array, which contains product objects with the following variables:

VariableValue type, exampleDescription
prod_idstring, "pid123456"This is a unique ID that describes a product or product collection. This value must match the Product ID sent in the feed.

1. All product IDs purchased must be in the basket.
2. It needs to match with the product ID(s) from the 'Add to Cart' and Product Page View pixels
3. Cannot be empty
skustring, "sku789"If your site has variants, list the variant(s) in the basket. This must match the variant ID sent in the feed. If there are no variants purchased, populate this with the product ID.

If your site has no variants, leave the sku value empty.
namestring, "Cashmere Sweater"The name of the product in the basket.
quantityint, "1"The quantity of the product in the basket.
pricestring, "65.95"The unit price per product, not the total price. The price should be of a single product, even if the quantity varies. If the item is on sale, this is the unit sale price.

NOTE: The price is entered either in
a) the account currency or
b) the currency specified by the currency parameter

For example:
If the account currency is USD and the incoming event has basket_value=”100” and an undefined or empty currency parameter, the value will be stored in USD.
If currency=”EUR” is also passed with basket_value=95, it is converted (based on the exchange rate) to the account currency and stored as 100 USD.
Read more on multi-currency.

Basket Product ID and SKU ID Scenarios

You have to enter certain values for the prod_ID and sku, depending on what products are in the basket. Create a product object for each product ID (and SKU, if your site has SKUs) in the basket.

Scenario Example value
Scenario 1:

Product 1 has one SKU

Product 2 has no SKU
Create 2 objects (Product 1 and Product 2)

Product 1:
prod_id: pid123456
sku: sku789

Product 2:
prod_id: pid56789

{
  "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"
    }
  ]
}
Scenario 2:

Product 1 has two SKUs

Product 2 has no SKU
Create 3 objects (Both SKUs of Product 1, and Product 2)

Product 1:
prod_id: pid123456
sku: sku789
sku: sku790

Product 2:
prod_id: pid56789

{
  "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"
    }
  ]
}   
      
Scenario 3:

Product 1 is a Product Collection with its own unique ID and is sold exactly like a standalone product

Product 2 is an individual product
Create 2 objects (Product Collection and Product 2)

Product 1:
prod_id: collection223344

Product 2:
prod_id: pid56789

{
  "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"
    }
  ]   
  
Scenario 4:

Product 1 is a Product Collection with 2 individual products. The Collection has its own unique ID but cannot be purchased as a whole, and each product must be purchased individually

Product 2 is an individual product
Create 3 objects (Two products of the Product 1 Product Collection and Product 2)

Object 1:
prod_id: pid1111 (part of collection223344)

Object 2:
prod_id: pid2222 (part of collection223344)

Object 3:
prod_id: pid56789

{
  "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 Basket Information

Additional Basket Information for native implementation

The key-value data you send us in the basket will be transformed into the format below in the executed pixel (pix.gif) file:

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

  1. i - 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.
  2. s - Sku id, only applies if you have skus.
  3. n - product_name.
  4. q - quantity of the product in the basket.
  5. p - This should be the unit price per product and not the total price. If the item is on sale, this is the unit sale price.

Do not percent encode the ! separators

📘

For a full list of required and optional variables, see Pixel Reference

Implementing Pixel in a Test Environment

If you are implementing the pixel in a test environment (development, staging, UAT, etc.), you must add the test_data variable. When set to “true”, this flags pixel data to be ignored during analytics processing. Read more about the test_data variable here.

Tracking Snippets for Search Result Page View Pixels


The following are the customized tracking snippets for both JavaScript and Native app implementations. Here ptype is set to “conversion” and is_conversion=”1” for the conversion page view pixel.

JavaScript Implementation

<script type="text/javascript">
  var br_data = br_data || {};
  // Global tracking parameters
  br_data.acct_id = "<Bloomreach Provided Account ID>"; 
  br_data.ptype = "conversion";
  br_data.title = "<title of current page>";
  br_data.domain_key = "";
  br_data.user_id = "";
  br_data.view_id = "";
  br_data.debug = true; // remove for production
  br_data.test_data = true; // remove for production


 
  // INSERT the Conversion & Basket specific Tracking Parameters in your Global Tracking Script
  // in your CONVERSION/ THANK YOU PAGE TEMPLATE. 
   br_data.is_conversion = 1;
   br_data.basket_value = "445.93";
   br_data.order_id = "12123455";
   br_data.basket =
   { "items":
    [
    {
      "prod_id" : "pid1111",
      "sku": "sku1234",
      "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"
    }
   ]
  };
 ;
  // End - Conversion page specific tracking parameters
 
  (function() {
  var brtrk = document.createElement('script');
  brtrk.type = 'text/javascript';
  brtrk.async = true;
  brtrk.src = "//cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js";
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(brtrk, s);
  })();
</script>

👍

Copying Snippet from Events Managment

You can copy the personalized tracking snippet from the Events Management application. We recommend using personalized snippets instead of copying from the documentation page. Currently, only acct_id and debug values are populated in the snippet. In future feature iterations, we will add domain_key, view_id, and other variables to further personalize the snippet for easy click-copy use.

Non-JavaScript Implementation

To integrate Bloomreach pixels in a Non-JS Environment, you can choose one of the following options:

  • Android SDK
  • iOS SDK
  • Direct API request
https://p.brsrvr.com/pix.gif?
acct_id=6702
&cookie2=uid%3D1e7724c751a3f6e6241018d150144832e7528383%3Av%3Dapp%3Ats%3D0%3Ahc%3D1
&rand=86838131966165760
&type=pageview
&title=Conversion
&url=http%3A%2F%2Fmerchantname.app%2Fconversion
&ref=http%3A%2F%2Fmerchantname.app%2Fcategory%2Fdresses
&ptype=conversion
&is_conversion=1
&basket_value=30.00
&order_id=88332121
&basket=!i1234%27s563%27nBlue%20Lace%20Dress%27q2%27p10.00!i7892%27s121%27nRed%20Lace%20Dress%27q1%27p10.00

📘

Discovery SDKs for application native pixel integration

For details on using the Discovery Android and iOS SDKs for specific Native App Implementation, refer to their respective linked guides.

Validate Pixel Implementation


If you’re integrating the pixel, you can start tracking the test pixel data using Events Management. It gives you a broad overview of your pixel’s health in an instant. You can continue using this when you go live.

🚧

Integration mode in Events Management

If you wish to inspect individual events from your test environment in real time, add debug=true. Such events will be treated as test data and will show in the Integration mode of the Events Management within seconds. Otherwise, you can inspect events in the Live mode with a delay of up to 2 hours.

For web validation

Once pixel implementation is complete, use the Pixel Validator Chrome Plug-in to validate if the product page view pixel is working as expected. Follow the scenarios listed in the Test Scenarios - Page View guide.

Troubleshooting


Refer to the following help articles to troubleshoot issues related to the Conversion page view pixel

Monitor and Manage Pixel Data


For long-term monitoring, use Pixel Monitor to get more detailed trend lines and set pixel error alerts. We recommend that you subscribe to pixel alerts.