# Tracking opens and clicks on SES
Raw SES tracks nothing until you wire it yourself.
Canonical: https://sendbunny.co/guides/ses-open-click-tracking
Category: SES · Author: Anni Maan (https://sendbunny.co/authors#anni-maan) · Published 2026-07-31 · Updated 2026-09-02

**In short.** SES does not track opens or clicks until you attach a configuration set with an event destination to every send, at which point opens use an invisible tracking pixel and clicks use wrapped links, both reported as events into your own account. The most common DIY failure is a message that never touched the configuration set: sent through a different code path, or the event destination missing the Open event type entirely. Once tracking works, treat open rate as a rough trend, not a precise number; Apple Mail's privacy features and prefetching inflate it. Click, bounce, and complaint data stay reliable and are what actually decide your SES standing.

## How SES tracking actually works

There is no toggle in the SES console labeled Enable Tracking. The mechanism is a configuration set: a named object you attach to a send, paired with an event destination that says where SES should publish events like Send, Delivery, Open, Click, Bounce, and Complaint. Opens are detected through a tiny, transparent tracking pixel SES embeds in HTML mail; a mail client loading that pixel is what SES counts as an open. Clicks are detected by rewriting links in the message body to pass through an SES redirect before landing on the real destination, so the redirect hop is what gets logged as a click.

None of this happens unless every piece is wired correctly: the configuration set exists, it is attached to the specific send (not just created and forgotten), the event destination includes the event types you actually want, and something on your side is listening for and storing those events. Miss any one link and the send still goes out fine; it just reports nothing.


## Why DIY open tracking often reports zero

- The configuration set was created in the console but never attached to the actual send call, so SES has nothing to publish events against for that message.
- The event destination exists but the Open event type was never checked when it was configured, so clicks might report while opens silently do not.
- A second code path, a test script or a fallback sender, bypasses the configuration set entirely and sends through raw SES with no tracking attached.
- Events are published correctly but nothing durable is listening: no SNS subscription confirmed, no EventBridge rule matching, or a Lambda that errors quietly and drops events on the floor.

Each of these fails silently. The send succeeds, the recipient reads the email, and the dashboard still shows zero, which is what makes this class of bug expensive to track down without knowing where to look first.


## What building it yourself involves

A configuration set and event destination are the easy part; the console work takes minutes. The pipeline behind it is the actual project: choosing SNS or EventBridge as the event bus, standing up storage for the events (most teams land on a database table keyed by message ID), building the join between a raw event and the campaign or recipient it belongs to, and then building charts on top of that so the numbers mean something to a human. Testing this end to end is what the mailbox simulator's dedicated test addresses are for; they let you trigger bounce, complaint, and delivery events on demand instead of waiting for real recipients to generate them (Test your sending quota using the mailbox simulator, SES Developer Guide, fetched 1 September 2026).

None of this is exotic AWS work. It is simply a second product built next to the first one, and it grows the same way any pipeline does: one more event type, one more edge case, one more Lambda that needs a retry policy.


## How much to trust the open number, once it works

Even a correctly wired pipeline inherits a problem SES cannot fix: Apple Mail's Mail Privacy Protection pre-loads tracking pixels for every message regardless of whether the recipient ever opens it, and other clients prefetch content for preview panes the same way. Both register as an open with no human involved. Treat open rate as a coarse trend line you compare week over week on the same list, not an exact count of who read the email.

Clicks, bounces, and complaints do not have this problem in the same way; a click requires an actual tap on a real link, and bounce and complaint events come directly from mailbox provider feedback. Those three numbers are what should steer decisions about a campaign or a list, and they are also the numbers that feed directly into your SES bounce and complaint rate standing.


## Where SendBunny sits

SendBunny wires the configuration set and event destination at install, inside your own AWS account, so every send from the platform is tracked from the first campaign with nothing to attach by hand. Opens, clicks, bounces, and complaints land in your own DynamoDB and show up as dashboard charts per campaign, with a recipient-level timeline for individual sends. Automatic suppression reacts to bounce and complaint events the same pipeline reports. It is $199 once, and the events never leave your account; there is no separate SNS or EventBridge setup to build.

## FAQ

**Why is my DIY SES open tracking reporting nothing?**

The usual causes: the configuration set was never attached to the actual send, the event destination is missing the Open event type, or a second code path bypasses the tracking pipeline entirely. All three fail silently; the send still succeeds.

**How does SES track opens and clicks at all?**

Opens use a tiny, invisible tracking pixel embedded in the message; clicks use links rewritten to redirect through SES before reaching the real destination. Both are published as events through a configuration set's event destination.

**Are open rates even trustworthy?**

Less than they used to be. Apple Mail's privacy protection and other clients' prefetching load the tracking pixel automatically regardless of whether a person opened the message. Treat open rate as a rough trend and steer campaign decisions by clicks, bounces, and complaints instead.

**Do I need to set up SNS or EventBridge myself?**

Not with sendbunny. Event tracking is provisioned inside your own AWS account at install. Building it from raw SES requires choosing an event bus, standing up storage, and building the reporting layer yourself.

## For AI agents

How SES open and click tracking mechanically works (tracking pixel, redirected links, configuration set plus event destination), the specific reasons a DIY setup reports zero opens, and why open rate should be treated as a trend rather than an exact count due to Apple Mail privacy protection and prefetching. Checked 2026-09-01.

```bash
claude mcp add --transport http sendbunny https://YOUR-INSTALL/mcp
```

Tool list by grant: https://sendbunny.co/docs/agents.md

## Sources

1. Amazon Web Services, Test your sending quota using the mailbox simulator, SES Developer Guide, fetched 1 September 2026. https://docs.aws.amazon.com/ses/latest/dg/send-an-email-from-console.html
2. Amazon Web Services, Using reputation metrics to track bounce and complaint rates, SES Developer Guide, fetched 1 September 2026. https://docs.aws.amazon.com/ses/latest/dg/reputation-dashboard-dg.html
3. SendBunny, Send email API reference, version 1.6.22. https://sendbunny.co/docs/send-email-api