--- title: Common Workflow Patterns description: Reusable workflow templates icon: Layers --- ## Linear sequence Send a series of emails with delays between them. ``` [Trigger: event] ↓ [Send Email 1] ↓ [Delay] ↓ [Send Email 2] ↓ [Delay] ↓ [Send Email 3] ↓ [Exit] ``` **Use for:** - Onboarding series - Educational drip campaigns - Feature introduction sequences **Example timing:** - Day 0: Welcome - Day 1: Getting started guide - Day 3: Tips and tricks - Day 7: Feature deep dive ## Wait and branch Pause for an event, then branch based on outcome. ``` [Trigger: event] ↓ [Wait for Event: timeout X days] ├─ Event occurred → [Send success email] → [Exit] └─ Timeout → [Send reminder email] → [Exit] ``` **Use for:** - Trial conversion (waiting for subscription) - Activation campaigns (waiting for key action) - Re-engagement (waiting for login) **Example:** ``` [Trigger: trial_started] ↓ [Send: Welcome to trial] ↓ [Wait for: subscription_created, timeout: 7 days] ├─ Subscribed → [Send: Thanks for subscribing] → [Exit] └─ Timeout → [Send: Last chance offer] → [Exit] ``` ## Conditional branch Split workflow based on contact data. ``` [Trigger: event] ↓ [Condition: check contact field] ├─ True → [Send email A] → [Exit] └─ False → [Send email B] → [Exit] ``` **Use for:** - Personalization by plan/tier - Segmented messaging - Feature availability checks **Example:** ``` [Trigger: signed_up] ↓ [Condition: plan equals "enterprise"] ├─ True → [Send: Enterprise onboarding] → [Exit] └─ False → [Send: Standard onboarding] → [Exit] ``` ## Multi-condition cascade Chain multiple conditions for complex logic. ``` [Trigger: event] ↓ [Condition: is premium?] ├─ True → [Send: Premium content] → [Exit] └─ False ↓ [Condition: trial active?] ├─ True → [Send: Trial content] → [Exit] └─ False → [Send: Free content] → [Exit] ``` **Use for:** - Tiered content delivery - Progressive feature reveals - Access-based messaging ## Wait chain Multiple wait steps with progressive urgency. ``` [Trigger: cart_abandoned] ↓ [Delay: 1 hour] ↓ [Send: Gentle reminder] ↓ [Wait for: purchase, timeout: 23 hours] ├─ Purchased → [Exit] └─ Timeout ↓ [Send: Discount offer] ↓ [Wait for: purchase, timeout: 48 hours] ├─ Purchased → [Exit] └─ Timeout → [Send: Final reminder] → [Exit] ``` **Use for:** - Cart abandonment - Multi-touch re-engagement - Escalating incentives ## Segment entry drip Triggered when contact joins segment. ``` [Trigger: enters "Inactive Users" segment] ↓ [Send: We miss you] ↓ [Delay: 3 days] ↓ [Condition: still in segment?] ├─ Yes → [Send: Special offer] → [Exit] └─ No → [Exit] ``` **Use for:** - Churn prevention - Win-back campaigns - Behavior-based sequences **Important:** Segment must have `trackMembership: true` enabled. ## Schedule with filter Runs on schedule, filtered by conditions. ``` [Trigger: daily at 9am] ↓ [Condition: trial expires in 3 days] ├─ True → [Send: Trial expiring] → [Exit] └─ False → [Exit] ``` **Use for:** - Trial expiration reminders - Subscription renewal notices - Scheduled checks with conditional sends ## Update and continue Modify contact data mid-workflow. ``` [Trigger: signed_up] ↓ [Send: Welcome] ↓ [Update Contact: onboardingStep = 1] ↓ [Delay: 1 day] ↓ [Send: Getting started] ↓ [Update Contact: onboardingStep = 2] ↓ [Exit] ``` **Use for:** - Tracking workflow progress - Triggering other systems via segment changes - Marking completion milestones ## Webhook integration Call external API during workflow. ``` [Trigger: purchase_completed] ↓ [Send: Order confirmation] ↓ [Delay: 7 days] ↓ [Webhook: Create review request in external system] ↓ [Send: Review request] ↓ [Exit] ``` **Use for:** - Syncing with CRM - Triggering other automation tools - Logging workflow events ## Complex multi-path Combine patterns for sophisticated flows. ``` [Trigger: trial_started] ↓ [Send: Welcome] ↓ [Delay: 1 day] ↓ [Send: Feature tour] ↓ [Wait for: feature_used, timeout: 3 days] ├─ Used ↓ │ [Send: Great job] │ ↓ │ [Delay: 3 days] │ ↓ │ [Condition: trial ending in 1 day] │ ├─ True → [Send: Upgrade reminder] → [Exit] │ └─ False → [Exit] │ └─ Timeout ↓ [Send: Help offer] ↓ [Wait for: feature_used, timeout: 3 days] ├─ Used → [Send: Nice work] → [Exit] └─ Timeout → [Update Contact: needs_help = true] → [Exit] ``` **Use for:** - Advanced onboarding - Complex user journeys - Adaptive content delivery ## Best practices **Keep it simple** — Start with 3-5 steps. Add complexity only when needed. **Exit explicitly** — Every path should end at an Exit step. **Handle both outcomes** — Conditions and waits need success + failure paths. **Test incrementally** — Build and test each section before adding more. **Use meaningful delays** — Don't spam. Minimum 12-24 hours between emails. **Name clearly** — "Send Welcome Email - Day 0" not "Email 1". **Monitor drop-off** — Check execution stats to see where contacts exit. **Prevent loops** — Never create circular paths. Workflow should always progress forward. ## Performance tips **Batch schedule triggers** — If using schedules, run at off-peak hours to spread load. **Limit concurrent waits** — Long waits (weeks/months) keep executions in memory. Use scheduled workflows for very long delays. **Avoid deep nesting** — More than 3-4 condition levels becomes hard to maintain. **Use segments over conditions** — If filtering many contacts, segment-based triggers are more efficient than in-workflow conditions. ## Next steps - [Build conditional logic](/automation-patterns/conditional-branching) - [Understand execution context](/automation-patterns/advanced-execution-context) - [Troubleshoot workflows](/automation-patterns/troubleshooting-workflows)