> For the complete documentation index, see [llms.txt](https://doc.batch.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.batch.com/guides-and-best-practices/email-deliverability/email-authentication-and-sending-structure/email-open-tracking-and-tracking-pixels/managing-email-tracking-pixels.md).

# Managing Email Tracking Pixels

## About Tracking Pixels

Tracking pixels are invisible **1x1 transparent images embedded in the HTML** of an email. They have no visual function. When a recipient opens the email, their mail client loads the image from a remote server, triggering an HTTP request that records the open event.

They serve several purposes within the Batch platform:

* **Campaign performance measurement:** tracking open rates to optimize sends, A/B test subject lines, adjust frequency, and select the right channel.
* **Engagement scoring and targeting:** building audience segments based on engagement behavior for CRM personalization.
* **Deliverability monitoring:** detecting inactive profiles to clean lists and adapt sending frequency or stop delivery.
* **Retargeting:** crossing open data with user interests to target profiles on other channels.

To help customers comply with local legislation, especially in the European Union, Batch allows you to control whether tracking pixels are included in emails sent to a given profile.

## Tracking Pixels Consent Management

### <mark style="color:$primary;">Sharing the Consent Status with Batch</mark>

As a data controller, you are responsible for collecting and storing your users' consent. Batch does not collect or store consent on your behalf.

Once consent has been obtained, you can share the relevant status with Batch at the profile level to control tracking pixel insertion accordingly.

This can be done using the [Profiles API](https://doc.batch.com/developer/api/cep/profiles/update), by passing the consent status in the native attribute `$email_open_tracking_consent`. It accepts two values:

* `granted`
* `denied`

You can review the consent status for a profile using the Profile view:

<figure><img src="/files/Q5xbm2YDHZOcEBjFPgP3" alt="Tracking Pixel Consent - Profile view"><figcaption></figcaption></figure>

### <mark style="color:$primary;">Tracking Pixel Insertion Logic</mark>

Batch automatically handles the tracking pixel insertion depending on the value of  the attribute **`$email_open_tracking_consent`**:

{% columns %}
{% column %}
**`granted`**

All emails will contain a tracking pixel.
{% endcolumn %}

{% column %}
**`denied`** or no value set

These users will only receive emails without tracking pixels.

As a consequence:&#x20;

* Email opens are not recorded.
* Open-based engagement scores are not updated.
* Audience segments that rely on open behavior will not reflect that send.
* Retargeting logic based on email opens will not be triggered.
  {% endcolumn %}
  {% endcolumns %}

### <mark style="color:$primary;">Consent Withdrawal & Footer Personalization</mark>

In case you don't have your own consent withdrawal mechanism, you can use **Batch's native link in any email template** via a native personalization attribute.

{% tabs %}
{% tab title="Using the Email Composer" icon="wand-magic-sparkles" %}
Create a **new link**, then select the option "Deny Open Tracking Consent":

<figure><img src="/files/mTv9HgbMyJ75sJddwja8" alt=""><figcaption></figcaption></figure>

{% endtab %}

{% tab title="Using the Code Editor" icon="code" %}
Within the code editor, or in any custom html template, you can use the `{{emailOpenTrackingConsentLink()}}` attribute.

Here is an example, with a custom label:

{% code overflow="wrap" %}

```
{{ emailOpenTrackingConsentLink('Disable tracking') }}
```

{% endcode %}
{% endtab %}
{% endtabs %}

Upon click, the profile's native attribute `email_open_tracking_consent` is set to denied, and the recipient is redirected to the following default landing page:

<div data-with-frame="true"><figure><img src="/files/SkZ0mYjM1uVortEshN70" alt="Removed tracking pixel consent landing page"><figcaption></figcaption></figure></div>

### <mark style="color:$primary;">Bypassing Batch Tracking Pixels Management</mark>

If you are certain that you exclusively target users from regions where consent is not required to use tracking pixels, you can bypass Batch's tracking pixel management to always include a tracking pixel in all your emails.

This can be done from your project's settings → Channels → Email.

<figure><img src="/files/QRvbXqoV0vG1sEQdVchL" alt=""><figcaption></figcaption></figure>

## Targeting & Content Personalization

### <mark style="color:$primary;">Targeting Users Based on the Consent Status</mark>

The native attribute **`$email_open_tracking_consent`** allows you to target users based on their consent status.

This may be useful in your email automations if you need to collect consent after collecting the email address in a context that didn't allow you to get a clear consent (e.g. email addresses collected in store, etc).

<figure><img src="/files/mKRtiuuj4zLUVB0fcnub" alt=""><figcaption></figcaption></figure>

### <mark style="color:$primary;">Content Personalization</mark>

The personalization attribute `{{b.is_email_open_tracking}}` allows you to conditionally display content based on a profile's consent status:

* **`$email_open_tracking_consent` = `granted`** → `{{b.is_email_open_tracking}}` = `true`
* **`$email_open_tracking_consent` = `denied` or `null`** → `{{b.is_email_open_tracking}}` = `false`

<figure><img src="/files/8W5fQlHME7k5Tp2De2d1" alt=""><figcaption></figcaption></figure>

For more granular conditions, `{{b.email_open_tracking_consent}}` is also available, with three possible values:&#x20;

* `GRANTED`
* `DENIED`
* `UNSPECIFIED`

## Data Export

### <mark style="color:$primary;">Consent Status Changes</mark>

The [events export endpoint](https://doc.batch.com/developer/api/cep/profiles/export#profile-events) allows you to export any changes that impacted the tracking pixel consent for users, with a look back period of 90 days.

A profile event called **`email_tracking_consent_updated`** is generated on every native opt-out link click, even if **`$email_open_tracking_consent`** was already set to `denied` (opt-in logic is not currently supported).

It includes the standard email event fields plus a `consent_value` field, which will always be `denied` .

### <mark style="color:$primary;">Consent Status on Email Sending</mark>

Batch includes an attribute **`$email_open_tracking_consent`** (values: `granted` / `denied`) for the following events:&#x20;

* `email_sent`
* `email_delivered`
* `email_open`

It reflects the profile's consent value related to a specific send, which is useful for any investigation you may need to run.

### <mark style="color:$primary;">Consent Status Export</mark>

The [profiles attributes export endpoint](https://doc.batch.com/developer/api/cep/profiles/export#profile-attributes) of the Profiles API allows you to export the current consent status of all your profiles or of a part of your profiles.

The output will contain the consent status in the attribute **`$email_open_tracking_consent`**.

## Frequently Asked Questions

### <mark style="color:$primary;">Open Rate Calculation</mark>

The open rate is exclusively **calculated based** **on the portion of your audience that** **granted consent**. This avoids diluting the metric by including recipients from whom no open data can be collected.

Open rates are calculated as follows when consent-based pixel insertion is enabled:

```
Open Rate = number of opens / number of delivered emails with a tracking pixel
```

For campaigns where at least one recipient did not receive an email with a tracking pixel, a tooltip is displayed on the open rate metric, indicating the number of recipients included in the calculation.

<div data-with-frame="true"><figure><img src="/files/1anEfjoqUr8uRTqLreFW" alt=""><figcaption></figcaption></figure></div>

### <mark style="color:$primary;">Consent Withdrawal & Historical Data</mark>

When a profile withdraws consent, previously sent emails may still contain tracking pixels. If users open an email sent before consent withdrawal, Batch will not process any open data related to that event.

### <mark style="color:$primary;">Data Retention</mark>

Email open events are automatically anonymized after 90 days.

### <mark style="color:$primary;">Tracking Pixels Definition & Detection</mark>

You will find more information on tracking pixels inserted in emails and how to identify them in our dedicated article: [Knowing More on Tracking Pixels](/guides-and-best-practices/email-deliverability/email-authentication-and-sending-structure/email-open-tracking-and-tracking-pixels/knowing-more-on-tracking-pixels.md)

### <mark style="color:$primary;">Tracking Pixel Consent Exemption</mark>

Batch does not support, and does not plan to support in the short term, the French Data Protection Authority (CNIL) consent exemption. Emails sent to profiles without valid consent will not contain any tracking pixels.

Here is more context:

* **Legal requirement:** Batch already provides data controllers with everything needed to achieve compliance. Supporting the exemption is optional, and its added value for senders in France is limited at this stage.
* **France-specific restriction.** The exemption documented by the CNIL currently applies to France only. Our product team is actively monitoring publications from other EU member states' data protection authorities, with the goal of delivering a solution that works across all countries covered by the European directive regulating tracking pixel usage.
* **Limited added value.** The exemption appears restricted, in most cases, to narrow and auditable deliverability purposes. Inactivity measurement should not rely solely on open rates, and open rates have been significantly degraded for years due to Apple Mail Privacy Protection. We do not see sufficient value in this exemption to justify the development investment at this stage.

We nonetheless acknowledge the importance of exemption support for certain use cases, and do not rule out prioritizing this feature in late 2026.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://doc.batch.com/guides-and-best-practices/email-deliverability/email-authentication-and-sending-structure/email-open-tracking-and-tracking-pixels/managing-email-tracking-pixels.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
