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 invoiceConfirms an agreed transactionTransactional stream
Verification or reset linkFacilitates an agreed relationship; security-relatedTransactional stream
Failed-payment noticeChange in standing of an ongoing accountTransactional stream, with no upsell block
Terms or pricing change noticeChange in terms of an ongoing accountTransactional stream
Trial ends tomorrowStanding change if it only states the date; mixed if it pitches a planLifecycle stream; keep the date first
Welcome and onboarding tipsNone once it teaches or promotesLifecycle stream
Feature announcementNoneMarketing stream
Newsletter, re-engagementNoneMarketing 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
ResendApplication email from codeFree: 3,000 emails a month, 100 a day; Pro $20 for 50,000; Scale $90 for 100,000; $0.90 per extra 1,000
PostmarkTransactional with separate broadcast streamsFree: 100 emails a month; Basic $15 from 10,000, extra $1.80 per 1,000
Amazon SESRaw infrastructure inside AWS$0.16 per 1,000 emails on its Essentials tier
SendGridAPI sending plus a separate marketing productEmail 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
MailgunAPI sending with delivery eventsFree: 100 a day; Basic $15 for 10,000; Foundation $35 for 50,000
BrevoCampaigns and transactional in one workspaceFree: 300 sends a day; Starter from $9, Standard from $18, both starting at 5,000 emails a month
MailerLiteNewsletters, forms, simple automationsFree: 250 subscribers and 2,500 emails a month; Comfort from $12, Power from $25 at the 500-subscriber tier
MailchimpCampaign builder and audiencesFree: 250 contacts, 500 sends a month; Standard from $20 at 500 contacts
ActiveCampaignMarketing automation tied to CRMStarter from $15 at 1,000 contacts, billed annually
Customer.ioEvent-driven lifecycle journeysEssentials from $100 a month billed monthly; $145 at 10,000 profiles
KlaviyoCommerce data and segmentationPriced by profiles; see the vendor page
LoopsProduct-led SaaS lifecycle and one-off sendsFree: up to 4,000 sends in a rolling 30 days; $99 a month shown at 9,998 subscribers, transactional sends included on paid plans
UserlistB2B SaaS messaging by company and userBasic $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 usersResend or Postmark for resets and receipts, Loops free tier for lifecycleTwo small meters, one clear owner per message type
AWS-native, strong opsAmazon SES plus a lifecycle toolCheapest per message, but you build the surrounding product
B2B product with accounts and rolesUserlist or Customer.ioMessaging keyed by company, not just by person
Newsletter-first content teamMailerLite, Mailchimp or BrevoEditors, forms and list tools matter more than an API
Wants a single vendorBrevo, SendGrid or MailgunBoth sending kinds available; check how each separates reporting

How to split an existing setup in a week

  1. List every template your product sends and tag each as transactional, lifecycle or marketing using the table above. Note the mixed ones separately.
  2. 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.
  3. 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.
  4. Move campaigns second, add the unsubscribe header and visible link, and start with a segment of recently engaged recipients rather than the whole list.
  5. Wire both event streams into the same suppression logic, so a complaint on a campaign also silences marketing sends from the other tool.
  6. 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.