How to Build a Customer Onboarding Email Sequence
Create an automated email sequence for new customer onboarding.
What This Integration Does
A good onboarding sequence is the difference between activated customers and silent churners. It walks new signups through your product in the first two weeks, surfaces features they haven't tried yet, and gives them a clear "next step" at every stage. This workflow sends a multi-touch email series triggered by signup, with time-based follow-ups and behaviour-aware skips so you don't email users about a feature they've already used.
The workflow is triggered once per new customer via webhook from your app or e-commerce platform. It sends an immediate welcome via resend, then schedules follow-up subworkflows that fire on day 3, day 7, and day 14. Each follow-up checks the customer's current state before sending, so a customer who has already completed the relevant action gets skipped or re-routed. State left behind: scheduled subworkflow runs and a row per customer in your onboarding tracking table.
Prerequisites
- A Resend connection with your sending domain verified.
- An onboarding email template per touch (welcome, day 3, day 7, day 14). HTML or markdown both work.
- A webhook from your app that fires on signup, carrying
customerId,email,firstName, andsignupAt. - (Optional) a mongodb or similar store to track which emails have been sent and current customer state.
Step 1: Webhook Trigger on New Customer
Drop a Trigger node onto the canvas and set its type to Webhook. Configure your app or e-commerce platform to POST signup events here. The payload should include enough context to personalize the first email: name, plan or product, signup timestamp.
Step 2: Send the Welcome Email Immediately
Add a Connector node pointing at the resend connector and pick the send-email tool. Configure:
from:onboarding@yourcompany.comto:{{ trigger.email }}subject:Welcome to ACME, {{ trigger.firstName }}!html: your welcome template with handlebars for personalization
Log the send to your tracking store (mongodb insert-documents) with customerId, touch: "welcome", and sentAt.
Step 3: Schedule the Day 3 Follow-Up
Add a Subworkflow node that invokes a child workflow on a delay. The child workflow has its own Trigger set to Schedule with a 3-day offset from {{ trigger.signupAt }}. Inside the child, first call mongodb find-documents to check the customer's current activation state, then send the day-3 email via resend send-email only if they haven't already completed the relevant milestone.
Step 4: Repeat for Day 7 and Day 14
Add two more Subworkflow invocations for the day-7 and day-14 touches. Each child workflow follows the same pattern: check state, decide whether to send, send via resend send-email, log to the tracking store. Tailor each email to the milestone you expect at that point - day 7 should reference what the customer should have done by now, day 14 should offer a 1:1 call or a feature deep-dive.
Step 5: Personalize with Customer State
Inside each follow-up subworkflow, add a Transform node before the email send. Pull the customer's current usage from your app's API or your tracking store and compute personalization variables: workflowsCreated, connectorsUsed, lastLoginAt. Reference them in the email body as {{ stats.workflowsCreated }}. Generic emails feel like marketing - personalized ones feel like an account manager wrote them.
Step 6: Suppression and Unsubscribes
At the top of every subworkflow, add a Condition node that checks the customer's unsubscribe state in your tracking store. If they've unsubscribed from onboarding emails, route to a no-op end node. resend's click events can feed back into your store so unsubscribes are honoured across the whole sequence.
Tips
- Keep touches short. Each email should have one call to action.
- Personalize the subject line, not just the body. Open rates roughly double when the subject references something specific to the customer.
- Track per-touch open and click rates. If day-7 underperforms, rewrite that email rather than the whole sequence.
Common Pitfalls
- Sending the next touch even after the customer has completed the goal. Always check state first.
- Timezones - schedule emails for late morning in the customer's local timezone, not yours. Use the
dateconnector'stimezonetool to compute the right send time. - Hard bounces. If a send returns a hard bounce from Resend, suppress further touches for that address.
Testing
Sign up a test account with your own email. Manually trigger the workflow and confirm the welcome lands in seconds. Then fast-forward each subworkflow's schedule (or run it manually) and inspect each follow-up. Walk through both branches: a customer who completed the milestone (should skip) and one who didn't (should send).