Facebook Pixel - Custom Tag Template
The Facebook Pixel custom tag template is an unofficial tag template for Google Tag Manager’s community template gallery.
| Resource | 
|---|
| Vendor documentation | 
| Blog post | 
| Gallery entry | 
| GitHub repo | 
Description
This template implements the Facebook Pixel on the website. You can use it to load the SDK, initiate the pixel(s), and to send custom and standard events to Facebook with any custom properties and user attributes you wish. The template should be equipped to handle all the functionality of the pixel. Please let me know in the comments if there are features that you think are missing!
Instructions
Here are the features of the pixel, together with some detail on how they work.
In general, when the tag fires, it goes through all the Pixel IDs added to the tag. For each one, it first checks if the pixel has been initialized for the ID. If it hasn’t, it proceeds to initialize it (along with any parameters that can be set with the initialization call). Then, the tag proceeds to do whatever you’ve configured it to do. It will send an event with any properties you have configured, and you can also use the tag to disable things like automatic history event tracking.
NOTE! The pixel DOES NOT automatically send the
PageViewtracking hit similar to how the Facebook Pixel snippet does. You will need to create aPageViewtag to send the page view to Facebook.
Facebook Pixel ID(s)
The first field requires you to add your Facebook Pixel ID. You can add more than one ID by separating each with a comma, e.g. 123456789,234567890.
If you add more than one ID, then the tag will initialize (if necessary) and send the hit to all the pixel IDs listed in the field.
Enhanced Ecommerce dataLayer integration
If you check this button, then the tag will look in dataLayer for the most recent object with the ecommerce key. If this object has one of the following properties: detail, add, checkout, or purchase, the tag will automatically derive the following information from the object to be sent with the tag.
If the
dataLayerdoes not have anecommerceobject, or if theecommerceobject doesn’t have one ofdetail,add,checkout,purchase, or if theecommerceobject doesn’t have aproductsarray, the tag will end with a failure.
Event Name is mapped like this:
- 
An ecommerce.detailobject sets event name asViewContent.
- 
An ecommerce.addobject sets event name asAddToCart.
- 
An ecommerce.checkoutobject sets event name asInitiateCheckout.
- 
An ecommerce.purchaseobject sets event name asPurchase.
Object Properties are mapped like this:
- 
A contentsparameter is created from theproductsarray, and it is populated with theidandquantityof each product in the latter.
- 
content_typeis set toproduct.
- 
currencyis derived fromecommerce.currencyCode, or set toUSDby default.
- 
num_itemsis used inInitiateCheckoutandPurchaseand is aggregated from the total quantity of all products in theproductsarray.
- 
valueis calculated by multiplying thepriceandquantityof each product in theproductsarray, and summing everything up.
Here’s an example of how an Enhanced Ecommerce object gets mapped into Facebook object properties:
{
  ecommerce: {
    currencyCode: 'EUR',
    checkout: {
      actionField: {
        step: 1
      },
      products: [{
        id: 'firstProduct',
        name: 'firstProductName',
        price: '3.15',
        quantity: 2,
        category: 'prods'
      },{
        id: 'secondProduct',
        name: 'secondProductName',
        price: '7.35',
        quantity: 3,
        category: 'prods'
      }]
    }
  }
}
// BECOMES
{
  content_type: 'product',
  currency: 'EUR',
  num_items: 5,
  contents: [{"id":"firstProduct","quantity":2},{"id":"secondProduct","quantity":3}],
  value: 28.35
}
NOTE! You can use the Object Properties settings (see below) to override these individual properties, if you are unhappy with how some parts of the automatic integration work.
Event Name
If you haven’t selected the Enhanced Ecommerce integration, you can choose an event name from the list of standard events. You can also specify a custom event name, or you can use a Google Tag Manager variable to provide the event name dynamically.
Consent Granted (GDPR)
If this field gets the value false (most commonly through a Google Tag Manager variable), the pixel will download the SDK, but it will not initialize nor send any hits to Facebook.
Enable Advanced Matching
If you check this box, then a new group called Customer Information Data Parameters appears.
Data Processing Options
You can add supported data processing options to this field. They are evaluated on a tag-by-tag basis, and are set for all pixel IDs of any given tag.
Customer Information Data Parameters
You can use this to set pre-defined parameters for Facebook’s Advanced Matching feature.
Object Properties
You have three options for adding object properties to the hit.
If you checked the Enhanced Ecommerce integration, some properties will be automatically populated.
You can also load a properties object using a Google Tag Manager variable that returns an object with key-value pairs that will then be added to the hit.
Finally, you can add properties manually using the table in the tag. Each row represents one property.
You can add pre-defined properties and custom properties. Read this for more information.
NOTE! If you define properties using multiple sources (e.g. Enhanced Ecommerce integration AND variable AND the table), then conflicts are resolved in the order of table > variable > Enhanced Ecommerce. In other words, if you set
content_typein the table, it will overridecontent_typeset in a variable or the Enhanced Ecommerce integration.
More Settings
You can check the Disable Automatic Configuration to prevent the pixel from automatically listening to clicks or collecting page metadata.
You can check the Disable History Event Tracking to prevent the pixel from automatically tracking pushState and replaceState history events.
You can add an Event ID to deduplicate hits sent from the website and via server-side tracking.
Release notes
| Date | Changeset | 
|---|---|
| 11 November 2020 | Added Event ID to pixel fields for server-side deduplication. | 
| 23 July 2020 | Fix to prevent template save if Advanced Matching list enabled but empty. | 
| 6 July 2020 | Remove deprecated User Properties. Add Data Processing Options. Fix bug with empty Advanced Matching List. | 
| 23 April 2020 | Add unit tests. Add Enhanced Ecommerce integration. | 
| 16 April 2020 | Add option to disable automatic tracking of history events. | 
| 1 April 2020 | Fix “country” in Advanced Matching to use correct key. | 
| 19 October 2019 | Fix object property bug. | 
| 17 October 2019 | Fix object merging. Update event name selection to allow using a variable. | 
| 12 September 2019 | Initial release. | 
 
  
     
  
    