Blog

Stay up to date with the latest blog posts and articles.

ObservabilityEmailDeliverabilityMonitoringDeveloperExperience

Email observability: the complete guide for developers

Your API returns 202 Accepted, but did the email reach the inbox? Learn how email observability gives you full visibility into delivery, bounces, complaints, and engagement so you can debug issues in minutes instead of days.

Olivier Bazoud
2/5/2026
13 min read

Your email API returns 202 Accepted. The password reset email is "sent." But your user is staring at an empty inbox, locked out of their account, about to open a support ticket.

Between sent and received, there are bounces, spam filters, throttling, authentication failures, and reputation-based filtering. Without observability, you only learn about delivery problems when users complain. By then, the damage is done.

This guide covers what email observability is, which metrics matter, how to set up monitoring that actually helps you debug issues, and how to build automated responses that protect your sender reputation.

What email observability means (and what it does not)

Most email platforms give you two data points: sent and failed. That is basic monitoring, not observability.

Email observability means having full visibility into the lifecycle of every email you send:

  • Was it accepted by the recipient's mail server?
  • Did it bounce, and if so, was it permanent or temporary?
  • Did the recipient open it or click a link?
  • Did someone mark it as spam?
  • What was the API request that triggered the send, and what response did the server return?

The difference matters. Monitoring tells you something broke. Observability tells you what broke, where, and why, with enough context to fix it in minutes instead of days.

Why observability matters for transactional emails

Transactional emails carry direct business impact. Every undelivered email is a concrete problem:

Email typeWhat happens when it fails
Password resetUser locked out, support ticket opened
Order confirmationCustomer anxiety, "where is my order?" calls
Account verificationUser cannot complete onboarding, churns
Invoice / receiptCompliance risk, payment disputes
Two-factor authUser cannot log in, workflow blocked

These are not marketing emails where a 20% open rate is acceptable. Transactional emails have a delivery expectation close to 100%. When they fail silently, you lose users and trust.

The hidden cost of flying blind

Without observability, problems compound silently:

  1. A batch of invalid email addresses enters your system through a buggy signup flow
  2. Bounce rate climbs over several days, but nobody notices
  3. Sender reputation degrades as email providers see consistent bounces from your domain
  4. Legitimate emails start landing in spam for all your users, not just the invalid ones
  5. Users stop receiving critical emails like password resets and order confirmations
  6. Support tickets spike, but the root cause is not obvious because you have no delivery data

By the time you realize the problem, your sender reputation may take weeks to recover. A real-time observability system catches step 2, before the cascade begins.

The metrics that matter

Not all email metrics are equally important. Focus on these four, in this order.

Delivery rate

The percentage of emails successfully accepted by recipient mail servers. This is your primary health indicator.

Healthy threshold: above 95%

A delivery rate below 95% signals a systemic issue with your sending domain, your email content, or the quality of your recipient list. Track this metric as a trend line over 7 and 30 days. A single day's data can be misleading, but a downward trend over a week demands investigation.

Bounce rate

The percentage of emails that could not be delivered. Bounces fall into two categories:

Hard bounces (permanent): The email address does not exist, the domain is invalid, or the server permanently rejects the message. These addresses should be suppressed immediately to prevent future sends.

Soft bounces (transient): The mailbox is full, the server is temporarily unavailable, or the message was throttled. These may succeed on retry.

Critical threshold: 4%

Exceeding 4% puts your sending domain at risk. Consequences include reduced deliverability across all your emails, domain suspension, or permanent account restrictions from your email infrastructure provider.

Common bounce reasons and what they tell you:

ReasonWhat it meansAction
NoEmailAddress does not existSuppress immediately, review signup validation
MailboxFullRecipient's inbox is fullRetry later, suppress after repeated failures
ContentRejectedContent flagged by receiving serverReview email content and authentication
SuppressedAddress on suppression listAlready handled, verify suppression list is working
MessageTooLargeEmail exceeds size limitsReduce attachment size or use hosted links

Complaint rate

The percentage of delivered emails that recipients marked as spam. This is the most sensitive metric. When someone clicks "Report spam," it generates a complaint that email providers weigh heavily.

Critical threshold: 0.08%

That is less than 1 complaint per 1,250 delivered emails. The threshold is strict because complaints are the strongest negative signal to mailbox providers. Exceeding it can result in your emails being routed to spam folders for all recipients, not just the one who complained.

Complaint feedback types tell you why:

  • abuse: Recipient considers the email unwanted
  • fraud: Recipient believes the email is a phishing attempt
  • auth-failure: Email failed SPF, DKIM, or DMARC authentication
  • not-spam: Recipient reversed a previous spam report

If you see auth-failure complaints, your email authentication is misconfigured. Check your DKIM, SPF, and DMARC setup.

Engagement metrics

Open rates and click rates measure whether recipients interact with your emails. While they do not directly affect deliverability thresholds, they are signals that email providers use to decide inbox placement.

Consistently low open rates across all email types may indicate that your emails are being filtered to spam. Low open rates for a specific email type suggest a subject line or content problem.

Beyond metrics: per-email event timelines

Aggregate metrics tell you the health of your email system. But when a specific user reports "I never got my password reset email," you need to trace the lifecycle of that individual email.

A per-email event timeline shows every state transition for a single message:

1Email abc-123
2├─ 10:42:01.037 API request received
3├─ 10:42:01.142 Accepted for delivery
4├─ 10:42:01.384 Sent to recipient server
5├─ 10:42:01.891 Delivered to inbox
6├─ 10:43:12.390 Opened
7└─ 10:43:15.712 Link clicked (https://yourapp.com/reset?token=...)
8

From API request to inbox in 854ms. That is the level of granularity you need to understand your email pipeline.

Or when something goes wrong:

1Email def-456
2├─ 10:42:01.037 API request received
3├─ 10:42:01.142 Accepted for delivery
4├─ 10:42:01.384 Sent to recipient server
5└─ 10:42:01.826 Bounced (permanent) - NoEmail
6

This level of detail transforms debugging from guesswork into a 30-second lookup. Instead of asking "did we send it?", you can answer "we sent it, it was delivered at 10:42:01.891, and the user opened it at 10:43:12."

With Nuntly's observability dashboard, every email has this timeline available. No premium tier required, no extra configuration. You search by email ID, recipient address, or subject line, and see the full event history.

Deep-stack observability

Basic email monitoring tracks delivery events. Deep-stack observability covers every layer of your email system:

1. API logs

Every API request your application makes to send an email is logged with the full request payload, response, status code, and latency. When a developer asks "did my code actually call the send endpoint?", the answer is in the API logs.

This is critical for debugging integration issues. If your application sends a malformed request, you see the exact payload and the error response without needing to reproduce the issue locally.

2. Delivery tracking

The core email pipeline: sent, delivered, bounced, deferred. Track delivery rates by domain, by email type, and over time windows.

3. Email flow visualization

A Sankey diagram showing how emails move through each stage:

1Sent (10,000)Delivered (9,750)Opened (4,200)Clicked (1,100)
2Bounced (180)
3Complained (12)
4Deferred (58)
5

This visual makes it immediately obvious where emails drop off. If the delivered-to-opened ratio is unusually low, your emails may be landing in spam despite being "delivered."

4. Webhook event logs

When you send email events to your application via webhooks, you need visibility into the webhook delivery itself. Did your endpoint receive the event? Did it respond with a 200? If it failed, what was the response?

Webhook event logs with replay capability mean you never lose an event. If your endpoint was down for 10 minutes, you can replay the missed events after it recovers.

5. API throughput and latency

Monitor your sending volume and API response times over time. A sudden spike in latency may indicate rate limiting. A drop in volume may signal an application bug preventing emails from being queued.

Nuntly provides all five layers in a single dashboard, across all plans. No external monitoring tool required.

Practical implementation with the Nuntly SDK

Here is how to send an email with tags for filtering in the observability dashboard:

1const { data, error } = await nuntly.emails.send({
2 from: 'notifications@yourapp.com',
3 to: 'user@example.com',
4 subject: 'Reset your password',
5 html: '<p>Click the link below to reset your password.</p>',
6 tags: [
7 { name: 'type', value: 'password-reset' },
8 { name: 'environment', value: 'production' },
9 ],
10});
11
12if (data) {
13 console.log('Email sent', { emailId: data.id });
14}
15
16if (error) {
17 console.error('Send failed', { error: error.message });
18}
19

The tags array lets you filter and segment your observability data. In the dashboard, you can view delivery metrics specifically for password-reset emails, or compare production vs staging environments.

The data.id is the email's unique identifier. Use it to look up the full event timeline in the dashboard or correlate with webhook events in your application logs.

Automating responses with webhooks

Observability is not just about looking at dashboards. It is about building automated systems that react to email events in real time.

Configure a webhook to receive events and handle them in your application:

1app.post('/webhooks/email-events', async (c) => {
2 const event = await c.req.json();
3
4 switch (event.type) {
5 case 'bounced':
6 if (event.data.bounceType === 'permanent') {
7 // Suppress the address to protect sender reputation
8 await db.update(users).set({ emailStatus: 'invalid' }).where(eq(users.email, event.data.recipient));
9 }
10 break;
11
12 case 'complained':
13 // Flag the user and alert the team
14 await db.update(users).set({ emailStatus: 'complained' }).where(eq(users.email, event.data.recipient));
15
16 await alertTeam('Spam complaint received', {
17 recipient: event.data.recipient,
18 emailId: event.emailId,
19 });
20 break;
21 }
22
23 return c.json({ received: true }, 200);
24});
25

With this setup, hard bounces automatically suppress future sends to invalid addresses, and complaints trigger team alerts before the complaint rate reaches dangerous levels.

Ready to get started?

Ship emails, not infrastructure

Free plan available. No credit card required.

Start sending free

The 30-day retention advantage

Imagine this scenario: a user contacts support on Thursday saying they did not receive an invoice sent 12 days ago. Your support team needs to investigate.

With 3-day log retention (common on many platforms), that data is gone. The support team has no way to verify whether the email was sent, delivered, bounced, or filtered. The conversation becomes "we sent it, please check your spam folder" with no evidence either way.

With 30-day log retention, the support team searches for the user's email address and sees the full event timeline from 12 days ago. The email was delivered, opened 3 times, and a link was clicked. The user received it. Issue resolved in under a minute.

Nuntly retains all email event data for 30 days on every plan. No data loss, no upsell for longer retention. When a delivery dispute arises, you have the data to resolve it.

Setting up alerts and thresholds

Dashboards are useful when you are looking at them. Alerts catch problems when you are not. Configure threshold-based alerts for these metrics:

MetricWarningAction required
Delivery rateBelow 97%Below 95%
Bounce rateAbove 2%Above 4%
Complaint rateAbove 0.05%Above 0.08%
Send volume50% above/below baseline80% above/below baseline

Volume anomalies deserve attention too. A sudden drop in send volume may indicate an application bug that prevents emails from being sent. A sudden spike may indicate an abuse scenario or a misconfigured batch job.

Building a monitoring routine

Tools alone are not enough. A monitoring routine turns observability into consistent action:

  1. Daily (under 1 minute): Check the dashboard for anomalies. Look at delivery rate, bounce rate, and complaint rate. If all three are within thresholds, move on.
  2. Weekly: Review 7-day trend lines. Look for gradual degradation that daily checks might miss. Compare metrics by email type to spot problems with specific templates.
  3. On alert: Investigate immediately. Check the event timeline for affected emails, identify the root cause, and take corrective action before the problem compounds.
  4. Monthly: Audit overall email health. Review your suppression list size, check domain authentication status, and compare engagement metrics across email types.

Debugging a real delivery issue: step by step

Here is how observability turns a vague "emails are not working" report into a resolved incident:

Step 1: Check aggregate metrics. The dashboard shows bounce rate spiked from 1.2% to 6.8% in the last 4 hours.

Step 2: Filter by bounce type. Hard bounces increased significantly. Soft bounces are unchanged.

Step 3: Filter by email type. The spike is isolated to account-verification emails. Other email types are unaffected.

Step 4: Inspect individual bounces. The event timelines show bounce reason NoEmail for addresses at a specific domain pattern. The addresses look auto-generated.

Step 5: Identify root cause. A bot is submitting fake email addresses through the signup form. The verification emails to these addresses are bouncing.

Step 6: Fix and verify. Add CAPTCHA to the signup form and rate limiting on the verification endpoint. Monitor the bounce rate as it returns to normal over the next few hours.

Without observability, this scenario plays out differently: the bounce rate climbs silently for days until the email infrastructure provider suspends your domain. Recovery takes weeks instead of hours.

How to reduce bounces and complaints

Observability shows you the problem. Here is how to fix the most common issues:

Reducing bounces:

  • Validate email addresses at signup with format and domain checks
  • Suppress hard-bounced addresses immediately and permanently
  • Use double opt-in for new accounts to verify address ownership
  • Monitor bounce patterns by type and reason to catch systemic issues early

Reducing complaints:

  • Only send expected, transactional emails that the user triggered
  • Use a recognizable sender name and from address
  • Ensure proper email authentication (DKIM, SPF, and DMARC)
  • Never send marketing content disguised as transactional emails
  • Include clear unsubscribe links where appropriate

Start monitoring your emails

Transactional emails are too important to send without visibility. Every undelivered password reset, every bounced invoice, and every spam complaint has a real cost.

Nuntly gives you full observability out of the box: per-email event timelines, API logs, delivery dashboards, webhook event tracking with replay, and 30 days of retention on every plan. No configuration needed, no premium tier required.

"Observability is gamechanging."

Ready to get started?

Ship emails, not infrastructure

Free plan available. No credit card required.

Start sending free