Transactional vs marketing email: how a SaaS team should split the stack
By Mara Levin · Updated October 7, 2026
The short answer
A transactional email finishes or protects something the user already did: a receipt, a password reset, a security alert, a change to their account. A marketing email asks for attention the user has not requested: a newsletter, a launch announcement, an upgrade nudge. The trigger does not decide it; the message's primary purpose does, and that is also the FTC's test. Practically, give the two kinds their own sender subdomain, their own stream or account, and their own unsubscribe rules, so that a newsletter complaint cannot delay a login code. This is not legal advice; the legal points below quote the FTC and Google pages they come from.
Sort your messages with the FTC's own test
The FTC's CAN-SPAM compliance guide defines the line for US senders. A message is transactional or relationship only if it consists solely of content that does one of five things: facilitates, completes or confirms a transaction the recipient already agreed to; gives warranty, recall, safety or security information about something they bought; notifies them of a change in the terms, features or standing of an ongoing account, subscription or membership (or provides regular account balance information); gives employment-related information; or delivers goods or services as part of an agreed transaction. The guide adds that the law reads these categories narrowly, and that having a customer relationship does not by itself make a message transactional.
Here is how a typical SaaS inventory lines up against that list. The right-hand column is my reading of the FTC wording, not a legal ruling.
| Message | Closest FTC category | Where I would send it from |
|---|---|---|
| Receipt or invoice | Confirms an agreed transaction | Transactional stream |
| Verification or reset link | Facilitates an agreed relationship; security-related | Transactional stream |
| Failed-payment notice | Change in standing of an ongoing account | Transactional stream, with no upsell block |
| Terms or pricing change notice | Change in terms of an ongoing account | Transactional stream |
| Trial ends tomorrow | Standing change if it only states the date; mixed if it pitches a plan | Lifecycle stream; keep the date first |
| Welcome and onboarding tips | None once it teaches or promotes | Lifecycle stream |
| Feature announcement | None | Marketing stream |
| Newsletter, re-engagement | None | Marketing stream |
The mixed message problem
Trouble starts with receipts that carry a banner and onboarding emails that open with an invoice-style header. The FTC's rule for mixed content is concrete: if a recipient reading the subject line would likely conclude the email advertises something, or if the transactional content does not appear mainly at the beginning, the primary purpose is commercial. Its own example makes the point that a subject like "Your Account Statement" does not rescue a message whose first screen is a promotion. So put the transactional facts first, keep the pitch short and last, and do not let the subject line sell. When the promotion is large enough that you would defend it as the main point, make it a separate marketing message instead.
What the law and Gmail ask of marketing mail
For messages that are commercial, the same FTC guide lists the obligations: no deceptive headers or subject lines, a valid physical postal address, a clear and conspicuous explanation of how to opt out, an opt-out mechanism that keeps working for at least 30 days after sending, and honouring an opt-out request within 10 business days. It also says an opt-out menu may offer choices but must include the option to stop all marketing messages.
Google adds delivery rules that are independent of the law. Its email sender guidelines say that senders above 5,000 messages a day to Gmail accounts must authenticate with SPF, DKIM and DMARC, keep the spam rate shown in Postmaster Tools under 0.30%, and support one-click unsubscribe, with a visible link in the body, for marketing and subscribed messages. The page shows the mechanism: the List-Unsubscribe header carrying a URL plus List-Unsubscribe-Post: List-Unsubscribe=One-Click. A reset email does not need it, a newsletter does, and a single tool that blurs the two will either bother your resets or under-serve your newsletter. The deliverability guide goes deeper on authentication.
Why a technical split matters
Mailbox providers score a sender by how recipients react. Resets get opened and almost never reported; campaigns get ignored, deleted and sometimes reported. If both leave from one domain and one IP pool, the campaign's behaviour becomes the reset's reputation. Postmark's message streams page describes the approach built in: one-to-one transactional sends and one-to-many broadcasts are separated so each is judged on its own. The same effect is available anywhere with three habits: a subdomain per stream with its own DNS records, separate API keys or accounts, and bounce and complaint events flowing back to your database from both.
Thirteen tools and the job each one does
Prices below are from each vendor's pricing page as checked on October 7, 2026, in US dollars. A message price and a contact price are different meters, so do not line them up in one column.
| Tool | Job it fits | What its pricing page lists |
|---|---|---|
| Resend | Application email from code | Free: 3,000 emails a month, 100 a day; Pro $20 for 50,000; Scale $90 for 100,000; $0.90 per extra 1,000 |
| Postmark | Transactional with separate broadcast streams | Free: 100 emails a month; Basic $15 from 10,000, extra $1.80 per 1,000 |
| Amazon SES | Raw infrastructure inside AWS | $0.16 per 1,000 emails on its Essentials tier |
| SendGrid | API sending plus a separate marketing product | Email API trial: 100 a day for 60 days; Essentials from $19.95; Marketing Campaigns free up to 2,000 contacts and 6,000 emails a month |
| Mailgun | API sending with delivery events | Free: 100 a day; Basic $15 for 10,000; Foundation $35 for 50,000 |
| Brevo | Campaigns and transactional in one workspace | Free: 300 sends a day; Starter from $9, Standard from $18, both starting at 5,000 emails a month |
| MailerLite | Newsletters, forms, simple automations | Free: 250 subscribers and 2,500 emails a month; Comfort from $12, Power from $25 at the 500-subscriber tier |
| Mailchimp | Campaign builder and audiences | Free: 250 contacts, 500 sends a month; Standard from $20 at 500 contacts |
| ActiveCampaign | Marketing automation tied to CRM | Starter from $15 at 1,000 contacts, billed annually |
| Customer.io | Event-driven lifecycle journeys | Essentials from $100 a month billed monthly; $145 at 10,000 profiles |
| Klaviyo | Commerce data and segmentation | Priced by profiles; see the vendor page |
| Loops | Product-led SaaS lifecycle and one-off sends | Free: up to 4,000 sends in a rolling 30 days; $99 a month shown at 9,998 subscribers, transactional sends included on paid plans |
| Userlist | B2B SaaS messaging by company and user | Basic $149 a month at up to 10,000 users, $10 per extra 1,000 users |
What the split costs at three volumes
Take only the transactional side, since that is the part you must never let fail. Resend's Pro at $20 includes 50,000, so 10,000 and 50,000 both cost $20, and the slider on Resend's pricing page moves Pro to $35 for 100,000 and Scale to $160 for 200,000. I did not read a 125,000 stop on that slider, so check it there rather than adding the $0.90 per 1,000 overage rate to a plan price. Postmark's slider shows Basic at $15 at 10,000 emails, $55 at 50,000 and $115 at 125,000. Amazon SES at $0.16 per 1,000 comes to 10 × $0.16 = $1.60, 50 × $0.16 = $8.00 and 125 × $0.16 = $20.00 for the same three volumes, before the AWS-side work of templates, suppression and event handling. Mailgun's Basic is $15 for 10,000 and Foundation $35 for 50,000.
Now add the marketing meter. Loops lists $99 a month at 9,998 subscribers; Userlist lists $149 at up to 10,000 users; Customer.io lists $145 at 10,000 profiles. A SaaS with 10,000 users and a 50,000-message transactional load therefore pays roughly $20 for the API plus $99 to $149 for the lifecycle tool, and the integration time between the two is the hidden line. Two cheaper routes exist when the marketing list is small: Brevo's Starter from $9, or Loops' free tier while you stay within 4,000 sends in a rolling 30 days.
Shortlist by operating model
| You are | Start with | Why |
|---|---|---|
| A two-person SaaS, under 5,000 users | Resend or Postmark for resets and receipts, Loops free tier for lifecycle | Two small meters, one clear owner per message type |
| AWS-native, strong ops | Amazon SES plus a lifecycle tool | Cheapest per message, but you build the surrounding product |
| B2B product with accounts and roles | Userlist or Customer.io | Messaging keyed by company, not just by person |
| Newsletter-first content team | MailerLite, Mailchimp or Brevo | Editors, forms and list tools matter more than an API |
| Wants a single vendor | Brevo, SendGrid or Mailgun | Both sending kinds available; check how each separates reporting |
How to split an existing setup in a week
- List every template your product sends and tag each as transactional, lifecycle or marketing using the table above. Note the mixed ones separately.
- Create two subdomains, for example one for system mail and one for campaigns, and add SPF, DKIM and DMARC for each in your provider's dashboard.
- Move transactional mail first: change the sending key and from-address for resets and receipts, and watch bounces for a few days before touching anything else.
- Move campaigns second, add the unsubscribe header and visible link, and start with a segment of recently engaged recipients rather than the whole list.
- Wire both event streams into the same suppression logic, so a complaint on a campaign also silences marketing sends from the other tool.
- Write the runbook: who owns which stream, which DNS records belong to which subdomain, and how to pause one stream without touching the other.
For event-triggered lifecycle mail from Stripe, see the Stripe email integration article. Head-to-head cost and feature pages: Resend vs Postmark, Loops vs Resend, Customer.io vs Loops and SendGrid vs Mailgun. The transactional email page and the tool selection guide cover the buying decision itself.
FAQ
Is a welcome email transactional or marketing?
It depends on what is in it. The FTC says a message that mixes both kinds of content is judged by its primary purpose, and that the transactional part must appear mainly at the beginning. A welcome email that confirms the account and nothing else sits at the transactional end; one that adds a feature tour, a discount or an upgrade pitch drifts towards commercial. If you cannot decide, send two messages.
Does a transactional email need an unsubscribe link?
The FTC guide says an email whose primary purpose is transactional or relationship may not contain false or misleading routing information but is otherwise exempt from most CAN-SPAM provisions, and password resets and receipts rarely carry one. Google is separate from the law: its sender rules ask for one-click unsubscribe on marketing and subscribed messages from senders above 5,000 messages a day to Gmail. Decide per message, and ask counsel about anything borderline.
Can I send marketing and transactional email from the same domain?
You can, but a complaint spike from a newsletter then lands on the same domain reputation as your password resets. A separate subdomain per stream, each with its own SPF and DKIM records, keeps the two apart. Providers such as Postmark go further and split the two kinds into separate streams inside one account.
Which one tool covers both?
Brevo, SendGrid and Mailgun sell both kinds of sending and Postmark separates them into streams, but each prices them differently, so compare bills rather than feature lists. Teams with billing-triggered or product-triggered journeys often add Loops, Customer.io or Userlist for lifecycle mail and keep a transactional API for resets and receipts.