Click conditions look at messages sent by this journey to this contact during the current enrollment — clicks on older campaigns, other journeys, or a previous run of the same journey don’t count. If a condition can’t be evaluated (missing configuration, unavailable data), the contact takes the If False branch.
Percentage Split
In addition to condition-based branching, you can use Percentage Split steps for randomized A/B testing within journeys:How Conditions Work
A condition step evaluates a rule and routes contacts to different branches:Condition Types
clicked
Did the contact click a link from any message this journey sent them since enrolling?
clicked_step
Did the contact click a link from a specific step in this journey (during the current enrollment)?
message_status
Does the latest message this journey actually sent to the contact during their current enrollment have the selected status?
Between them these cover every way a message can finish, so a delivery condition always has an answer to branch on.
The condition checks the latest message from the current enrollment; it is not tied to a fixed source step. If that message’s outcome matches the one you selected, the contact takes the If True branch. A different outcome, or no eligible message, takes the If False branch. Either branch can lead to an Exit or another existing journey step.
Message Status is available for journeys only. Click Triggers don’t support this condition type.
custom_field
Does a custom field on the contact match a condition?
Setting Up a Condition
- Add a condition step
- Set the
conditionType - Configure any type-specific fields (e.g.,
field,operator,valueforcustom_field) - Set
thenStepId— the step to go to when the condition is true - Set
elseStepId— the step to go to when the condition is false - Merge branches or exit separately
Visual Example
Multiple Conditions
Chain conditions for complex logic:Condition Operators
These operators are available forcustom_field conditions:
eq and ne require a Value; a condition saved without one is rejected.
Best Practices
Don't over-branch
Don't over-branch
Every branch doubles complexity. Keep journeys manageable with 1-2 conditions.
Always have an exit
Always have an exit
Every branch should eventually reach an exit step. Avoid infinite loops.
Test both paths
Test both paths
Ensure both Yes and No branches work correctly before activating.
Consider edge cases
Consider edge cases
A condition that can’t be evaluated — missing configuration, a “Step to Check” that was deleted, or unavailable click data — routes the contact down the If False branch. The same applies to a contact whose earlier send was skipped (quiet hours, cooldowns, suppression): they never received the message, so a click condition sees no click and routes them to If False.
Give clicks time to happen
Give clicks time to happen
Put a Wait step before a click condition and make it generous (15–60 minutes or more). The wait starts when the message is handed off for delivery, so carrier latency and human reading time both eat into short windows — a 2-minute wait will classify many real clickers as non-clickers.
Examples
Clicker vs Non-Clicker
VIP Treatment
Geographic Targeting
Delivery Status Follow-Up
Waiting for an Answer
Both delivery receipts and link taps arrive after the send: a carrier receipt takes seconds to minutes, a non-delivery can take up to 48 hours, and a tap happens over hours. A condition with no wait window checks once the moment the contact arrives, so it can branch on an answer that simply hasn’t landed yet. Set Wait up to on the condition to give it a window:minutes, hours, or days, from a minimum of 30 minutes up to a maximum of 7 days. The minimum is twice how often a waiting condition re-checks, so every window gets at least one look before its deadline; a shorter one would reach the deadline before it ever checked again. Leave the field empty and the condition behaves exactly as before: evaluate once, branch immediately.
While waiting, the contact stays active in the journey and the condition re-checks periodically. The moment the answer arrives the contact takes the If True branch — a fast answer moves fast, it does not sit out the full window. If the window runs out with no answer, the contact takes the If False branch. Time the journey spends paused doesn’t count against the window, so resuming a paused journey doesn’t dump everyone down the False branch.
Wait windows are available on click and delivery conditions. Custom-field conditions don’t support them, because custom-field data doesn’t change while a contact is parked — the window would never resolve.
One thing worth deciding deliberately: a delivery receipt eventually gives a definitive answer, but a tap never does. A contact who hasn’t tapped by hour 72 might still tap on day five. The False branch on a click window means “hasn’t clicked yet”, not “won’t click” — you’re choosing where to cut the tail.
The journey view shows how many contacts are currently waiting at each windowed condition, so a step with a long window doesn’t look broken.
Merging Branches
Sometimes branches should reconverge:Next Steps
Wait Steps
Configure timing
Examples
Common journey patterns