# Setup

## Overview

EngineRoom's Pixel helps you take your marketing to new heights by capturing leads on your website, integrating them into EngineRoom and calculating the attribution on them so you know exactly which marketing channels are driving leads and ROI.

Setting up the EngineRoom Pixel is a simple process that requires you to install one-line of code onto your website. If you've ever used a web analytic tracking service (like Google Analytics), then you would be familiar with this process.

### **Quick setup**

1. [Login](https://app.engineroom.com.au/login) to your EngineRoom account
2. In the left menu, click on **Integrations**
3. Click **EngineRoom Pixel**
4. Copy the setup code
5. Paste the code snippet into the <mark style="color:red;">`<head></head>`</mark> tag of your website
   1. **Note:** Make sure this snippet is present on every page that you want to track
6. Review [UTM Parameters](/engineroom-pixel/utm-parameters.md) to ensure EngineRoom's Pixel is able to correctly attribute your website leads

### Requirements

Currently EngineRoom's Pixel is able to capture the following types of Leads from your website:

* Contact forms that use the <mark style="color:red;">`<form>`</mark> tag
* [Podium](https://podium.com/) live chats

### Compatible Form Attributes

&#x20;EngineRoom's Pixel uses the [`name`](https://www.w3schools.com/tags/att_name.asp) attribute on your form [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input) to correctly attribute and map website leads. Because of this, to ensure the highest level of attribution accuracy, we strongly recommend that the following naming conventions are used when naming your form inputs.

**Note:** All names are case-insensitive.

* **Name**
  * `name, customer_name, form_fields[name]`
* **First Name**
  * `first_name, first-name, firstname, form_fields[first_name]`
* **Last Name**
  * `last_name, last-name, lastname, form_fields[last_name]`
* **Email**
  * `email, customer_email, form_fields[email]`
* **Phone**
  * `phone, mobile, number, form_fields[phone]`
* **Message**
  * `message, comments, form_fields[message]`
* **Postcode**
  * `postcode`
* **Suburb**
  * `suburb`

All other form inputs will be stored in a single `data` field that can be accessed accordingly.

Below is an example of a form that would map 1:1 in EngineRoom.

<pre class="language-html"><code class="lang-html"><strong>&#x3C;form name="Contact Form">
</strong>    &#x3C;input type="text" name="name" />    
    &#x3C;input type="email" name="email" />
    &#x3C;input type="text" name="phone" />
    &#x3C;input type="text" name="message" />
    &#x3C;input type="text" name="suburb" />
    &#x3C;input type="text" name="postcode" />    
&#x3C;/form>

&#x3C;form name="Services Form">
    &#x3C;input type="text" name="first_name" />
    &#x3C;input type="text" name="last_name" />       
    &#x3C;input type="email" name="customer_email" />
    &#x3C;input type="text" name="mobile" />
    &#x3C;input type="text" name="comments" />
    &#x3C;input type="text" name="suburb" />
    &#x3C;input type="text" name="postcode" />    
&#x3C;/form>
</code></pre>

### Naming Conventions for Website with Gravity Form&#x20;

For users integrating Pixel with Gravity Forms, name & class attributes cannot be updated against form elements. Instead, the class attribute of the parent element will be captured. Below is the documentation outlining the guidelines for identifying parent elements within Gravity Forms.

**Attribute Determination Logic**

We initially check if the `name` attribute of input elements matches certain formats tailored for Gravity Forms.&#x20;

* **Examples of names that match Gravity form elements**:
  * `input_xx_xx`
  * `input_xx`

Once it matches, the class name starts with `er-pixel-` of the **parent `<li>` element** or **`<div>` element with class `gfield`** will be used. &#x20;

**Class name for different fields:**

* Name
  * `er-pixel-name`
  * `er-pixel-first_name`
  * `er-pixel-last_name`
* Email = `er-pixel-email`
* Phone = `er-pixel-phone`
* Message = `er-pixel-message`

#### Example HTML of **`<div>`** element with class **`gfield`** in Gravity Form:

{% code overflow="wrap" lineNumbers="true" %}

```html
<div id="field_14_6" class="gfield gfield--type-text gfield--input-type-text gf_left_half er-pixel-first_name gfield--width-half field_sublabel_below gfield--no-description field_description_below gfield_visibility_visible" data-js-reload="field_14_6">
  <label class="gfield_label gform-field-label" for="input_14_6">First Name</label>
  <div class="ginput_container ginput_container_text">
    <input name="input_6" id="input_14_6" type="text" value="Superman" class="large" tabindex="6" aria-invalid="false">
  </div>
</div>
```

{% endcode %}

&#x20;`er-pixel-first_name` is captured as field name

#### Example HTML of **`<li>`** element in Gravity Form:

{% code overflow="wrap" lineNumbers="true" %}

```html
<ul>
  <li id="field_2_6" class="gfield gfield--type-text gfield--input-type-text gf_left_half gfield_contains_required field_sublabel_below gfield--no-description field_description_below gfield_visibility_visible er-pixel-phone" data-js-reload="field_2_6">
    <label class="gfield_label gform-field-label" for="input_2_6">First Name <span class="gfield_required">
        <span class="gfield_required gfield_required_asterisk">*</span>
      </span>
    </label>
    <div class="ginput_container ginput_container_text">
      <input name="input_6" id="input_2_6" type="text" value="Batman" class="medium" tabindex="1" aria-required="true" aria-invalid="false">
    </div>
  </li>
</ul>
```

{% endcode %}

&#x20;`er-pixel-phone` is captured as field name

### Blocking forms from being tracked

In the event you don't want to track a specific form, you can define a custom attribute on the `<form>` attribute called `track-form` and set its value to either `0` or `false`. This will tell the EngineRoom Pixel not to track these forms and they will not appear in the EngineRoom Platform.

This is particularly useful for certain CMS systems whereby search bars use the `form` attribute. Known systems that do this are [Webflow](https://webflow.com/) and [Shopify](https://shopify.com/).

Below is an example of this.

<pre class="language-html"><code class="lang-html"><strong>&#x3C;form name="Contact Form" track-form="0">
</strong>    &#x3C;input type="text" name="name" />    
    &#x3C;input type="email" name="email" />
    &#x3C;input type="text" name="phone" />
    &#x3C;input type="text" name="message" />
    &#x3C;input type="text" name="suburb" />
    &#x3C;input type="text" name="postcode" />    
&#x3C;/form>

&#x3C;form name="Signup Form" track-form="false">
    &#x3C;input type="text" name="name" />    
    &#x3C;input type="email" name="email" />  
&#x3C;/form>
</code></pre>

### **Limitations**

EngineRoom is currently unable to integrate website leads that:

* Use contact forms that are embedded in an <mark style="color:red;">`<iframe>`</mark> tag

### **Platform specific setup guides**

* [WordPress](/engineroom-pixel/setup/wordpress.md)
* [Webflow](/engineroom-pixel/setup/webflow.md)
* [**Shopify**](/engineroom-pixel/setup/shopify.md)

If you don't see your website platform listed above, don't worry. We can still collect leads from your platform as long as you have a way to insert the EngineRoom Pixel into your website.

If you don’t want to deal with any code or ask a developer to insert the EngineRoom Pixel, you can directly add the snippet through GTM. Follow this guide on how to do it: [Google Tag Manager](/engineroom-pixel/setup/google-tag-manager.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.engineroom.com.au/engineroom-pixel/setup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
