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
- One clear CTA: Multiple CTAs split attention and tank clicks. Pick one action.
- Outcome-driven copy: "Start your first project" beats "Log in to your account."
- Visual hierarchy: Make the button impossible to miss.
- Timing: 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 subject line to content: If the subject promises a feature, the email should deliver that feature link.
- Front-load the CTA: Don't bury the button. First screen visibility.
- Remove distractions: Footer links, secondary CTAs, and social icons 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: Email → signup form with 10 fields = drop-off. Pre-fill when possible.
- Match 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. Find where users drop.
- Time-sensitive offers: Trial expiring 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
- Sending too frequently: Daily emails to a cold list = instant unsubscribes.
- Irrelevant content: Blasting the same promo to everyone.
- No unsubscribe link (or hidden link): Users mark as spam instead.
- Purchased or scraped lists: People don't remember signing up → spam complaints.
How to reduce unsubscribe/complaint rates
- Segment by engagement: Don't send re-engagement emails to highly engaged users.
- Preference center: Let users choose email frequency instead of unsubscribing.
- Clear unsubscribe link: Make it easy to leave. Paradoxically, this reduces spam complaints.
- 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:
- Email type: Transactional vs onboarding vs lifecycle.
- User segment: Trial users vs paid vs churned.
- Send time: Immediate (password reset) vs scheduled (newsletter).
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): The best engagement metric. Tracks user intent.
- CTOR (click-to-open rate): Measures email content quality independent of subject line.
- Conversion rate: The only metric that ties email to revenue or activation.
- Unsubscribe/complaint rate: Health check. Keep below 0.5% and 0.1% respectively.
- Open rate: Broken post-iOS 15. Use for relative A/B tests only.
- Track by cohort, not globally. Email type, user segment, and timing matter.
Get production-ready email templates with built-in tracking patterns: Transactional templates for Next.js.