EmailTimer.App

How opens are counted

By Danish Mohammed, founder. , updated 7 min read

Every plan includes a number of opens a month, and one open is one image the image service renders and sends in full. It is counted where the image is produced, at img.emailtimer.app, at the moment the response goes out. It is not a person reading an email, and no part of the product can tell the two apart. The rule below was read from the code on 17 September 2026.

What counts as one open

A request counts when all of these are true:

  • it is a GET for an image address whose signature checks out
  • the template it names loads, and belongs to the workspace that signed the address
  • the image service renders an image for it and sends the whole body

That covers a live countdown, a personalized image, the expired frame after a deadline, and the template’s own fallback image when a render cannot be produced. The fallback case counts today because it is a rendered response for a real template. An image answered from the image service’s own short cache still counts, because it is still a full response.

Who made the request does not matter. Each of these is one open:

  • Apple Mail fetching a message’s images when it arrives, which Apple documents Protect Mail Activity doing “in the background by default”, whether or not the reader opens it
  • Google’s image proxy fetching for a Gmail reader, which Google documents: “Gmail uses Google’s secure proxy servers to serve images”
  • a forwarded copy of the email being opened by somebody else
  • a test send you open yourself
  • the image address pasted into a browser tab

What does not count

  • A 304 Not Modified. A mail client or proxy that already holds the exact bytes, and says so with the ETag, gets an empty 304. It already had the image, so nothing is counted.
  • A HEAD request. It asks about the image without taking it.
  • A copy served by somebody else’s cache. When Gmail’s proxy or Apple’s relay shows a reader an image it fetched earlier, no request reaches the image service.
  • An answer from our own edge cache. When the cache we run in front of the image service answers a request itself, the image service never sees it and nothing is counted. The Usage screen shows those answers in a panel of their own, marked as not counted towards your plan. Until that cache is switched on, every request reaches the image service and the panel stays hidden.
  • A request the service refuses before rendering. These get the generic “image unavailable” card and are not counted: a bad or missing signature, a template that does not exist or belongs to another workspace, and a suspended workspace. So do a per-address rate limit, an overloaded service and a render that runs out of time.
  • Previews. The editor’s preview is drawn by the dashboard, and the free generator’s preview by the API. Neither passes through the image service.
  • Timers made with the free generator. They live in the generator’s own workspace, not in yours, so they do not count toward your plan. Each one has a lifetime allowance of its own instead, set out in timers from the free generator below. The copy a claim puts in your templates counts once you publish it.
  • API calls. Minting an address costs nothing. The open is the fetch that happens later.

When the count could be wrong, and which way

The image service writes each open to a queue, and a separate worker adds the queue to your daily totals. Both ends are built to err towards counting less rather than more.

If the worker stops, the queue holds the newest 250,000 opens and drops older ones beyond that. A dropped open is never billed. If a worker dies partway through adding a batch and nothing can prove whether the batch was saved, the batch is treated as saved and discarded rather than added a second time. Each such case is logged with its size.

The period an allowance covers

A paid workspace is counted over its subscription’s billing period. A free workspace is counted over the calendar month in UTC. Days are UTC calendar days. The Usage screen and GET /usage count the day a subscription renews in the new period only. The check behind the 80 and 100 percent emails and the watermark reads a period through its end date, so today it also counts the first day of the next period, on the free plan as on a paid one.

The period an allowance covers
Plan Opens included each period
Free 5,000
Starter 250,000
Growth 1,000,000
Agency 5,000,000

Prices for each plan are on pricing.

Where to see the number

The Usage screen in the dashboard shows opens by day, by template and by email client, with a meter for the current period and a CSV export. The screen defines the unit in its own words: “A fetch is one request for the image”, and it says in the next breath that this is not a person reading the message.

A caching layer in front of the image service is built and switched off today, so every open currently reaches the image service and is counted the usual way. Once it is switched on, the requests it answers without the image service will appear below the charts, under “Answered at the edge”, to show how much of a campaign never needed a new image. They are not opens, they are not counted towards your plan, and they are never added to the meter. The counts are a floor, because a few can go unreported, which is one more reason nothing is billed on them. If that ever changes, this page changes first.

The client split sorts each open into Gmail’s proxy, Apple Mail, Outlook, or other. It reads the user agent of the request, which proxies rewrite, so the screen calls it an estimate. The total does not depend on that guess. Only the label on each open does.

The Which email clients fetched the image section of the Usage screen: Gmail image proxy, Apple Mail privacy relay, Outlook and Other or unrecognised, each with its share, fetch count and an explanation of what a fetch from that client means
The client split on the Usage screen, captured from a test workspace with sample traffic. Each row says what a fetch from that client means, and the note under the table calls the split an estimate.

On Growth and Agency the same numbers come from GET /usage in the API. It uses the same reader as the dashboard, so the two cannot disagree for the same period.

What happens past the allowance

Nothing breaks. At 80 percent of the period’s opens the workspace’s owners and admins get one email, and at 100 percent another. Past 110 percent, new renders carry a small watermark in the corner until the allowance rises or the period ends. The check runs every 15 minutes. Plan quota and the watermark sets out exactly what the watermark is and how it comes off.

Timers from the free generator

A timer from the free generator belongs to no plan, so it has an allowance of its own, over its whole life rather than per month. Without an account, a timer from the generator works for 500 opens. Sign in and claim it, and the same timer, at the same image address, works for 1,000 opens.

  • An open is counted exactly as described above.
  • The check runs about once a minute, so a timer can go a few opens past its allowance before anything changes.
  • Past the allowance, the image address still answers with an image: a plain card saying the free timer’s opens are used up, and how to get more. It is not an error and not a broken image.
  • Opens past the allowance are not counted. So a timer that has used its 500 and is then claimed comes back, and counts down until it reaches 1,000.
  • Timers made before this allowance existed have none, and keep working as before.

Timers built in an account, on any plan, are not affected. The copy a claim puts in your templates is an ordinary draft template, and once published it counts toward your plan like any other.

Why a fetch and not an open

Because a human open cannot be observed from the image side. Apple Mail downloads at arrival. Gmail’s proxy fetches on the reader’s behalf. A reader who looks at a message three times may produce one fetch, and a message nobody reads may produce one too. A count of people reading an image would be a count of fetches under another name.

The terms describe the same unit, as “one request we answer with a rendered image, which is not the same as a human opening your email”. They add that a proxy may fetch once and show the image many times.

Questions and answers

Does an Apple Mail open count if the subscriber never reads the email?

Yes. With Protect Mail Activity on, Apple Mail fetches the image when the message arrives, and that fetch is rendered and counted like any other.

Do I pay again when Gmail shows a cached copy?

No. A copy served from Gmail’s proxy never reaches the image service. A proxy that checks back and gets a 304 is not counted either.

Does a broken or refused request count?

No. A request refused before rendering gets the generic card and is not counted. A template’s own fallback image, drawn when that template cannot render, does count today.

Do timers from the free generator use my opens?

No. They are not in your workspace. A timer from the free generator works for 500 opens without an account, and for 1,000 once you sign in and claim it. After that, the image shows a note that its free opens are used up.

Do previews in the editor use my opens?

No. The editor’s preview is rendered by the dashboard, not by the image service.

When does the count reset?

At the start of the next billing period on a paid plan, and on the first of the month in UTC on the free plan.

Sources

Related

Put a countdown in the campaign you are writing now

The free plan covers 5,000 opens a month with no card. Starter is $19 a month for 250,000.