AWS Messaging Blog
Achieving CNIL/EU ePrivacy compliance for email tracking with Amazon SES
Open and click tracking have long been foundational email metrics. Multiple data protection authorities, including in EU and Canada, have issued guidance requiring explicit opt-in consent before deploying open tracking pixels or click link wrapping in email. As privacy expectations evolve, a growing number of jurisdictions now require senders to obtain explicit consent before tracking whether a recipient opened an email or clicked a link. In this post, you learn how to use Amazon Simple Email Service (Amazon SES) configuration set overrides to control open and click tracking per request.
How Amazon SES tracking works
Amazon SES enables open and click tracking only when explicitly configured by you. Amazon SES does not inject tracking pixels or wrap links by default.
Open tracking — When you add an event destination publishing OPEN events to a configuration set, Amazon SES inserts a 1×1 tracking pixel (served from awstrack.me) into HTML email sent using that configuration set. When a recipient opens the email and their client loads images, Amazon SES records the open event and publishes it to the configured destination.
Click tracking — When you include CLICK events in a configuration set’s event destination, Amazon SES rewrites links in HTML email to redirect through awstrack.me, recording click events before sending the user to the original URL.
Configuration sets — Configuration sets are the control surface for both features. Tracking activates only when an event destination explicitly includes OPEN or CLICK in its matching event types. You can have multiple configuration sets with different tracking configurations and select the appropriate one at send time.
Per-request tracking overrides — Amazon SES now supports open and click tracking override parameters directly in the SendEmail and SendBulkEmail APIs through the ConfigurationOverrides object. You can enable or disable open tracking and click tracking on an individual API call, without maintaining separate configuration sets. The override takes precedence over the tracking behavior defined in the associated configuration set, giving you fine-grained, per-recipient control at send time. This is the most direct way to honor recipient-level consent choices.
Event publishing and metrics — Open and click events are published to the destinations you configure: Amazon CloudWatch, Amazon Data Firehose, or Amazon EventBridge. Plan for reduced fidelity in open-rate dashboards for recipients in jurisdictions where you cannot track without consent.
Note on Amazon SES Contact Lists: Contact Lists manage topic-level subscription preferences (for example, marketing versus transactional) and control whether Amazon SES delivers to a contact. They do not control tracking behavior. There is no native mapping between a contact’s subscription status and tracking pixel injection. Tracking consent must be managed separately in your application.
Prerequisites
To follow the steps in this post, you should be familiar with Amazon SES configuration sets and basic email sending concepts. You also need the following:
- An AWS account with Amazon SES out of sandbox mode.
- AWS Identity and Access Management (IAM) permissions to create and manage Amazon SES configuration sets (ses:CreateConfigurationSet, ses:CreateConfigurationSetEventDestination, ses:DeleteConfigurationSet).
- The AWS Command Line Interface (AWS CLI) version 2 installed and configured, or access to the AWS SDK for Python (Boto3).
Option A: Use per-request tracking overrides (recommended)
The most direct approach to consent-based tracking uses the ConfigurationOverrides parameter in the SendEmail API. This approach requires only a single configuration set with tracking-enabled event destinations. At send time, you override the tracking behavior based on each recipient’s consent status.
AWS SDK:
The ConfigurationOverrides.Tracking object takes precedence over the configuration set’s event destination settings for that individual send. If the recipient has not consented, Amazon SES does not inject the tracking pixel or wrap links, regardless of whether the configuration set has OPEN and CLICK events enabled.
Advantages of per-request overrides:
- No need to maintain separate configuration sets for tracked versus untracked sends.
- A single configuration set can handle all recipients, which simplifies event destination management, suppression, and DomainKeys Identified Mail (DKIM) and domain settings.
- Per-recipient control without branching logic for configuration set selection.
- Works with SendBulkEmail as well, setting tracking overrides per recipient in the bulk request.
SMTP interface — If you send through SMTP, per-request overrides are not available. Use Option B (separate configuration sets) instead.
Option B: Use separate configuration sets
If you send through SMTP or prefer to separate tracking behavior at the configuration set level, create two configuration sets: one with tracking enabled for consented recipients, and one with no tracking for non-consented recipients.
Console: In the Amazon SES console, choose Configuration sets, and then choose Create configuration set. To enable tracking on the first set, add an event destination and include OPEN and CLICK in the matching event types. Create a second set with no OPEN or CLICK event destinations, or omit event destinations entirely.
AWS CLI:
Replace { … } with your CloudWatch destination configuration. For the full parameter structure, see Managing Amazon SES event destinations.
No event destination for OPEN or CLICK means no pixel is injected and no links are wrapped.
Send-time selection:
Your application selects the configuration set for each message based on the recipient’s consent status.
SMTP interface — Set the configuration set through the X-SES-CONFIGURATION-SET header:
Disabling tracking on individual links
To disable click tracking on individual links within a tracked email (for example, your unsubscribe link), use the ses:no-track attribute:
Amazon SES strips the ses:no-track attribute before delivery, so recipients never see it. This works with both Option A and Option B.
Manage consent in your application
Regardless of which option you choose, Amazon SES provides the mechanisms to enable or disable tracking at send time. You are responsible for:
- Maintaining a consent database recording each recipient’s tracking consent status.
- Determining at send time whether a recipient has consented to open and click tracking.
- Passing the correct override parameter (Option A) or selecting the appropriate configuration set (Option B) based on that determination.
Important: Once an email is delivered with a tracking pixel, it cannot be retroactively deactivated.
Capture consent at sign-up. France’s data protection authority (CNIL) recommends collecting tracking consent at the point of email address collection. Include a clearly labeled, unchecked checkbox. For example: “I agree to allow AnyCompany to track whether I open or click email to improve future communications.” This is a separate checkbox from consent to receive marketing email.
Store consent with proof. You must be able to demonstrate valid consent for each individual. Store a consent timestamp and source alongside the subscriber record:
Make refusal as straightforward as acceptance. Do not use pre-checked boxes or dark patterns that make opting out harder than opting in.
Provide withdrawal at any time. Every email sent with tracking enabled must include a link that recipients can use to withdraw tracking consent independently of unsubscribing. A “Manage email preferences” link in the footer, separate from the unsubscribe link, satisfies this requirement:
Replace {SUBSCRIBER_TOKEN} with a signed token that identifies the subscriber’s record in your consent database. Replace {UNSUBSCRIBE_URL} with your Amazon SES one-click unsubscribe URL or list-unsubscribe endpoint.
Monitoring and governance
Audit event volumes. Use Amazon SES event publishing to monitor open and click event counts. If you use Option B, compare volumes between tracking-enabled and no-tracking. If you use Option A, monitor the ratio of sends with tracking enabled versus disabled. A sudden drop in consented opens might indicate an issue with your consent capture flow.
Review data retention. If you rely on the deliverability-only exemption for any segment, verify that your data pipeline retains only the date of last open, not the time, IP address, or user-agent string. Collecting those fields, even temporarily, voids the exemption per CNIL guidance.
Document your consent architecture. Maintain a record of how and when each subscriber provided consent, which form version was in use, and where the consent data is stored.
Clean up
If you created test configuration sets while following this post and do not intend to use them, delete them to avoid unintended configuration being applied to future sends.
Conclusion
Amazon SES gives you the tools to obtain prior consent before tracking opens and clicks. With per-request tracking overrides, you can honor consent decisions inline with each API call, with no additional configuration sets required. For senders using SMTP, separate configuration sets achieve the same outcome. Combined with consent capture at sign-up and a preferences management link in every tracked email, you can maintain meaningful analytics for consented recipients while respecting the privacy of those who have not opted in.
For more information, see the following resources in the Amazon SES Developer Guide:
- Amazon SES Email Metrics FAQs — Open and Click Tracking
- Specifying a configuration set when you send email
- Managing Amazon SES event destinations
- Amazon SES SendEmail API v2 reference
- Amazon SES Contact List Management
- Include once published: https://preview.docs.aws.dev/preview/kiselev/SEA/AmazonSESDocs/mainline/ses/latest/dg/configuration-overrides.html.
Related posts
- Getting started with Amazon SES suppression lists
- Managing email sending with Amazon SES configuration sets
- How to handle bounces and complaints in Amazon SES