By Theo Brandt ยท Updated
Onboarding guideSaaS Onboarding Emails: Sequence, Timing and Tools
Send fewer, better-timed messages that stop the moment a new user has done what each one asked.
A SaaS onboarding sequence is a short set of emails triggered by what a new account does in your product, written to move that person to the single action that makes the product worth keeping. The sequence ends the moment they get there. Build it in a tool that can receive product events, wait for them and exit on them: Customer.io for event branching, Loops for a small team that wants the shortest path, and Userlist when accounts have several users.
Prices checked 7 October 2026; each price links to the vendor page it came from. The sequence below is an example we wrote for a made-up product, not a measured result from any company.
Decide what activation means before you write a word
Every onboarding email exists to cause one event. Name that event first, in a sentence your whole team agrees with. For an invoicing app it might be "sent a first invoice". For a team chat product, "invited a second person who then posted". For an API product, "made a first successful request from production keys". Pick it by looking at your own accounts: which early action do customers who stay almost always take, and the ones who leave almost never take? Nobody else's benchmark answers that, so ignore any quoted lift from a generic guide.
Then list the two or three steps that lead to it. Those steps become your messages. A step that users complete unaided in the first hour does not need an email, and a step that most people stall on deserves two: one nudge and one offer of help.
A worked sequence for an invoicing app
The product is a hypothetical invoicing app for freelancers. Activation is the first invoice sent, and getting paid is the second goal. Events sent from the app: account_created, email_verified, client_added, invoice_sent, payout_connected.
| # | Starts when | What the message does | Skip or stop if |
|---|---|---|---|
| 1 | email_verified, within minutes | Welcome; one button, "Add your first client" | client_added already exists |
| 2 | 4 hours after email 1 | Shows how to turn a client into a first invoice in two clicks | invoice_sent exists |
| 3 | Next morning, 9:00 local, only if client_added but no invoice_sent | Short note offering a template invoice and an answer to "what do I put on it?" | invoice_sent exists or a support ticket is open |
| 4 | 1 day after invoice_sent, if no payout_connected | Explains how the customer pays and how funds reach the bank account | payout_connected exists |
| 5 | Day 6, only if invoice_sent happened | One feature that builds the habit: recurring invoices | Already created one |
| 6 | Day 10, only if still no invoice_sent | Plain-text note from a named person asking what is in the way; replies reach a real inbox | Any activation event, upgrade or unsubscribe |
Three things make this work. Every message has a stop condition tied to a product event, so nobody receives a lesson on something they have already done. Waits are measured from the previous event, not from signup, so a fast user moves quickly and a slow one is not rushed. And the last message is deliberately not marketing: it asks a question and routes replies to a person.
The welcome email, in detail
Send it right after the address is verified, not at the instant of signup. If you send before verification, you may be mailing a typo address and hurting your sender reputation for the real onboarding mail that follows. Keep verification and welcome as two separate messages with different jobs.
Use one link and one verb. Give the sender a human name and a reply-to address that is monitored. Skip the long feature tour; say what the first task is, how long it takes, and where to get help. Plain text or a lightly styled message tends to read as personal, which suits a mail that asks someone to do something.
Decide which tool sends it. Account verification and password resets belong on a transactional path such as Postmark (Basic is $15 a month at 10,000 emails) or Resend (free at 3,000 emails a month). The welcome and everything after it can sit in your lifecycle tool. Our transactional versus marketing guide explains where that line falls.
Timing and branching rules that save you from embarrassing sends
- Wait for events, then wait for time. A step reads "wait up to 4 hours for client_added, then continue", not "send on day 2".
- Check state at send time. The audience filter should be evaluated when the message is about to go out, not when the user entered the workflow.
- Quiet hours. Hold a message that would land overnight in the user's timezone until the next morning, and store the timezone from the app.
- Frequency cap. At most one onboarding email a day, and none while a human conversation is open in your support tool.
- Plan split. A user who started a paid plan or a sales-assisted trial leaves the self-serve stream and enters one that matches what they bought.
For products with teams, the person who signs up is often not the person who needs to learn each feature. Split a branch by role: the admin gets the setup path, invited users get a short orientation. Userlist is built around users and companies, which makes this natural; in Customer.io or Loops you copy a role attribute onto each contact and branch on it.
Build it in six steps
- List the events your app can already emit. If activation has no event, add it before anything else.
- Send identify calls with the user's id, email, plan, role and timezone as soon as the account exists, and update them when they change.
- Create the workflow trigger on email_verified or the equivalent, and add each message with its wait and exit rules.
- Set the global exit: activation event, paid upgrade, unsubscribe, account deleted.
- Run three test accounts through it: one that does everything quickly, one that stalls halfway, one that never returns. Read what each is sent.
- Launch to all new signups, then review the exits weekly: where do people stop, and which message precedes the stall?
What the tools cost for onboarding volumes
Onboarding mail is low volume per person: six messages to 2,000 new signups is 12,000 emails. What changes the bill is how each vendor counts your audience, as the table shows.
| Tool | How it prices | Published readouts |
|---|---|---|
| Customer.io Essentials | By profiles | $100 a month at 5,000 profiles, $145 at 10,000 |
| Loops | By subscribers; free tier capped | Free up to the 1,000 newest contacts and 4,000 sends per 30 days; $99 at 10,000, $249 at 50,000 |
| Userlist Basic | By users | $149 a month up to 10,000 users, then $10 per extra 1,000 |
| Encharge Growth | By subscribers | $99 a month at 2,000, $179 at 5,000, $249 at 10,000 |
| Resend Marketing | By contacts | Free at 1,000 contacts; Pro $40 at 5,000, $80 at 10,000 |
If you expect around 2,000 signups a month and want event branching, Encharge at $99 and Customer.io at $100 for its 5,000-profile step sit close together, so choose on the workflow editor and how you send events. Loops is the cheaper way to start: you can build and test the whole sequence on its free plan before choosing a paid step. Userlist costs more at the start but earns it when several people per account need different messages. Compare more of these in Customer.io vs Loops and Userlist vs Loops.
Measuring onboarding without trusting opens
Track three things from your product data, not your email dashboard: the share of new signups who reach activation within a fixed window, the time it takes them, and the step where each cohort stalls. Compare the cohort before you launched the sequence with the cohorts after. Unsubscribes and replies are useful signals too; a reply to the day-10 note often tells you more than a chart.
Treat opens as a rough delivery check. Apple's Mail Privacy Protection downloads remote content in the background when a message arrives rather than when it is read, so a pixel can fire for someone who never saw the email. Click-through to a product action, followed by the event itself, is the signal to trust. The SaaS email metrics guide covers the rest of the measurement setup.
Mistakes that show up again and again
- The "day 3" email arrives for someone who activated on day 1, because the audience was evaluated at signup rather than at send time.
- Identify calls fire twice, so users enter the workflow twice and get two welcomes.
- The sequence keeps running after the user upgrades, and a trial-ending reminder reaches a paying customer.
- The sender is no-reply, so the person who replied "I'm stuck" never gets an answer.
- Every message ends with three buttons, and nobody can tell which action matters.
Verdict
Pick Customer.io when your engineers can send events and you want exits, waits and branches without writing glue code. Pick Loops when you are a small team and need a working sequence this week. Pick Userlist for B2B products where the account matters as much as the person. Whatever you choose, write the activation event first, give every message a stop condition, and finish with a message from a person. Related reading: trial conversion emails, lifecycle email for SaaS, the best platforms for SaaS onboarding and for B2B onboarding.
Frequently asked questions
How many emails should a SaaS onboarding sequence have?
Let the product decide, not a number. Write one email per step a new user must complete to reach activation, plus one stuck-user message and one plain-text check-in from a real person. For a simple product that is four to six messages; a product with a long setup may need more, but each one should be skipped when the user has already done the step.
Should the welcome email come from the same tool as password resets?
Not necessarily. Verification and reset mail is transactional and should go through a path built for it, such as Postmark or Resend. The welcome email starts the lifecycle sequence, so it is normally sent by the tool that holds your triggers, such as Customer.io, Loops or Userlist, as long as it only goes out once the account exists.
How do I measure whether onboarding emails work?
Measure activation in the product: the share of new signups who complete the activation event within a window you define, and how long it takes. Compare cohorts before and after you launch the sequence. Open rates are weak evidence, because Apple's Mail Privacy Protection downloads remote content in the background rather than when a message is read.
What if a user activates before the first email even arrives?
Add a check at the start of every message: skip it if the event it is meant to cause has already happened. In Customer.io you can set exit conditions on the event, Loops can branch on a contact property you update from your app, and Userlist workflows can wait for a user or company event before continuing.