Open and click tracking

Both are off by default, and both cost you something. Read this before turning them on.

What they actually do

Open tracking adds a 1×1 transparent image to your HTML. An "open" is that image being fetched.

Click tracking rewrites every link in your HTML so the click passes through mailstein before continuing to its destination.

What they cost

Open rates are not accurate and have not been since 2021. Apple Mail Privacy Protection pre-fetches images for every message it receives, whether or not anyone reads it. If a meaningful share of your audience uses Apple Mail — and it usually is — your open rate is partly a measure of Apple's servers. Use opens for relative trends, never as an absolute.

A tracking pixel is a spam signal. Not decisive, but it is one of the things filters weigh.

Rewritten links do not look like your links. Without a tracking domain of your own, a reader hovering a link in mail from your domain sees somebody else's hostname. Some readers will not click that. Filters do not love it either.

Set a tracking domain before turning click tracking on

A tracking domain makes rewritten links read as yours, and puts the click reputation on your domain rather than on a host shared with every other sender.

curl -X PATCH https://app.mailstein.com/api/v1/domains/1 \
  -H "Authorization: Bearer $MAILSTEIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"trackingDomain":"links","clickTracking":true}'

You get back a CNAME to publish. Until it resolves, nothing changes about the mail you send — tracking simply does not start.

On domains sending through mailstein's own mail server, the tracking domain is also what switches tracking on at all: no tracking domain means no rewriting and no counting, however the toggles are set.

What to measure instead

Clicks are a real signal — someone did something. Replies are a better one. Conversions on your own site are the best one, and they need no tracking from us at all: put your own parameters on the links you care about and count them where they land.

If you are turning on open tracking to find out whether a transactional email arrived, use webhooks instead. email.delivered is a fact; email.opened is a guess.

Something here wrong or missing? It is generated from the running API — tell us and we will fix the source.