Before you start: make sure you’ve set up user authentication and configured your email service.
The Flow at a Glance
Day 0
Immediate welcome + 1 CTA
Day 2
Tips for getting value
Day 6
Nudge + resources
Step 1: Create the Workflow
1
Open Workflows
In your project, go to Workflows > New Workflow. Name it
Welcome Sequence.2
Add a Database trigger
Click Add Trigger > Database. Listen for new rows in
auth.users or your profiles table — whichever represents a finished signup in your app.3
Check for a template
Before building from scratch, browse the template library — if you see Onboarding - Welcome Sequence, start from that and customize. Much faster than wiring each step manually.
Step 2: Email 1 — Immediate Welcome
1
Add a Send Email action
Click + Add Action > Send Email.
2
Configure the email
- To:
{{trigger.email}} - Subject:
Welcome to Acme, {{trigger.name}}! - Body: Short. Introduce your product in 2-3 sentences. One clear CTA (e.g., “Complete your profile” or “Import your first contact”). No links to the pricing page, no feature walls of text.
3
Personalize sender
Send from a human name if possible (
Abe from Acme <abe@acme.com>) rather than noreply@. Response rates are meaningfully higher.Step 3: Email 2 — Day 2 Tip
1
Add a Delay action
Click + Add Action > Delay. Set to 2 days.
2
Add a second Send Email action
- Subject:
Quick tip to get the most out of Acme - Body: One specific, actionable tip. Link to a 60-second tutorial video or a short doc. No feature dump.
Step 4: Email 3 — Day 6 Nudge
1
Add another Delay action
Set to 4 days (so total is 6 days since signup).
2
Add a third Send Email action
- Subject:
How's it going? Here's what you might need - Body: Check in tone. Links to docs, pricing, and a “book a demo” CTA for users still on the fence. Leave an open-ended ask like “Reply if you’re stuck on anything — I read every response.”
Step 5: Save and Enable
Click Save, then toggle Enabled in the top right. Workflows only fire when enabled.Personalization Tokens
Use{{trigger.fieldName}} to pull any column from the signup row:
|| operator to provide fallbacks when a field is empty.
Conditional Branching
Smart sequences skip or swap emails based on user behavior. For example: if a user has completed their profile by day 2, send a “Congrats on your first steps” email instead of the generic tip.1
Add a Condition step
After the Day 2 delay, click + Add Action > Condition.
2
Set the condition
Example:
{{trigger.profile_completed}} == true3
Configure both branches
- If true: Send the “Congrats” email
- If false: Send the standard tip email
Tracking Effectiveness
Once the sequence is running, measure what’s actually working.- Open rate — subject line performance
- Click rate — body content performance
- Reply rate — genuine engagement signal
Verify It Worked
Sign up with a test email address. Confirm:- Email 1 arrives within 1-2 minutes
- Email 2 arrives on day 2
- Email 3 arrives on day 6
- All three render correctly on desktop and mobile
- The unsubscribe link works
- Personalization tokens render (no literal
{{trigger.name}}in the final email)
Troubleshooting
Emails aren't sending
Emails aren't sending
Check that your email service is configured and the sender domain is verified. Go to Settings > Email and confirm the green checkmark. Unverified sender domains will cause silent failures — the workflow runs but nothing reaches inboxes.
Timing is off (emails arrive wrong day)
Timing is off (emails arrive wrong day)
Delay actions use the workflow runner schedule. If runs are backed up, delays can stretch. Check Workflows > Runs for stuck executions. For precise timing, use scheduled triggers instead of delays on very long sequences.
Opens aren't being tracked
Opens aren't being tracked
Ensure open tracking is enabled in your email provider settings. Some email clients (especially Apple Mail with privacy protection) suppress tracking pixels — expect open rates to understate real engagement.
Unsubscribes aren't being handled
Unsubscribes aren't being handled
If people unsubscribe and still get follow-up emails, the workflow isn’t checking the suppression list before sending. Add a Check Suppressions step before each Send Email action, or use the provider’s built-in suppression handling. See Email Suppressions.
Personalization tokens rendering as literal text
Personalization tokens rendering as literal text
The trigger payload doesn’t contain that field. Open the workflow’s Runs tab, click a run, and inspect the trigger data. If
name is missing, either update your signup form to capture it, or add a fallback with {{trigger.name || 'there'}}.What’s Next?
Workflows Basics
How triggers, actions, and runs fit together
Email Suppressions
Handle unsubscribes and bounces properly