Sequences
Designing Flow with Conditions
Sequences become truly powerful when you add conditions—decision points that evaluate whether a contact meets specific criteria and route them down different paths based on the answer.
Instead of sending the same message to everyone, conditions let you ask: "Does this contact have a LinkedIn profile? Did they open the last email? Do they have a phone number?" and execute different steps based on the answer.
This article shows you how to design intelligent sequences that adapt to each contact's data and engagement, ensuring relevant messaging and respecting channel preferences.
What are conditions?
A condition is a question your sequence asks about a contact at a specific point in the flow.
Conditions always have two possible outcomes:
Yes – The condition is true; follow this path
No – The condition is false; follow the other path
For example:
Condition: "Has LinkedIn URL?"
Yes → Send LinkedIn Message (because they have a LinkedIn profile)
No → Send Email Instead (because no LinkedIn profile on file)
Conditions enable your sequence to be intelligent and respectful. Rather than forcing every contact through the same steps, conditions create different journeys based on real data.
Why conditions matter
Without conditions, sequences treat all contacts identically. This creates problems:
You send LinkedIn messages to contacts without LinkedIn profiles (bounces)
You send WhatsApp messages to contacts without phone numbers (fails)
You follow up via email to contacts who already replied (annoying)
You move unqualified leads through the same pipeline as hot prospects (wastes time)
Conditions solve these by enabling intelligent routing:
Relevance – Only send messages via channels the contact has enabled
Respect – Stop messaging if the contact has already engaged
Efficiency – Route hot prospects differently than cold leads
Compliance – Don't contact people who've unsubscribed
Scalability – One sequence handles diverse situations automatically
Available conditions
Dalil supports conditions across Email, LinkedIn, WhatsApp, and User Actions. Understanding what each condition checks helps you design effective branching logic.
Email Conditions
Email conditions evaluate the contact's email status and engagement.
Has Email Address
Checks if the contact has an email address in their CRM record.
Use this when:
You want to send email to some contacts but not others
Your contact list is mixed (some have emails, some don't)
You're filtering before sending bulk email
Example flow:
Condition: Has Email Address?
Yes → Send Email
No → Send WhatsApp instead
Opened Email
Checks if the contact opened a previous email in the sequence.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they open the email (or forever if they don't)
Within X days – Check if they opened within a specific timeframe (e.g., "within 3 days"). If yes, proceed. If no after 3 days, go to the No branch.
Use this when:
You want to send different follow-ups based on engagement
You're testing who's actually reading your messages
You want to pause the sequence if they're actively engaged
You want to move on to alternative approaches if they don't engage
Example flow (waiting indefinitely):
Condition: Opened Email?
Yes → Send more detailed proposal
No → Resend with different subject line
Example flow (within X days):
Condition: Opened Email within 3 days?
Yes → Send high-value follow-up
No → Try different approach (WhatsApp or LinkedIn)
Clicked Email Link
Checks if the contact clicked a link in a previous email.
Clicking a link shows higher intent than just opening. Use this to identify engaged prospects.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they click a link (or forever if they don't)
Within X days – Check if they clicked within a specific timeframe (e.g., "within 2 days"). If yes, proceed. If no after 2 days, go to No branch.
Use this when:
You want to move engaged prospects to a sales sequence
You're identifying who's interested in a specific topic (based on which link they clicked)
You're moving hot leads to a different pipeline stage
You want to escalate high-intent prospects immediately
Example flow (waiting indefinitely):
Condition: Clicked Email Link?
Yes → Create Task for sales rep to call
No → Send another email with different CTA
Example flow (within X days):
Condition: Clicked Email Link within 2 days?
Yes → Create urgent task + Send calendar link
No → Send alternative offer via different channel
Unsubscribed from Email
Checks if the contact has unsubscribed from your emails.
Use this when:
You want to stop emailing people who opted out
You're respecting preference centers
You're ensuring legal compliance (CAN-SPAM, GDPR)
Example flow:
Condition: Unsubscribed from Email?
Yes → Exit sequence (stop all email sends)
No → Continue with next step
Replied to Email
Checks if the contact replied to a previous email.
A reply is the strongest engagement signal. Use this to pause automated sequences and engage humans.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they reply (or forever if they don't)
Within X days – Check if they replied within a specific timeframe (e.g., "within 5 days"). If yes, proceed to Yes branch. If no reply after 5 days, go to No branch.
Use this when:
You want to handoff to sales reps when prospects reply
You're identifying genuine interest
You want to avoid looking like a spam bot (stop emailing if they're already talking)
You want to trigger urgent workflows for hot leads
Example flow (waiting indefinitely):
Condition: Replied to Email?
Yes → Create Task for rep to respond + Trigger Workflow
No → Wait 3 days then send follow-up
Example flow (within X days):
Condition: Replied to Email within 5 days?
Yes → Trigger "Hot Lead" workflow + Create urgent task
No → Continue nurture sequence with different content
LinkedIn Conditions
LinkedIn conditions evaluate the contact's LinkedIn profile status and engagement.
Has LinkedIn URL
Checks if the contact has a LinkedIn profile URL in their CRM record.
Use this when:
You want to differentiate outreach based on LinkedIn availability
You're deciding between LinkedIn and email first touch
You're targeting only LinkedIn-active profiles
Example flow:
Condition: Has LinkedIn URL?
Yes → Send LinkedIn Connection Request
No → Send Email instead
Has LinkedIn Connection
Checks if you're already connected with this contact on LinkedIn.
Important: You can only send LinkedIn messages to existing connections. Use this to verify connection status before messaging.
Use this when:
You want to send LinkedIn messages only to existing connections
You're separating connection requests from messaging
You're avoiding message failures
Example flow:
Condition: Has LinkedIn Connection?
Yes → Send LinkedIn Message
No → Send LinkedIn Connection Request first
Accepted LinkedIn Invitation
Checks if the contact accepted a LinkedIn connection request you sent.
This is a strong engagement signal—they chose to connect with you.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they accept (or forever if they don't)
Within X days – Check if they accepted within a specific timeframe (e.g., "within 7 days"). If yes, proceed. If no after 7 days, go to the No branch.
Use this when:
You want to message only people who accepted your request
You're moving accepted connections to a messaging sequence
You're timing your first message strategically
Example flow (waiting indefinitely):
Condition: Accepted LinkedIn Invitation?
Yes → Wait 1 day, then Send LinkedIn Message
No → Send reminder connection request
Example flow (within X days):
Condition: Accepted LinkedIn Invitation within 7 days?
Yes → Send LinkedIn Message
No → Move to different sequence (they're not interested)
Opened LinkedIn Message
Checks if the contact opened a LinkedIn message you sent.
Open means they saw your message and are at least mildly interested.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they open the message (or forever if they don't)
Within X days – Check if they opened within a specific timeframe (e.g., "within 2 days"). If yes, proceed. If no after 2 days, go to No branch.
Use this when:
You want to measure LinkedIn engagement
You're deciding whether to follow up on LinkedIn or via email
You're routing hot prospects to sales
You want to escalate messaging for engaged contacts
Example flow (waiting indefinitely):
Condition: Opened LinkedIn Message?
Yes → Send Email with calendar link to schedule call
No → Try WhatsApp instead
Example flow (within X days):
Condition: Opened LinkedIn Message within 2 days?
Yes → Send meeting proposal
No → Send WhatsApp to re-engage
Replied to LinkedIn Message
Checks if the contact replied to a LinkedIn message.
A reply is high-intent engagement. Like email replies, this is a handoff signal.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they reply (or forever if they don't)
Within X days – Check if they replied within a specific timeframe (e.g., "within 3 days"). If yes, proceed. If no after 3 days, go to No branch.
Use this when:
You want to pause automation when they're actively responding
You're identifying real conversations starting
You're transferring to live sales engagement
You want to trigger urgent workflows for engaged prospects
Example flow (waiting indefinitely):
Condition: Replied to LinkedIn Message?
Yes → Create Task for rep + Exit sequence
No → Wait 5 days, then try different approach
Example flow (within X days):
Condition: Replied to LinkedIn Message within 3 days?
Yes → Route to sales team + Trigger "Active Conversation" workflow
No → Switch to Email or WhatsApp channel
WhatsApp Conditions
WhatsApp conditions evaluate phone number availability and message engagement.
Has Phone Number
Checks if the contact has a phone number in their CRM record.
Use this when:
You want to send WhatsApp only to contacts with phone numbers
You're routing contacts without numbers to email or LinkedIn
You're segmenting by communication channel availability
Example flow:
Condition: Has Phone Number?
Yes → Send WhatsApp Message
No → Send Email instead
Replied to WhatsApp Message
Checks if the contact replied to a WhatsApp message.
A WhatsApp reply indicates active engagement on a personal messaging platform—often the highest urgency.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they reply (or forever if they don't)
Within X hours – Check if they replied within a specific timeframe (e.g., "within 24 hours"). If yes, proceed. If no after 24 hours, go to No branch.
Use this when:
You want to pause sequences when someone's actively chatting with you
You're routing WhatsApp replies to sales team immediately
You're ending the automation and starting human conversation
WhatsApp is your highest-priority channel and warrants fast response
Example flow (waiting indefinitely):
Condition: Replied to WhatsApp Message?
Yes → Create Task + Trigger Workflow for immediate follow-up
No → Wait 1 day, then send final reminder
Example flow (within X hours):
Condition: Replied to WhatsApp Message within 24 hours?
Yes → Create urgent task + Alert sales manager
No → Archive contact or move to nurture sequence
Opened WhatsApp Message
Checks if the contact opened (read) a WhatsApp message.
WhatsApp shows read receipts, so you know if they saw it.
When you configure this condition, you can choose how to evaluate it:
Wait indefinitely – Hold the sequence at this condition until they open the message (or forever if they don't)
Within X hours – Check if they opened within a specific timeframe (e.g., "within 12 hours"). If yes, proceed. If no after 12 hours, go to No branch.
Use this when:
You want to measure WhatsApp engagement
You're deciding whether to send another message
You're routing engaged contacts to sales
WhatsApp is time-sensitive and you want faster routing
Example flow (waiting indefinitely):
Condition: Opened WhatsApp Message?
Yes → Send follow-up with offer
No → Send another message
Example flow (within X hours):
Condition: Opened WhatsApp Message within 12 hours?
Yes → Send time-limited offer
No → Mark for manual follow-up
User action conditions
User action conditions check for internal activities within Dalil.
Created Calendar Event
Checks if the contact created a calendar event (typically from a meeting scheduling link in an email or message).
This is a commitment signal—they literally put you on their calendar.
Use this when:
You want to trigger special handling for people who scheduled
You're preparing for confirmed meetings
You're moving scheduled contacts to a different pipeline stage
Example flow:
Condition: Created Calendar Event?
Yes → Move to "Meeting Scheduled" stage + Send reminder sequence
No → Continue outreach sequence
Building your first condition
Let's walk through adding a condition to your sequence.
Step 1: Position your cursor
In the sequence editor, click the + button at the point where you want to add a condition (typically after your first step).
Step 2: Choose condition
From the menu that appears, look for Condition (not an action like Send Email).
Click to add a condition node.
Step 3: Select your condition
A configuration panel appears with a dropdown menu listing all available conditions organized by category (Email, LinkedIn, WhatsApp, User Actions).
Select the condition that makes sense for your flow. For example, choose "Has LinkedIn URL?" if you want to route based on LinkedIn profile availability.
Step 4: Configure the paths
The condition automatically creates two branches:
Yes path (green) – What happens if the condition is true
No path (red) – What happens if the condition is false
Click the + button on the Yes path to add your first action. Click the + button on the No path to add the alternative action.
Step 5: Build each branch
For the Yes path:
Add a step (e.g., Send LinkedIn Message)
Configure it (message content, timing)
For the No path:
Add a different step (e.g., Send Email instead)
Configure it
Each branch can have multiple steps, additional conditions, or connect to the same endpoint.
Step 6: Preview your logic
Click the Preview tab to see your conditional flow visually.
You'll see:
Your condition node with Yes/No branches clearly labeled
Different steps for each branch
How contacts flow through the sequence
This helps you verify the logic makes sense before publishing.
Real-world condition examples
Understanding conditions is easier with concrete examples. Here are common patterns.
Example 1: Channel Preference Flow
Goal: Send LinkedIn message only if they have a profile, otherwise email.
Flow:
Condition: Has LinkedIn URL?
Yes → Send LinkedIn Connection Request
→ Wait 2 days
→ Condition: Accepted LinkedIn Invitation?
Yes → Send LinkedIn Message
No → Send Email Instead
No (no LinkedIn URL) → Send Email immediately
Why it works: Respects channel availability. No wasted steps trying to LinkedIn message someone without a profile.
Example 2: Engagement-based routing
Goal: Hot prospects (who opened email) go to sales, cold prospects get another nurture email.
Flow:
Send Email
→ Wait 1 day
→ Condition: Opened Email?
Yes → Create Task for sales rep to call
No → Send different email subject line
Why it works: Separates engaged prospects from disengaged ones. Sales team focuses on hot leads. Cold prospects get another chance.
Example 3: Multi-touch with escalation
Goal: Start with email, escalate to phone if they engage.
Flow:
Send Email
→ Wait 2 days
→ Condition: Clicked Email Link?
Yes → Send WhatsApp with calendar link
No → Send LinkedIn Connection Request
Why it works: Escalates from low-touch (email) to high-touch (phone via WhatsApp) based on engagement. Saves sales time by only high-touch contacting engaged prospects.
Example 4: Compliance & respect
Goal: Never email people who've unsubscribed.
Flow:
Condition: Unsubscribed from Email?
Yes → Exit Sequence (stop all actions)
No → Send Email sequence normally
Why it works: Respects opt-outs. Prevents legal issues. Shows you care about contact preferences.
Example 5: Complex decision tree
Goal: Different sequences for different segments.
Flow:
Condition: Has LinkedIn URL?
Yes → Condition: Has Email Address?
Yes → Multi-channel sequence (LinkedIn + Email)
No → LinkedIn-only sequence
No → Condition: Has Phone Number?
Yes → WhatsApp-only sequence
No → Exit (no contact channels available)
Why it works: Maximizes every contact's available channels. Everyone gets relevant outreach. No wasted steps on impossible contact methods.
Best practices for conditions
When designing conditional sequences, follow these guidelines.
Start with Data Quality
Ensure your CRM data is clean and current. Conditions work on field values—if email addresses are missing or LinkedIn URLs are outdated, conditions may route incorrectly.
Before launching sequences, audit your data. Fix missing fields. Verify LinkedIn URLs are current.
Use Conditions to Respect Preferences
Always include an unsubscribe/preference check early in your sequence.
First condition: Unsubscribed or opted out?
Yes → Exit (stop all actions)
No → Continue
This prevents annoying people who already said no.
Layer Conditions for Sophistication
You can nest conditions—a Yes or No branch can lead to another condition.
This creates increasingly specific routing:
Condition 1: Has Email?
Yes → Condition 2: Opened Email?
Yes → Condition 3: Clicked Link?
Yes → Hot prospect path
No → Warm prospect path
Each layer adds precision.
Test Your Logic
Before publishing, preview your sequence and trace multiple contact paths:
What happens to someone WITH a LinkedIn URL?
What happens to someone WITHOUT a LinkedIn URL?
What happens if they open but don't click?
What happens if they reply?
Make sure every path makes sense.
Avoid Over-Complication
While conditions are powerful, too many branching paths can become confusing.
Keep sequences understandable. A sequence with 5+ conditions crossing over each other becomes hard to modify and debug.
If you find yourself building complex logic, consider: should this be two separate sequences instead of one?
Why this matters
Conditions transform sequences from one-size-fits-all broadcasts into personalized, intelligent workflows.
Instead of hoping your message lands well for everyone, conditions ensure:
Each contact receives relevant messaging
Different channels are used based on availability
Engaged prospects get immediate attention
Disengaged prospects get alternative approaches
Compliance requirements are met automatically
This is the difference between bulk email (everyone gets the same thing) and smart automation (everyone gets what's right for them).
Key outcome
Conditions are decision points in your sequence that evaluate contact data and engagement, creating Yes/No branches that route contacts down different paths.
By combining conditions across Email, LinkedIn, WhatsApp, and User Actions, you can build intelligent sequences that adapt to each contact's profile, communication preferences, and engagement level.
The result is higher relevance, better compliance, faster conversions, and less wasted outreach on impossible contact methods.