Most SaaS teams track the wrong email metrics. Open rates look great but don't move the needle. Delivery rates stay high while activation tanks. Click counts climb, but conversions don't follow.
The problem: vanity metrics feel good but don't predict revenue or retention.
Open rate (and why it's broken)
Open rate = (opens ÷ delivered) × 100. Sounds simple. It's not.
iOS 15 killed open rate accuracy
Apple Mail Privacy Protection (MPP) pre-loads emails on the server, triggering "opens" whether the user sees the email or not. For many SaaS products, 40-60% of opens are now phantom opens from iOS users who never looked at the email.
What open rate still tells you
Open rates are useful for relative comparisons (testing subject lines within the same audience), not absolute benchmarks.
- Use: Compare subject line variants in an A/B test (same list, same send time).
- Don't use: Measure engagement health or trigger re-engagement campaigns based on "didn't open."
Benchmark (pre-iOS 15): 15-25% for SaaS transactional emails. Post-iOS 15, add 10-20 points of phantom opens. Meaningless.
Click-through rate (CTR): the real engagement signal
Click-through rate = (unique clicks ÷ delivered) × 100. This is the metric that shows user intent.
Unlike opens, clicks require deliberate action. If someone clicks, they engaged. If they don't, they didn't - regardless of what the open tracker says.
Benchmarks
- Transactional (password reset, verification): 40-70% (high urgency, clear CTA).
- Onboarding (welcome, trial nudges): 10-25% (still engaged, motivated).
- Lifecycle (re-engagement, feature announcements): 2-8% (depends on list quality).
- Marketing (newsletters, promos): 2-5% (broadcast, lower intent).
How to improve CTR
Start with one clear CTA per email. Multiple CTAs split attention and tank clicks. Use outcome-driven copy: "Start your first project" beats "Log in to your account." Make the button impossible to miss with strong visual hierarchy, and send when the user is most likely to act (e.g., onboarding emails within 5 minutes of signup).
Click-to-open rate (CTOR): engagement quality
Click-to-open rate = (unique clicks ÷ unique opens) × 100. This tells you: of the people who opened, how many clicked?
CTOR isolates email content quality from subject line effectiveness. High CTOR = good email. Low CTOR = the email didn't deliver on the promise.
Benchmarks
- Transactional: 60-80% (if they open a password reset, they click).
- Onboarding: 30-50% (clear value, motivated audience).
- Lifecycle / marketing: 15-30% (depends on offer relevance).
If CTOR is below 20%, the email content doesn't match the subject line expectation - or there's no clear CTA.
How to improve CTOR
Match your subject line to the email content. If the subject promises a feature, the email should deliver that feature link. Front-load the CTA so it's visible without scrolling, and strip out distractions like footer links, secondary CTAs, and social icons that dilute focus.
Conversion rate: the metric that pays
Conversion rate = (conversions ÷ delivered) × 100. This is the only metric that directly ties email to revenue or product activation.
A conversion is whatever goal matters for that email: completed onboarding, upgraded to paid, reset password successfully, completed purchase.
Benchmarks (SaaS)
- Transactional (password reset, verification): 50-80% (most who click, complete).
- Onboarding (activation nudges): 5-20% (depends on activation friction).
- Trial-to-paid: 2-10% (highly variable by pricing).
- Re-engagement: 0.5-3% (cold list, low intent).
How to improve conversion rate
Reduce landing page friction first. An email that leads to a signup form with 10 fields will drop off hard. Pre-fill when possible. Make sure the landing page matches the email promise - if the email says "try for free," the landing page should say the same thing. Track the full funnel (email click → page load → action complete) to find where users drop. Time-sensitive offers like trial expiration emails convert better than generic "still time" nudges.
Unsubscribe and complaint rate: the health check
Unsubscribe rate = (unsubscribes ÷ delivered) × 100. Complaint rate = (spam complaints ÷ delivered) × 100.
These metrics tell you if your emails are annoying or unwanted. High rates = deliverability risk.
What causes high unsubscribe/complaint rates
The usual culprits: sending too frequently (daily emails to a cold list means instant unsubscribes), blasting irrelevant content to everyone, hiding or omitting the unsubscribe link (users mark as spam instead), and using purchased or scraped lists where people don't remember signing up.
How to reduce unsubscribe/complaint rates
Segment by engagement so you're not sending re-engagement emails to people who are already active. Add a preference center that lets users choose email frequency instead of unsubscribing entirely. Make the unsubscribe link easy to find - paradoxically, this reduces spam complaints. And sunset disengaged users: stop emailing people who haven't clicked in 6+ months.
Metrics to ignore (or deprioritize)
Delivery rate
Delivery rate = (delivered ÷ sent) × 100. Should be 98-99%+ for any decent ESP. If it's not, you have list hygiene problems (bounces, invalid emails).
Don't obsess over delivery rate unless it drops below 95%. Focus on inbox placement (harder to measure, more important).
Total clicks (vs unique clicks)
Total clicks count every click from the same user. Unique clicks count each user once. Total clicks inflate engagement (one user clicking 5 times looks like 5 engaged users).
Always track unique clicks for engagement metrics. Total clicks are useful for tracking bot/scanner activity.
List growth rate
Growing your list is good. But list size without engagement is vanity. A 10K engaged list beats a 100K cold list every time.
Track engaged list size (clicked in last 90 days), not total subscribers.
How to track these metrics
1. Use ESP built-in analytics
Resend, Postmark, SendGrid, and Mailchimp all track opens, clicks, bounces, and complaints out of the box. Start there.
2. Add custom conversion tracking
ESPs track clicks, but they don't know if the user completed signup or purchased after clicking. You need to track conversions separately.
Add UTM parameters to email links and track conversions in your analytics tool (Mixpanel, Amplitude, PostHog, GA4).
3. Track metrics by cohort, not globally
Global email metrics hide problems. Break metrics down by:
Break them down by email type (transactional vs onboarding vs lifecycle), user segment (trial vs paid vs churned), and send timing (immediate like password resets vs scheduled like newsletters).
Example: A 5% CTR might be great for a newsletter but terrible for a trial expiration email.
Sample metric dashboard
Track these weekly (or per-send for high-volume campaigns):
- CTR (primary): Are users engaging?
- CTOR: Is the email content working?
- Conversion rate: Are clicks turning into outcomes?
- Unsubscribe rate: Is frequency/relevance off?
- Complaint rate: Are we approaching deliverability risk?
Secondary (context only):
- Open rate: For subject line A/B tests only.
- Delivery rate: Should stay above 98%. If it drops, investigate bounces.
Metric targets by email type
Transactional (password reset, verification, receipts)
- CTR: 40-70%
- CTOR: 60-80%
- Conversion: 50-80%
- Unsubscribe: <0.1% (these shouldn't have unsubscribe links)
- Complaint: <0.05%
Onboarding (welcome, activation nudges, trial emails)
- CTR: 10-25%
- CTOR: 30-50%
- Conversion: 5-20%
- Unsubscribe: <0.3%
- Complaint: <0.1%
Lifecycle (re-engagement, feature announcements)
- CTR: 2-8%
- CTOR: 15-30%
- Conversion: 1-5%
- Unsubscribe: 0.3-0.5%
- Complaint: <0.1%
Marketing (newsletters, promotions)
- CTR: 2-5%
- CTOR: 15-25%
- Conversion: 0.5-3%
- Unsubscribe: 0.3-0.8%
- Complaint: <0.1%
TL;DR
CTR (click-through rate) is the best engagement metric - it tracks user intent. CTOR (click-to-open rate) measures content quality independent of subject line. Conversion rate is the only metric that ties email to revenue or activation. Watch unsubscribe and complaint rates as a health check: keep them below 0.5% and 0.1% respectively. Open rate is broken post-iOS 15 - use it for relative A/B tests only. And always track by cohort (email type, user segment, timing), not globally.
Get production-ready email templates with built-in tracking patterns: Transactional templates for Next.js.