Open tracking
Add a tracking pixel and read the result honestly - what Apple's Mail Privacy Protection changed, and what opens still tell you.
Updated
Send with track_opens and we add a 1×1 image to the HTML body. When a mail
client renders that image, we record an open.
{
"from": "Acme <hello@mail.yourdomain.com>",
"to": ["customer@example.com"],
"subject": "Your invoice",
"html": "<p>Attached.</p>",
"track_opens": true
}Text-only messages have nowhere to put an image. Asking for tracking on one isn't an error, but the message is recorded as untracked so the dashboard never shows it waiting for an open that can't arrive.
Turning it on for everything
If you want it on all your mail, Settings → Open tracking sets an account default. Every message with an HTML body then carries a pixel without your having to ask each time.
It is off for every account until somebody turns it on. Enabling it changes what lands in your recipients' inboxes, so it is a decision you make rather than one a release makes for you.
One message can still differ
track_opens on a send overrides the default in both directions:
| Account default | track_opens on the send | Result |
|---|---|---|
| off | omitted | not tracked |
| off | true | tracked |
| on | omitted | tracked |
| on | false | not tracked |
That last row is the one worth knowing. An account that tracks its marketing mail can still send a password reset untracked, without touching the setting:
{
"from": "Acme <hello@mail.yourdomain.com>",
"to": ["customer@example.com"],
"subject": "Reset your password",
"html": "<p>Use this link within an hour.</p>",
"track_opens": false
}What you get back
The message page shows a first-open time and a count, and email.opened fires
on your webhooks. The GET /v1/emails/{id} response carries track_opens,
opened_at and open_count.
What an open actually means
A floor, not a count
An open means at least this many people saw the message, plus noise. It is not proof that a particular person read it, and no open is not evidence that nobody did.
Three things break the signal, and all three are common:
| What happens | Effect | |
|---|---|---|
| Apple Mail Privacy Protection | Fetches every image through Apple's proxy the moment mail arrives, whether or not anyone looks | Opens that nobody performed, timestamped on delivery |
| Outlook and other blockers | Remote images off by default | Real reads that leave no trace at all |
| Gmail's image proxy | Caches the fetched image | The second and third read often never reach us |
We recognise privacy-proxy fetches on the way in and keep them as events without counting them, so the number you see is opens we believe a person performed. That detection is a guess about a user agent, which anything can claim — it decides how a number is displayed, never anything that matters.
Use opens for trends and for comparing one send against another. Don't use them to decide whether one named person read one message: for that, the question the data can actually answer is whether it was delivered.
Changing your mind after sending
Tracking is recorded on each message when it is sent, so changing the account
default never alters mail that has already gone out. A message whose
track_opens is cleared stops recording, even if its pixel is fetched with a
valid URL: nothing is retroactive — opens already recorded stay — but the pixel
goes inert.
Retention
Open events age out with everything else on your account's retention window. See Logs.