Bounce and complaint rates monitored per campaign and per sending domain
Why it matters
Individual bounce and complaint event rows tell you what happened; per-campaign and per-domain aggregate metrics tell you which campaigns and which domains are causing the problem. A campaign that achieves a 5% bounce rate damages reputation differently from one achieving 0.5% — but without precomputed aggregate metrics, identifying the high-bounce campaign requires an ad-hoc query that no one runs until the deliverability crisis is already underway. Per-domain aggregates enable the question: is the bounce rate increasing consistently for a specific sending domain, indicating DNS authentication drift, or is it isolated to specific campaigns, indicating list quality problems?
Severity rationale
Low because the raw events are still stored and queryable, but the absence of precomputed aggregates means actionable signals only surface through manual analysis rather than automated alerting.
Remediation
Compute and store bounce and complaint rates after each campaign completes and on a daily cron for domain-level metrics. Upsert to a campaignMetrics table so the result is idempotent:
export async function computeCampaignBounceRate(
campaignId: string
): Promise<{ bounceRate: number; complaintRate: number }> {
const [sent, bounces, complaints] = await Promise.all([
db.emailLog.count({ where: { campaignId } }),
db.bounceEvent.count({ where: { campaignId } }),
db.complaintEvent.count({ where: { campaignId } })
])
const bounceRate = sent > 0 ? bounces / sent : 0
const complaintRate = sent > 0 ? complaints / sent : 0
await db.campaignMetrics.upsert({
where: { campaignId },
update: { bounceRate, complaintRate, updatedAt: new Date() },
create: { campaignId, bounceRate, complaintRate }
})
return { bounceRate, complaintRate }
}
Alert when bounceRate > 0.02 (2% is a widely cited warning threshold) or complaintRate > 0.0008. Surface both metrics in the campaign reporting UI so marketing can self-diagnose without waiting for engineering.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Deliverability Engineering Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- iso-25010:2011 · reliability — ISO 25010 Reliability characteristic
Taxons
History
- 2026-04-18·v1.0.0·Initial import from deliverability-engineering·automated