📊 Measurement & Testing

Email Marketing Metrics Formulas: How to Calculate Open Rate, CTR, CTOR and Bounce Rate

Exact formulas for open rate, CTR, CTOR, bounce, unsubscribe and complaint rate, with a worked example and the pitfalls that distort them.

Illustration of an analytics dashboard with email metric gauges
Quick answer

Divide by delivered (sent minus bounced) for engagement metrics: open rate = unique opens ÷ delivered, CTR = unique clicks ÷ delivered, CTOR = unique clicks ÷ unique opens, unsubscribe and complaint rate = count ÷ delivered. Bounce rate = bounced ÷ sent. Opens have been inflated by Apple Mail Privacy Protection since 2021, so rely on clicks and conversions for decisions.

Two teams can send the identical campaign and report "20% open rate" and "18% open rate" because they divide by different numbers. Before comparing anything to a benchmark, make sure you calculate the metrics the same way. These are the formulas used by this site's calculator, explained with a worked example.

The formulas

MetricFormulaDenominator
Delivery ratedelivered ÷ sentSent
Bounce ratebounced ÷ sentSent
Open rateunique opens ÷ deliveredDelivered
Click-through rate (CTR)unique clicks ÷ deliveredDelivered
Click-to-open rate (CTOR)unique clicks ÷ unique opensOpens
Unsubscribe rateunsubscribes ÷ deliveredDelivered
Spam complaint ratecomplaints ÷ deliveredDelivered
Conversion rate (from email)conversions ÷ unique clicksClicks

Where delivered = sent − bounced. Always use unique opens and clicks (one per recipient), not total events.

A worked example

You send a campaign to 10,000 recipients. 150 bounce, 2,100 unique opens, 420 unique clicks, 12 unsubscribes, 9 spam complaints and 40 purchases.

MetricCalculationResult
Delivered10,000 − 1509,850
Bounce rate150 ÷ 10,0001.50%
Open rate2,100 ÷ 9,85021.32%
CTR420 ÷ 9,8504.26%
CTOR420 ÷ 2,10020.00%
Unsubscribe rate12 ÷ 9,8500.12%
Complaint rate9 ÷ 9,8500.09%
Conversion rate40 ÷ 4209.52%
Email Metrics CalculatorDelivery, open, click, bounce and complaint rates with 95% confidence intervals and consistency warningsOpen the tool →

Why "delivered" and not "sent"

Bounced messages never reached an inbox, so they cannot be opened. Dividing opens by sent punishes the metric for list-quality problems, mixing content performance with list health. Reporting bounce rate separately (against sent) keeps the two stories apart. Some platforms divide by sent by default; check your ESP's definition before comparing numbers across tools.

The open-rate problem

Since Apple's Mail Privacy Protection (2021), Apple Mail can preload email images, including the tracking pixel, whether or not the person reads the message. These "opens" inflate the open rate, remove the reliability of open time and location, and make some audiences look more engaged than they are. Use opens only as a rough trend and base decisions on clicks and conversions. We explain how to adapt in our guide to Apple Mail Privacy Protection and open rates.

Which numbers to watch together

No single metric tells the story. Read them as a funnel and look for where it narrows:

StageMetricIf it is weak, suspect
Reached the serverBounce rate, delivery rateList quality, typos, old addresses (see list hygiene)
SeenOpen rate (directional only)Subject line, sender name, filtering, MPP noise
InterestedCTR and CTOROffer, layout, call to action, relevance of the segment
ActedConversion rate, revenue per emailLanding page, price, tracking set-up
TrustUnsubscribe and complaint rateFrequency, expectations set at sign-up, mismatched content

A healthy CTR with a rising complaint rate is a warning, not a win: you are getting clicks from some people while annoying others. Likewise a very high CTOR on a tiny open count usually means only your most loyal readers are visible.

Total versus unique, and why it matters

If one person opens an email five times, total opens counts five and unique opens counts one. Total figures reward re-reading and tracking-pixel reloads; unique figures answer the question you actually care about, how many people. Some platforms report "click rate" using total clicks by default, which makes link-heavy newsletters look better than they are. Choose unique counts as your standard and label every chart with which one you used.

Rates that need a different denominator

Not every rate divides by delivered. Two variants are worth knowing:

  • Revenue per email (RPE): revenue attributed to the campaign ÷ delivered. It combines click and conversion performance into one comparable number across campaigns of different sizes.
  • List growth rate: (new subscribers − unsubscribes − bounced addresses removed) ÷ list size at the start of the period. A list that grows slowly but cleanly usually outperforms a fast one full of weak sign-ups.
  • Click rate on a unique recipient basis for automations: for flows such as a welcome series, calculate per step and per cohort, because a message sent to everyone on day one and to a few on day ten is not comparable.

Whatever you choose, write the formula next to the chart. Most "our open rate fell" debates are really arguments about definitions.

Auditing your reports in five minutes

  1. Pick one past campaign and recalculate open rate, CTR and CTOR by hand from the raw counts.
  2. Compare with what your platform shows. If they differ, find out whether it divides by sent, counts total events or filters bots.
  3. Check whether your platform's "open" excludes machine opens; most do not fully.
  4. Confirm that complaint and bounce counts come from the same send as the engagement figures.
  5. Write down the definitions once, and use them for every report from then on.

Benchmarks: use them carefully

Industry benchmark tables are tempting but weak guides: they mix audiences, definitions and open-tracking inflation. The more useful comparison is your own campaigns over time with the same formulas. Two sanity thresholds are widely used:

  • Complaint rate: below 0.1%, never reaching 0.3% (Gmail and Yahoo guidance).
  • Bounce rate: many senders treat above about 2% as a sign that list cleaning is needed.

Small samples lie: use a confidence interval

A 25% open rate from 40 recipients is very uncertain; from 40,000 it is solid. A 95% confidence interval expresses that uncertainty. For example, 200 opens out of 1,000 delivered is 20.0%, but the true rate is plausibly anywhere from about 17.6% to 22.6%. When two campaigns differ by less than the width of their intervals, you cannot claim one is better. The calculator above shows the Wilson interval for every rate.

When you need to decide between two versions, use a significance test and sample-size plan instead of eyeballing percentages: see the email A/B test sample size guide.

Clicks are not immune to machines

Opens get the attention, but clicks can be inflated too. Corporate security gateways often follow every link in an incoming message to scan it for malware, which registers as a click within seconds of delivery, sometimes on every link including the unsubscribe link. Warning signs are clicks that arrive almost instantly, one recipient "clicking" every link in order, and clicks from the same IP ranges across many recipients. Most platforms filter the obvious cases, but you can add a second check: count a click as real only when it is followed by a site session or conversion, and compare that "verified click rate" with the raw CTR. A large gap suggests your numbers contain machine traffic.

Reporting template you can reuse

LineWhat to include
AudienceSegment name, sent, delivered, bounce rate
EngagementUnique CTR and CTOR, with interval; opens flagged as directional
OutcomeConversions, conversion rate, revenue per email
HealthUnsubscribe rate and complaint rate against your thresholds
NotesAnything unusual: send time, list changes, tracking issues

Calculating a Wilson interval yourself

NIST's handbook documents the Wilson method (also called Agresti–Coull) for the confidence interval of a proportion. With p as the observed rate, n as delivered emails and z = 1.96 for 95% confidence, the centre is (p + z²/2n) / (1 + z²/n) and the half-width is z·√(p(1−p)/n + z²/4n²) / (1 + z²/n). For 200 opens out of 1,000 delivered, p = 0.20 gives roughly 17.6% to 22.6%. Wilson behaves better than the simple "p ± z·√(p(1−p)/n)" formula when n is small or the rate is near 0% or 100%, which is exactly where email complaint and bounce rates live.

Common mistakes

  • Mixing total and unique opens or clicks.
  • Comparing open rates across ESPs with different denominators or bot filtering.
  • Treating CTOR as a measure of subject-line performance; it measures how compelling the content is among openers.
  • Ignoring tracking blocking: privacy tools can hide opens (but not clicks).
  • Making decisions from tiny segments without intervals.

Frequently asked questions

How do you calculate email open rate?

Unique opens divided by delivered emails (sent minus bounces), expressed as a percentage.

What is the click-to-open rate formula?

CTOR = unique clicks ÷ unique opens. It shows how many people who opened also clicked.

Is bounce rate calculated on sent or delivered?

Bounce rate uses sent emails as the denominator: bounced ÷ sent. Delivered is sent minus bounced.

Why is my open rate so high?

Apple Mail Privacy Protection and some security scanners load tracking pixels automatically, inflating opens. Compare clicks and conversions instead.

What is a good spam complaint rate?

Below 0.1% is the common target, and Gmail and Yahoo ask senders to stay under 0.3%.

References & further reading

  1. Google — Email sender guidelines FAQ
  2. Apple — Protect Mail activity (Mail Privacy Protection)
  3. NIST/SEMATECH e-Handbook — 7.2.4.1 Confidence intervals (Wilson / Agresti–Coull)

Related articles

Measurement & Testing

Email A/B Test Sample Size: How Many Subscribers You Need for a Reliable Result

How to calculate email A/B test sample size and read significance correctly: baseline, minimum effect, power, duration and common mistakes.

6 min read
Measurement & Testing

UTM Parameters for Email Campaigns: A Naming Convention That Keeps Your Data Clean

UTM parameters for email campaigns: what each does in GA4, a consistent naming convention with examples and the mistakes that corrupt reports.

5 min read
Campaign Content & Optimization

Email Spam Trigger Words: Do They Still Matter for Deliverability?

Which spam trigger words really hurt deliverability today? How spam filters work, which phrases to avoid in subject lines and how to rewrite them.

7 min read