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.
Variable | Value name, example | Description |
---|---|---|
basket | Object 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_value | string, "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. |
currency | string, "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_conversion | integer, "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_id | string, "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:
Variable | Value type, example | Description |
---|---|---|
prod_id | string, "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 |
sku | string, "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. |
name | string, "Cashmere Sweater" | The name of the product in the basket. |
quantity | int, "1" | The quantity of the product in the basket. |
price | string, "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 '
.
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.s
- Sku id, only applies if you have skus.n
- product_name.q
- quantity of the product in the basket.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 customized tracking snippets for both JavaScript and Non-JS environments. 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:
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
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
- Missing or Empty Conversion Basket
- Total basket price inconsistent with basket_value parameters
- Non-unit pricing for basket item price parameters
- Missing or Invalid Quantity
- Missing or Invalid Revenue Value
- Missing or Empty Product ID Field
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.
Updated 4 months ago