Datamailer is a standalone, self-hosted mailing service built on Django. It gives you a single place to manage contacts, audiences, campaigns, and transactional email across multiple client applications — without paying per-contact fees to a third-party ESP. Instead of Mailchimp or similar platforms, Datamailer stores contacts in Postgres, queues sends through SQS, and delivers via Amazon SES, giving you full control over your data, your infrastructure, and your sending costs.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/DataTalksClub/datamailer/llms.txt
Use this file to discover all available pages before exploring further.
Key Features
Shared Audience Management
Contacts are global with per-audience, per-client subscriptions. One contact can be subscribed to multiple audiences across multiple client applications, each with independent subscription state, tags, and history.
Campaign Sends
Create and schedule campaigns targeting tagged audiences. Datamailer records one recipient row per intended contact and tracks delivery, opens, clicks, unsubscribes, bounces, and complaints.
Transactional Email API
Client apps send registration confirmations, email verifications, and password resets through a simple Bearer-authenticated REST API. Idempotency keys prevent duplicate sends.
Engagement Tracking
Open tracking, click tracking, unsubscribe handling, bounce processing, and complaint handling are all built in. SES events flow back through SQS webhooks and update contact state automatically.
Multi-Client Support
Multiple client applications share a single Datamailer deployment. Each client authenticates with its own scoped API key, and all API access is isolated to that client’s organisation and audience.
Operator UI & Admin
A Django staff UI covers audience management, campaign authoring, contact inspection, transactional template management, and client/API key administration — no separate dashboard required.
Architecture Overview
Datamailer is intentionally built on well-understood, low-operational-overhead components:- Django — handles the product UI, REST API, open/click tracking endpoints, unsubscribe flows, and the Django admin.
- Postgres — the source of truth for contacts, subscriptions, campaign recipient snapshots, transactional messages, and engagement event history.
- SQS — provides durable queues for transactional sends, campaign sends, email events, and inbound SES webhook payloads.
- Lambda — workers consume SQS queues for bursty campaign sending, transactional sending, and webhook/event processing.
- Amazon SES — handles final delivery plus bounce, complaint, open, and click events where provider-side tracking is available.
DataTalksClub/datamailer-infra repository. This public repository contains the application code, tests, CloudFormation skeletons, and smoke scripts.
For local development, LocalStack can emulate SQS and SES so you can exercise the full send path without an AWS account. The quickstart guide covers running Datamailer with SQLite and the console email backend, which requires no AWS configuration at all.
Who It’s For
Datamailer is designed for teams that operate multiple web applications and want a single, self-controlled email platform instead of separate per-app Mailchimp or similar accounts:- Multi-client SaaS platforms — organisations like DataTalksClub that run a newsletter, course platforms, and partner products, each needing independent audience management and transactional email.
- Newsletter operators — teams sending regular campaigns to segmented audiences who need open/click stats, unsubscribe handling, and bounce suppression without per-contact pricing.
- Platform builders — developers who want a reusable, API-driven email service their client apps can call for transactional flows, with all contact state in one place.