Everything it does.
Nothing it doesn’t.

Selva Mail runs in your AWS account and sends through your own Amazon SES — Amazon’s IPs, Amazon’s reputation. You never run a mail server. One command deploys everything, migrations included, and it scales to zero when idle.

Every claim on this page is checked against the code before it ships. Beta features are labeled. Features we haven’t built aren’t listed.

A real visual email editor.

The thing tools you run yourself never have — and the reason a developer ends up in the loop for every campaign. Not here.

Visual editor with live preview

WYSIWYG editing with autosave. Account managers build and send campaigns without a developer in the loop.

{{variables}} with dot-paths and fallbacks

{{name|there}} renders the fallback when the field is empty, and the editor autocompletes variables as you type.

Layout templates with slots

Shared layouts with content slots, so every campaign starts from the same frame instead of a blank page.

Brand theme cascade

Workspace theme flows into layouts, layouts into templates. Change the brand once and every email inherits it.

Renders correctly across clients

The output is table-based, inline-styled HTML with Outlook conditionals — built to survive real email clients, not just the preview pane.

Preview and test-send against a real contact

See the email with actual contact data and test-send it before anything goes to a list, with warnings when something looks off.

Media library

Images live in an S3 bucket in your AWS account, ready to drop into any email.

In beta beta

Dark-mode email preview and a source-code toggle in the editor — labeled in the app until they graduate.

12 triggers. 17 step types.

Not a checkbox — a visual flow engine. Here is the actual list, because the list is the point.

Triggers
Contact createdTag addedTag removedList joinedList leftField changedEmail openedEmail clickedForm submittedAPI triggerDouble opt-inGrade changed
Step types
Send emailWait / delayWait for eventConditionAdd tagRemove tagAdd to listRemove from listUpdate fieldWebhookGoalExitGo to stepGrade checkPercent splitMulti-way splitNotify team
Visual canvas with per-node analytics

Every step on the canvas shows its own completed, skipped, failed and waiting counts — you see where a flow leaks.

Prebuilt recipes

Welcome series, re-engagement and more, ready to adapt instead of building from an empty canvas.

Percent splits and multi-way splits

Split a flow 50/50 — or N ways — inside an automation and compare how each path performs.

Conditions, goals and exits

Multi-clause AND/OR conditions, goal steps, and exit conditions that pull a contact out when the job is done.

Re-entry control and loop guards

Choose block, concurrent or restart when a contact qualifies twice. Loop guards stop runaway flows.

Call your endpoints

A webhook step can POST the contact to any URL you choose, per contact, with SSRF guarding built in.

Event-native, with a safety net

Flows run on EventBridge with a one-minute safety tick, and an outcome log answers “why didn’t it fire?”

Send to people who read you.

Contacts, imports, broadcasts and grading — built so the list you grow stays a list worth mailing.

Contacts with typed custom fields

String, number, date and boolean fields — validated on write — plus tags.

CSV import that holds your hand

Upload, map columns, preview, then batch processing. No format guessing.

A–F engagement grading

Every contact graded on real engagement, with per-workspace thresholds and triggers that fire when a grade changes. Grade contacts to send smarter — not to shrink an invoice.

Grade-gated delivery

Audience filtering and grade-gated targeting let a broadcast skip disengaged addresses, which protects your domain reputation too.

Broadcasts without foot-guns

Multi-list targeting with de-duplication, scheduling, duplicate, cancel, and test-send.

Per-campaign stats with drill-down

Sent, delivered, opened, clicked, bounced, complained, unsubscribed — and the contacts behind each number.

Double opt-in with confirmation emails

Per-list confirmation template with an expiring token, sent automatically on every join path.

One-click unsubscribe (RFC 8058)

The header inboxes expect, with a per-list or global choice for the reader.

Signup forms that filter bots

Honeypot plus Cloudflare Turnstile, allowed origins, and post-signup redirects.

Public newsletter archive + RSS

Every newsletter can have a public archive page and its own RSS feed.

One API for your app.

Receipts, resets and notifications on the same pipeline, the same domains and the same event log as your campaigns. Queued in milliseconds, delivered by SES.

curl https://mail.yourdomain.com/api/v1/emails \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "to": "ana@example.com",
    "template": "receipt",
    "variables": { "order.id": "1042" }
  }'
REST send API

to, cc and bcc, HTML and text bodies, or a template slug plus variables.

API keys done properly

SHA-256 hashed at rest, admin and read-only roles, revocable, with optional expiry.

Suppression checked before every send

A bounced or complained address never gets another email, on any pipeline.

Verified-domain enforcement

The from address must belong to a domain you have verified. The API refuses anything else.

A queue that survives bad days

SQS FIFO, three retries into a dead-letter queue, an idempotent re-delivery guard, and a reconciler that rescues stuck emails.

Full REST for your data

Contacts, lists, tags, broadcasts and templates — including bulk contact upsert up to 1,000 per request.

An email log you can trust

Full event timeline per message, with a sandboxed HTML preview of exactly what was sent.

Coming from a sending API? See how it compares to Resend, SendGrid or Postmark.

Amazon’s IPs. Your DNS, checked.

Sending through your own SES account means you inherit Amazon’s sending infrastructure — Selva Mail’s job is to keep your side of it honest.

Domain wizard with live DNS status

DKIM CNAMEs, DMARC and SPF records generated for you, each with its own live DNS check.

SPF validation that catches real mistakes

It flags an SPF record that exists but does not authorize SES — the error everyone makes.

DMARC aggregate report ingestion

Reports are parsed and surfaced in the dashboard, a feature almost nothing you can run yourself ships.

Domain health sync

Detects SES DKIM revocations and alerts your admins before your recipients notice.

Bounce and complaint auto-suppression

Wired the way AWS wants to see before granting production access.

Open and click tracking

Delivery, bounce, open and click events land in your log as SES reports them.

New to SES? Read the guide to getting SES production access.

// For agencies

One install. Every client.

Unlimited client workspaces and domains

There is no cap anywhere in the code — not on workspaces, domains, senders, keys or contacts.

Each client fully separated

Their domains, their verified senders, their API keys, their admin and user roles.

Client-branded sending

Per-workspace brand themes inherited by every email template. Campaigns go out as the client, not as you.

Per-client tuning

Engagement thresholds and timezone set per workspace, because clients differ.

The first 100 licenses carry agency rights permanently. Read the agency page →

Your list can grow. Your bill doesn’t.

SES bills per email sent, not per contact stored. The rest is 100% serverless — five Lambdas, no always-on compute — so idle cost is ≈$0: your CockroachDB database is the only always-on line.

≈$6/mo
at 50,000 emails/month
≈$60/mo
at 500,000 emails/month

AWS estimates, excluding the database. Put your own volume into the cost calculator.

Source included

You get the repository. Read it, audit it, extend it — it runs in your account, after all.

Four secrets, one command

Set four secrets and run one deploy. Database migrations run inside it — there is no separate migration step to forget.

Stop paying for the same contacts
every month.

$497 once. Runs on your infrastructure, sends through your own AWS SES account. Launch buyers get agency rights permanently — unlimited client workspaces. First 100 licenses.

or email us directly — hi@selva.run