Use this file to discover all available pages before exploring further.
Datamailer keeps a strict separation between global contact identity and per-audience subscription state. A single email address is represented by exactly one Contact row, but that contact can carry independent subscription preferences for every audience and client that uses Datamailer. This means DataTalksClub and AI Shipping Labs can share the same underlying contact database while keeping their mailing lists and engagement history completely separate.
One Contact row per email address across the entire system. Subscription state is scoped to (contact, audience, client), so the same person can be subscribed to the newsletter and unsubscribed from courses independently.
Append-Only Event Log
EmailEvent rows are never updated or deleted. Every open, click, bounce, complaint, and unsubscribe is a new row. This makes the contact timeline auditable and supports future partitioning or S3 archival as volume grows.
Recipient Snapshots
When a campaign is sent, one CampaignRecipient row is created for every intended contact — including those who will be skipped. A 120k-recipient campaign produces 120k rows, giving full auditability for every send/no-send decision.