Contact age tracked per record
Why it matters
A contact record with no engagement timestamp is indistinguishable from one acquired yesterday versus three years ago. Without per-record age tracking, list hygiene jobs cannot identify stale contacts for re-verification, re-engagement campaigns cannot target the right cohort, and sender reputation metrics cannot explain why open rates are declining. A generic updated_at column conflates admin edits (which don't signal engagement) with recipient activity, making it useless for deliverability decisions. Many ESPs now enforce inactivity-based suppression at their end — without local engagement timestamps, your system cannot anticipate or mirror those suppressions.
Severity rationale
High because contacts without engagement timestamps cannot be triaged for stale-list cleanup, causing disengaged addresses to accumulate on the active send list and silently drag down open rates and sender reputation.
Remediation
Add a dedicated engagement timestamp column separate from the system updated_at:
ALTER TABLE contacts
ADD COLUMN last_engaged_at TIMESTAMPTZ,
ADD COLUMN engagement_score INTEGER NOT NULL DEFAULT 0;
Write to last_engaged_at only from ESP webhook events (opens, clicks), not from admin UI actions:
// In your ESP webhook handler:
if (['open', 'click'].includes(event.event_type)) {
await db.contact.updateMany({
where: { email: event.email.toLowerCase().trim() },
data: { last_engaged_at: new Date(event.timestamp) }
})
}
Keep updated_at for record-level change tracking and last_engaged_at for deliverability decisions — the two serve different purposes and must not be merged into one column.
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 Data Quality & List Hygiene Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- iso-25010:2011 · functional-correctness — Functional Correctness (functional suitability)
Taxons
History
- 2026-04-18·v1.0.0·Initial import from data-quality-list-hygiene·automated