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.

On this page

Headings appear here in Preview.

On this page

Headings appear here in Preview.