If you’re asking how to calculate email open rate, the textbook formula is (Unique Opens ÷ Delivered Emails) × 100. But after six years of running email programs for e-commerce and B2B clients, I can tell you the raw percentage is often a polite fiction. You calculate it by dividing unique opens by delivered emails (not sent, not total opens), then multiplying by 100. You find the numbers in your ESP’s campaign report or by parsing raw send logs. However, Apple Mail Privacy Protection and bot traffic now inflate opens by 10–30% for many lists, so a ‘good’ rate depends on context. Below, I’ll show the exact steps in Mailchimp, HubSpot, and a raw CSV, plus a free calculator.
The Exact Email Open Rate Formula (and the Denominator Trap)
The formula for open rate email that most platforms use is deceptively simple:
Open Rate = (Unique Opens ÷ Delivered Emails) × 100
Unique opens count each recipient once, regardless of how many times they load the tracking pixel. Delivered emails equal sent minus bounces. This is the denominator most ESPs report by default because it excludes addresses that never had a chance of receiving the message.
Where most beginners trip up is the denominator. I’ve audited client dashboards where someone used ‘Total Sent’ as the base, dragging the open rate down by 3–5 points artificially. Others used ‘Total Opens’ (including repeat views) as the numerator, which pushes the rate above 100% for highly engaged segments—yes, I’ve seen a 112% open rate in a HubSpot report because the client celebrated the wrong metric.
Unique Opens vs. Total Opens: When Each Matters
Unique opens answer ‘how many people looked?’ Total opens answer ‘how many times was the email viewed?’ For calculating the standard open rate, always use unique. But if you’re diagnosing creative fatigue, total opens per unique recipient (a frequency ratio) is a separate, useful lens.
Delivered vs. Recipients vs. Sent
Here’s a quick comparison table I use when training junior marketers:
| Denominator | Definition | When to use it |
|---|---|---|
| Sent | All emails pushed to the SMTP server | Never for open rate; only for deliverability bounce math |
| Delivered | Sent minus hard/soft bounces | Default ESP standard; compares against inbox placement |
| Recipients | Unique people in the segment pre-send | When you suppress duplicates and want list-level reach |
The thing nobody tells you about delivered vs recipients: if you email the same person twice in a journey, ‘recipients’ deduplicates but ‘delivered’ may count two sends. For a single campaign, they’re close; for automated sequences, they diverge sharply.
Another nuance: soft bounces. A soft bounce (mailbox full) is sometimes counted as delivered by ESPs after retry, but if it ultimately fails, your denominator is inflated. I always pull a 72-hour post-send snapshot to let retries settle before calculating.
How to Know Email Open Rate in Your ESP (Mailchimp, HubSpot, Klaviyo, Raw Exports)
The question ‘how to know email open rate?’ is really about locating the right columns and understanding the attribution window. Most platforms count an open whenever the hidden pixel loads, and they keep counting indefinitely, but for fair comparison I standardize to a 72-hour post-send snapshot.
Mailchimp
Open your campaign, click Reports > Campaign Performance. The ‘Opens’ card shows Unique Opens and the calculated Open Rate based on delivered. When I first used Mailchimp in 2018, I mistakenly exported the ‘Activity’ CSV and summed the ‘open’ events, forgetting that each row was a separate open event. The correct raw export is Campaigns > View Report > Export which includes a ‘Unique Opens’ column. Note: Mailchimp counts MPP pre-loads as opens, so the number is already inflated for Apple users.
HubSpot
In HubSpot Marketing Hub, go to Email > Analyze and select the sent email. The right sidebar shows ‘Open rate’ with a tooltip noting it’s unique opens / delivered. For raw data, Export > Include all email events gives a CSV with event type ‘EMAIL_OPENED’. Filter for distinct recipient and count. HubSpot’s API v3 also returns uniqueOpens directly if you’re scripting. A bug I hit: the export includes both ‘OPEN’ and ‘PROXY_OPEN’ events post-MPP; you must deduplicate proxy opens to avoid double counting.
Klaviyo
Klaviyo’s dashboard shows ‘Open Rate’ under Analytics > Campaigns. Their ‘Unique Opens’ metric excludes known bots by default, which is a nice advantage. However, if you pull a metric=Opened Email via API, you’ll get every event; you need to group by person_id. I once reported a 45% rate from raw API before grouping, which was actually 28% unique.
Raw Export or SQL
If you run your own SMTP (Postfix + SendGrid logs), you’ll parse JSON events. The key is to deduplicate by message_id + email where event == 'open'. Then divide by the count of event == 'delivered' for that campaign ID. I keep a Python snippet that does this; the most common bug is counting ‘processed’ as delivered, which inflates denominator and deflates rate.
If you want a quick sanity check without writing code, our Email Open Rate Calculator accepts unique opens and delivered counts and outputs the percentage plus a confidence-adjusted range.
Why Your Open Rate Lies: Apple MPP, Bots, and Pixel Blindness
The biggest shift I’ve seen since iOS 15 launched is Apple Mail Privacy Protection (MPP). According to Apple’s own announcement, MPP pre-loads remote content—including open pixels—so opens are recorded even if the user never looks at the email. In a B2B list I managed, MPP lifted reported opens from 22% to 34% overnight with no change in clicks or replies.
Most people don’t realize that bot filters and security gateways also trigger pixels. Proofpoint and Mimecast often render emails in a sandbox, firing opens. Combine MPP and bots, and a ‘30% open rate’ might represent only 18% real human views.
Rule of thumb from my audits: if your open rate jumped after September 2021 and click rate didn’t move, assume 20–30% of opens are non-human.
Another limitation: pixel reliance. If a recipient has images off (common in older Outlook), no open is logged even if they read the text. So open rate is a proxy, not truth. That’s why I pair it with click-to-open rate and reply rate, especially for cold outreach where our Cold Email Reply Rate Estimator sets realistic expectations.
Gmail’s image caching also muddies water: it serves the pixel from Google’s proxy, so one open may be recorded then cached for that user, which actually undercounts subsequent genuine opens. The net effect is messy, not simply inflated.
To detect MPP impact, open your ESP’s email client breakdown. If Apple Mail represents more than 45% of identified clients, I apply a 0.75 true-open factor before reporting. This is imperfect but beats silent inflation.
Is a 30% Email Open Rate Good? Context Matters
Direct answer: Is a 30% email open rate good? For most opt-in marketing lists in 2024, yes—it’s above the cross-industry median. But context is everything. According to Mailchimp’s benchmark report, average open rates vary from 15% (retail) to 28% (education) depending on sector. A 30% rate for a purchased list or cold B2B blast would be spectacular—and suspicious—because those typically see 2–8%.
For a welcome series, 30% is actually low; well-built welcome flows often hit 40–60% pre-MPP. For a re-engagement campaign, 30% is a win. The denominator also matters: if you use ‘recipients’ and dedupe, 30% is stronger than 30% on ‘delivered’ because delivered includes aliases that bounce later.
My framework: benchmark against your own historical cohort, not a generic average. When a client asks ‘is 30% good?’, I show them their own 90-day rolling median. If 30% is above that, it’s good; if below, it’s a red flag regardless of industry stats. In one SaaS client account, their 90-day median was 26% adjusted, so a reported 30% (adjusted 21%) was actually a decline—a nuance executives missed until we reframed it.
What Is a 1,000-Person Email List Worth? (Beyond Open Rate)
The PAA question ‘How much is a 1000 email list worth?’ can’t be answered by open rate alone. Value derives from monetizable actions: sales, calls, or ad impressions. Suppose you have 1,000 subscribers, 30% open (300 humans pre-MPP, maybe 200 post-MPP), and your conversion-to-customer rate from opens is 2%. That’s 4–6 customers. If your average customer lifetime value is $500, the list is worth $2,000–$3,000 per send cycle—not a static number.
Contrast that with a cold list of 1,000 scraped addresses: open rate might be 5% (50 opens), but deliverability reputation tanks and conversions near zero. The list could be worth negative due to sender domain damage. I learned this the hard way in 2019 when a client insisted on buying a list; we got 80% spam complaints and lost our primary domain for 3 weeks.
Let’s model three personas. An e-commerce list of 1,000 with 30% true opens, 10% click, 3% purchase, $40 AOV yields $360 per send. A B2B SaaS list with 20% true opens, 5% click, 1% demo, $2k LTV yields $400 per send. A local service list with 25% true opens, 8% call, 20% close, $300 job yields $1,200 per send. The open rate is identical but worth varies 3x.
So when evaluating list worth, compute expected revenue = (Unique Opens × True Open Adjustment) × Click Rate × Conversion Rate × LTV. Open rate is just an input, not the output. For freelancers pricing email services, this mirrors how we argue for true parity in calculating freelance hourly rate—value is based on outcome, not activity.
A Privacy-Aware Calculation Framework (Step-by-Step + Google Sheets)
To move beyond the vanity number, I use a three-step ‘Adjusted Open Rate’ model. You can replicate it in Google Sheets in 10 minutes.
Step 1: Pull Raw Unique Opens and Delivered
From your ESP export, note Unique Opens (U) and Delivered (D). Base rate = U/D. In Sheets: =U/D.
Step 2: Estimate Non-Human Opens
Calculate click-to-open rate (CTOR = Unique Clicks ÷ Unique Opens). If historical CTOR was 15% and post-MPP it drops to 9%, the gap suggests ~40% of opens are phantom. Apply adjustment factor A = (Old CTOR ÷ New CTOR) capped at 0.7. True opens ≈ U × A. In Sheets: =U*MIN(OldCTOR/NewCTOR,0.7).
Step 3: Compute Adjusted Rate
Adjusted Open Rate = (True Opens ÷ D) × 100. Report both numbers to stakeholders: ‘Reported 32%, adjusted ~22%.’ In Sheets: =(U*MIN(OldCTOR/NewCTOR,0.7))/D*100.
I also add conditional formatting in Sheets: if adjusted rate is <70% of reported, flag orange. This visual cue prevents stakeholders from quoting the inflated number.
Here’s a decision matrix for denominator choice in different scenarios:
| Scenario | Use Denominator | Reason |
|---|---|---|
| Single promotional blast to cleaned list | Delivered | Standard ESP comparison |
| Automated onboarding sequence | Recipients entered | Avoid double-counting same person |
| Legal/transactional compliance | Sent | Prove attempt to deliver |
| Post-MPP consumer newsletter | Delivered + adjustment | Accounts for phantom Apple opens |
For a ready-made template, copy our Email Open Rate Calculator logic into Sheets: input U, D, Clicks, and it outputs adjusted rate with MPP slider.
Common Mistakes I Made Calculating Open Rates (and How to Avoid Them)
When I first tried to calculate email open rate for a nonprofit client, I made the mistake of trusting the ESP’s ‘total opens’ because it looked more impressive in the board deck. The board thought engagement tripled; reality was flat. Here’s what I learned:
- Always label whether the rate is unique or total—mixed reporting destroys trust.
- Segment Apple Mail users; if >50% of your list uses it, discount opens by the MPP factor.
- Don’t compare a post-MPP 2023 rate to a 2020 rate without normalization.
- Watch for bot spikes: a sudden 10-point jump with zero click change is not a win.
- API exports may paginate; missing pages undercount opens by hundreds.
The most overlooked edge case: shared inboxes. A support@ alias opened by 5 employees counts as one unique open but represents multiple readers. For internal communications, open rate undercounts real eyes. Conversely, for one-to-one cold email, a single open by a gatekeeper may count as the only signal even if the decision-maker never saw it.
Final Checklist for Reporting Open Rate to Clients or Bosses
Use this checklist before you hit send on any email metrics report:
- State formula used: (Unique Opens ÷ Delivered) × 100.
- Note MPP/bot adjustment if list is consumer-heavy.
- Include click-to-open rate as a sanity check.
- Benchmark against own prior period, not just industry avg.
- If using a calculator, link to the Email Open Rate Calculator for transparency.
Calculating email open rate is easy; interpreting it honestly is the real skill. Use the steps above and you’ll never be fooled by an inflated vanity metric again.
