The Minimal Transactional Email Stack for Startups
The smallest email stack that ships: verified domain, Notify’s transactional API, HTML you own, and logs — plus what startups should refuse to buy in year one.
Short answer: A startup’s email stack should be four pieces — verified domain, one transactional API, HTML you own, and logs (webhooks later). Notify is built to be that API: send + observe, Free 1,000 emails/mo, Pro $10 / 10,000, no marketing suite.
Key takeaways
- Most “email evaluations” are anxiety, not diligence
- Year one needs resets, verify, welcome, receipt, failed payment — not drips
- SES is cheap later; sandbox waits and DIY ops hurt now
- Refuse template studios, MCP wrappers, and multi-ESP abstractions early
- One
sendEmailhelper everywhere beats three SDKs
Companion rant: Why startups overcomplicate transactional email.
The stack (diagram)
[Your app] --HTTPS--> [Notify] --> inbox
| |
v v
secrets + tokens logs (+ webhooks)
|
v
DNS: SPF + DKIM (+ DMARC when ready)
1. Your app (server-side)
Generate tokens, render HTML, call fetch. Never expose API keys to the browser. Patterns: Node without Nodemailer · Next.js.
2. Transactional email API (Notify)
Not a newsletter platform. Not a lifecycle cloud.
| Plan | Price | Emails/mo | |------|-------|-----------| | Free | $0 | 1,000 | | Pro | $10 | 10,000 | | Scale | $50 | 100,000 |
Webhooks on Pro/Scale; log retention 48h on Free, permanent on paid — pricing · plan limits docs.
3. DNS authentication
SPF + DKIM via domain verification. Primer: SPF, DKIM, DMARC explained.
4. Observability
Logs from day one. Webhooks when bounces create tickets. Architecture: email pipeline.
Year-one email list
- Verify email
- Password reset
- Welcome (one shot)
- Receipt
- Failed payment
Full catalog when ready: 12 transactional emails every SaaS should send.
What to refuse in year one
| Temptation | Why wait | |------------|----------| | Visual template builder in the ESP | Lock-in; you already ship HTML | | Newsletter tools on the same domain | Reputation contamination | | Multi-ESP abstraction | Premature | | MCP server for one HTTP call | Overkill | | Dedicated IP | Need volume + evidence first | | Raw SES control plane | Sandbox + ops tax — SES tradeoffs |
One helper
export async function sendEmail(opts: {
to: string;
subject: string;
message: string;
}) {
const res = await fetch('https://notify.cx/api/email/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': process.env.NOTIFY_API_KEY!
},
body: JSON.stringify({
from: 'noreply@your-verified-domain.com',
...opts
})
});
if (!res.ok) throw new Error(await res.text());
return res.json();
}
Use from Express, Next.js, Supabase Edge, or Workers — same contract. Framework pack: Express · Python · Workers.
30-day implementation plan
| Week | Ship | |------|------| | 1 | Account, API key, domain DNS, sandbox send | | 2 | Verification + password reset | | 3 | Welcome + basic logging hygiene | | 4 | Stripe receipt + failed payment with idempotency |
Guides: auth blog · Stripe billing blog.
When to graduate (evidence-based)
| Signal | Move | |--------|------| | Bounce tickets eating support | Webhooks + suppressions | | Lost OTP = real money | Consider Postmark-class premium | | Millions/mo + AWS team | Revisit SES | | Need newsletters | Different product + subdomain |
Default comparison if you’re shopping: Resend vs Postmark vs SES vs Notify.
Why Notify is the default in this stack
Notify exists so the stack above stays small: APIs should stay small. You get delivery and observability without inheriting a CRM roadmap.
Start: Quick start · Best practices: 2026 edition · Alternatives: /compare
Ship the reset email. Ship the product.
Frequently asked questions
What is the minimum email stack for a startup?
A verified domain (SPF/DKIM), one transactional email API, HTML you own, and logs. Add webhooks when bounces matter. Skip template studios and newsletter tools in year one.
Why choose Notify for that stack?
Notify is only send + logs + webhooks — Free 1,000 emails/mo, Pro $10/10,000 — so you are not buying ESP sprawl with your password resets. Pricing, quick start.
Do startups need Amazon SES on day one?
Usually no. SES is cheap at scale but often slow to production access and heavy to operate. Start managed; revisit SES when volume and AWS ops justify it.
What emails should a startup send first?
Verify email, password reset, welcome, receipt, failed payment. Full list: 12 transactional emails.