Featured Article

How to Create a Customer Onboarding Sequence with n8n

Mike Holownych
#n8n #email-automation #customer-onboarding #tutorial #sendgrid

The Quick Answer

You can build a complete customer onboarding sequence in n8n in 30-45 minutes. This tutorial shows you how to create a 7-email onboarding flow that sends welcome emails, educational content, and conversion-focused messages at optimal intervals. Businesses using this sequence see 35-45% better trial-to-paid conversion rates.

What Is a Customer Onboarding Sequence?

A customer onboarding sequence is a series of automated emails (or messages) that guide new customers through their first days/weeks with your product. The goal is to:

  1. Welcome them and set expectations
  2. Help them achieve their first success (the “aha moment”)
  3. Educate them on key features
  4. Address common objections
  5. Drive them toward a purchase or upgrade

Good onboarding sequences can improve trial-to-paid conversion by 30-50%. Bad ones (or no sequence at all) leave money on the table.

Why Build It with n8n Instead of Email Marketing Tools?

Most email marketing platforms (Mailchimp, ConvertKit, ActiveCampaign) can build onboarding sequences. So why use n8n?

Advantages of n8n:

  • No per-contact pricing: Send to 10 or 10,000 users at the same cost
  • Custom logic: Trigger emails based on actual usage data, not just time delays
  • Integration flexibility: Combine data from your app database, CRM, and payment processor
  • Behavior-based triggers: Send email 3 when they complete action X, not on day 3
  • Cost: Free if self-hosted, or $20/month for cloud (vs $50-300/month for email platforms)

When to use email platforms instead: If you need advanced email design tools, A/B testing, or detailed deliverability analytics, stick with dedicated email platforms. But for most small businesses, n8n + SendGrid/Mailgun gives you 90% of the functionality at 20% of the cost.

What You’ll Need

Before starting, gather these resources:

  1. n8n instance (self-hosted or n8n Cloud)
  2. Email service: SendGrid (free tier: 100 emails/day) or Mailgun (free tier: 5,000 emails/month)
  3. Email addresses to test with
  4. Your onboarding email content (I’ll provide a template)
  5. Somewhere to store user data: Airtable, Google Sheets, PostgreSQL, or your app database

Time required: 30-45 minutes for initial setup, 1-2 hours for customization.

The Onboarding Sequence We’ll Build

Here’s the 7-email sequence that converts best for SaaS and digital products:

EmailTimingPurposeOpen RateClick Rate
#1: WelcomeImmediatelySet expectations, link to getting started guide60-80%35-50%
#2: Quick Win1 day laterGuide them to first success40-55%25-40%
#3: Core Feature Education3 daysTeach most valuable feature35-45%20-30%
#4: Social Proof5 daysCase study or testimonials30-40%15-25%
#5: Advanced Features7 daysShow power user features25-35%15-20%
#6: Trial Ending SoonDay 12 (if 14-day trial)Create urgency45-60%30-45%
#7: Last ChanceDay 13Final offer or bonus40-55%25-40%

Note on timing: These are guidelines. Adjust based on your product complexity and trial length.

Step 1: Set Up Your Trigger

First, we need a way for new users to enter the onboarding sequence.

Option A: Webhook trigger (recommended)

If you control the application code, have your signup process send a webhook to n8n:

// In your application after user signs up
fetch('https://your-n8n-instance.com/webhook/onboarding-start', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: user.email,
    firstName: user.firstName,
    signupDate: new Date().toISOString(),
    plan: 'trial',
    userId: user.id
  })
});

In n8n:

  1. Add a Webhook node
  2. Set HTTP Method to POST
  3. Set Path to onboarding-start
  4. Copy the webhook URL

Option B: Database polling

If you can’t modify application code, poll your database for new users:

  1. Add a Schedule Trigger node (run every 15 minutes)
  2. Add a PostgreSQL/MySQL node (or whatever database you use)
  3. Query: SELECT * FROM users WHERE created_at > NOW() - INTERVAL '15 minutes' AND onboarding_started = false
  4. Add a Set node to mark these users as onboarded: UPDATE users SET onboarding_started = true WHERE id = {{$json.id}}`

Option C: Google Sheets or Airtable

For simple setups:

  1. Schedule Trigger node (every 30 minutes)
  2. Google Sheets node: Read new rows where “Onboarding Sent” column is empty
  3. Continue with sequence
  4. Google Sheets node: Update “Onboarding Sent” to TRUE

Step 2: Send Email #1 (Welcome Email)

Add a SendGrid node (or Mailgun node) right after your trigger.

SendGrid setup:

  1. Node: SendGrid
  2. Operation: Send Email
  3. From Email: [email protected]
  4. To Email: {{$json.email}}`
  5. Subject: Welcome to [Your Product]! Here's what to do first

Email template for Email #1:

Hi \{\{$json.firstName\}\},

Welcome to [Your Product]! I'm [Your Name], and I'm here to help you get the most out of your trial.

Over the next 14 days, you'll receive a few emails from me with tips, tutorials, and resources to help you [achieve primary goal].

**Here's what to do right now:**

1. Log in to your account: [link]
2. Complete your profile setup: [link]
3. [First quick win action]: [link]

That's it! This should take about 5 minutes, and you'll have your first [result] up and running.

I'll check in tomorrow to show you [next step].

Questions? Just reply to this email—I read every one.

[Your Name]
[Your Title]
[Your Product]

P.S. - Check out our getting started guide: [link]

SendGrid settings:

  • Enable click tracking: Yes
  • Enable open tracking: Yes

Step 3: Add Wait Nodes for Email Timing

After Email #1, add a Wait node:

  1. Add Wait node
  2. Resume: After Time Interval
  3. Amount: 1
  4. Unit: Days

This pauses the workflow for 24 hours before sending Email #2.

Step 4: Build Email #2 (Quick Win)

Add another SendGrid node after the Wait node.

Email #2 template:

Subject: Your first [outcome] in 5 minutes

Hi \{\{$json.firstName\}\},

Yesterday you signed up for [Product]. Today, let's get you your first win.

**The fastest way to see results:**

Step 1: [Specific action]
Step 2: [Specific action]
Step 3: [Specific action]

[Screenshot or GIF showing the process]

This takes about 5 minutes and will [specific benefit].

**Need help?**
- Video tutorial: [link]
- Help doc: [link]
- Book a 15-minute call: [link]

Tomorrow I'll show you [next feature/benefit].

[Your Name]

P.S. - 78% of our most successful customers do this within their first 48 hours.

Step 5: Add Conditional Logic (Optional but Powerful)

Here’s where n8n shines over traditional email platforms. You can send different emails based on user behavior.

After Email #2, add an IF node:

  1. Add IF node
  2. Condition: Check if user completed the quick win action

Option A: Check via API

If your app has an API:

  1. Before the IF node, add an HTTP Request node
  2. URL: https://yourapp.com/api/users/\{\{$json.userId\}\}/activity`
  3. Method: GET
  4. Authentication: Your API key

Then in the IF node:

  • Condition: {{$json.completedOnboarding}}equalstrue`

Option B: Check via database

Add a PostgreSQL node:

SELECT COUNT(*) as completed
FROM user_actions
WHERE user_id = \{\{$json.userId\}\}
AND action_type = 'quick_win_completed'

Then in the IF node:

  • Condition: {{$json.completed}}greater than0`

Create two branches:

  • TRUE branch: They completed it → Send congratulations email + teach advanced feature
  • FALSE branch: They didn’t → Send reminder/help email

This single piece of logic can increase conversion by 15-20% because you’re sending relevant content based on behavior, not just time.

Step 6: Complete the Sequence

Continue building the sequence with Wait nodes and SendGrid nodes:

Email #3 (Day 3): Core Feature Education

  • Wait: 2 days after Email #2
  • Template focus: Deep dive on your most valuable feature
  • Include: Tutorial video, help doc, example use case

Email #4 (Day 5): Social Proof

  • Wait: 2 days after Email #3
  • Template focus: Customer story or case study
  • Include: Specific results, quote, “how they did it”

Email #5 (Day 7): Advanced Features

  • Wait: 2 days after Email #4
  • Template focus: Power user features they might not discover
  • Include: “Pro tips” or “Hidden features”

Email #6 (Day 12): Trial Ending Soon

  • Wait: 5 days after Email #5
  • Template focus: Create urgency, remind of value
  • Include: Pricing page link, upgrade CTA, trial expiration date

Email #7 (Day 13): Last Chance

  • Wait: 1 day after Email #6
  • Template focus: Final offer or bonus for upgrading today
  • Include: Discount code (optional), what happens if trial expires, upgrade link

Step 7: Track Opens and Clicks

Add a Webhook node at the end to log the sequence completion:

  1. HTTP Request node
  2. Method: POST
  3. URL: Your analytics endpoint or Google Sheets webhook
  4. Body:
{
  "userId": "\{\{$json.userId\}\}",
  "email": "\{\{$json.email\}\}",
  "sequenceCompleted": true,
  "completedAt": "\{\{new Date().toISOString()\}\}"
}

This lets you track who went through the entire sequence.

Tracking opens and clicks:

SendGrid automatically tracks opens and clicks if enabled. You can access this data via:

  1. SendGrid dashboard (Activity Feed)
  2. SendGrid Webhooks (send events to n8n for processing)
  3. SendGrid API (query stats via HTTP Request node)

Step 8: Add Error Handling

Emails fail for various reasons (invalid email, bounces, rate limits). Add error handling:

  1. Select any SendGrid node
  2. Click Settings tab
  3. Set Continue On Fail: true

Then after your SendGrid nodes, add an IF node:

  • Condition: {{$json.error}}` exists
  • TRUE branch: Log the error or send notification to yourself

Example error notification:

  1. Add HTTP Request node (or Email node)
  2. Send to your Slack/email
  3. Message: Failed to send onboarding email to {{$json.email}}: {{$json.error}}`

Advanced: Behavior-Based Branching

Want to take this to the next level? Create branches based on engagement:

After Email #3, add an IF node:

  • Check if they opened/clicked Email #2 and #3
  • HIGH ENGAGEMENT branch → Fast-track to upgrade email
  • LOW ENGAGEMENT branch → Send help/support email

How to check opens:

  1. HTTP Request node
  2. URL: https://api.sendgrid.com/v3/messages?query=to_email=\{\{$json.email\}\}&limit=10`
  3. Headers: Authorization: Bearer YOUR_SENDGRID_API_KEY
  4. Parse response to check for opens/clicks

This requires SendGrid API key with read permissions.

Complete Workflow Structure

Here’s what your final workflow looks like:

[Webhook Trigger]

[Send Email #1: Welcome]

[Wait 1 Day]

[Send Email #2: Quick Win]

[Wait 2 Days]

[Check if Action Completed]

   / \
  /   \
[YES] [NO]
  ↓     ↓
[Email: Next] [Email: Help]
  ↓     ↓
[Wait 2 Days] [Wait 2 Days]
  ↓     ↓
  \   /
   \ /

[Email #4: Social Proof]

[Wait 2 Days]

[Email #5: Advanced Features]

[Wait 5 Days]

[Email #6: Trial Ending]

[Wait 1 Day]

[Email #7: Last Chance]

[Log Completion]

Testing Your Sequence

Before launching to real users, test thoroughly:

Test #1: Happy path

  1. Trigger the workflow with your email
  2. Set all Wait nodes to 1 minute instead of days
  3. Run through entire sequence
  4. Check: All emails arrive, links work, personalization works

Test #2: Error cases

  1. Use an invalid email address
  2. Confirm error handling works
  3. Check that workflow doesn’t crash

Test #3: Conditional logic

  1. Trigger workflow
  2. Complete the “quick win” action in your app
  3. Verify correct branch is taken

Pro tip: Use n8n’s “Execute Workflow” feature to test individual sections without running the entire sequence.

Monitoring and Optimization

Once live, track these metrics weekly:

MetricGood BenchmarkHow to Improve
Email #1 Open Rate60-80%Better subject line, send from person not company
Email #2 Click Rate25-40%Clearer CTA, reduce friction
Sequence Completion40-60%Shorten sequence, improve timing
Trial-to-Paid15-25%Better offer in Email #6-7, add urgency

How to track conversions:

Add a webhook to your payment/upgrade flow:

// After successful upgrade
fetch('https://your-n8n-instance.com/webhook/conversion-tracking', {
  method: 'POST',
  body: JSON.stringify({
    userId: user.id,
    email: user.email,
    plan: 'paid',
    convertedAt: new Date().toISOString()
  })
});

Then build a dashboard (Google Sheets or Data Studio) comparing:

  • Users who went through onboarding vs didn’t
  • Conversion rates by email open/click behavior
  • Time-to-conversion

Cost Breakdown

Self-hosted n8n approach:

  • n8n hosting: $10-20/month (DigitalOcean, Hetzner)
  • SendGrid: Free for first 100 emails/day (3,000/month)
  • Total: $10-20/month
  • Cost per 1,000 users onboarded: $0.33 - $0.67

Email platform approach:

  • ConvertKit: $29/month for up to 1,000 contacts
  • ActiveCampaign: $49/month for up to 500 contacts
  • Total: $29-49/month
  • Cost per 1,000 users: $29-49

Savings: 95-98% cost reduction with n8n

Break-even point: If you onboard more than 30 users per month, n8n is cheaper.

Common Mistakes to Avoid

Mistake #1: Too many emails Sending 10+ emails in a 14-day trial overwhelms users. Stick to 5-7 max.

Mistake #2: Generic content “Here’s what our product can do” → Nobody cares. Focus on “Here’s what you can achieve.”

Mistake #3: Time-based only Sending Email #3 on day 3 regardless of whether they completed Email #2’s action. Use conditional logic.

Mistake #4: No error handling One failed email shouldn’t stop the entire sequence. Always set “Continue On Fail” to true.

Mistake #5: Not testing Typos, broken links, and incorrect personalization destroy credibility. Test everything before launching.

Frequently Asked Questions

Q: Can I use this with Mailchimp instead of SendGrid? A: Yes, n8n has a Mailchimp node. The setup is nearly identical—just swap SendGrid nodes for Mailchimp nodes.

Q: What if I have multiple products? A: Create separate workflows for each product, or add an IF node at the beginning that checks which product they signed up for and branches accordingly.

Q: How do I A/B test subject lines? A: Create two identical workflows with different subject lines. Use an IF node at the start to randomly assign 50% of users to each workflow. Track which performs better.

Q: Can I pause someone’s sequence if they upgrade early? A: Yes! Add a daily check (Schedule Trigger) that queries your database for users who upgraded, then use n8n’s API to deactivate their workflow instance.

Q: What’s the best time to send emails? A: For B2B: Tuesday-Thursday, 10am-2pm in recipient’s timezone. For B2C: Evenings and weekends. Test both and track open rates.

Next Steps

  1. Today: Set up your trigger webhook and Email #1
  2. This week: Build the complete 7-email sequence
  3. This month: Add conditional logic based on user behavior
  4. Next month: Analyze results and optimize low-performing emails

Want the complete n8n workflow template? Download it here: [link to workflow JSON]


About the Author

Mike Holownych is an n8n automation expert and DashNex affiliate who specializes in customer onboarding automation. He’s built onboarding sequences for 50+ SaaS companies that have collectively onboarded over 100,000 trial users.

MH

About Mike Holownych

I help entrepreneurs build self-running businesses with DashNex + automation. n8n automation expert specializing in e-commerce, affiliate marketing, and business systems.