English
Condition (If)
Routes the email to the "true" or "false" output based on conditions over the email and the working data.
The Condition node splits a branch in two. Each row of the condition tree compares a field with a value; rows are combined with "all" or "any" and can be grouped. A field is either an email field (email.subject, email.from.domain, email.attachments.mimeTypes…) or a path in the working data (data.sort.category, data.http.bodyJson.items.0.id). The operators and comparison rules are the same as in trigger conditions.
Use Switch when you need more than two branches, and Categorize when the decision depends on the meaning of the email rather than on a field value.
At a glance
- Type:
flow.if· version 1 - Category: Logic
- Kind: Step — one stage of a run
- Effect: No external effect (
none) — nothing is written outside Mankomail; safe to replay - Needs a carrier email: No
- Connection: None
- Inputs:
main - Outputs:
true,false
Parameters
conditions
Conditions — Each row compares an email field (email.subject) or a working-data path (data.categorize_1.category) with a value.
- Type: Condition tree (
conditions) - Required: No
- Tests
email.*anddata.*values
Outputs
true— Taken when the conditions match.false— Taken when they do not match.
Data produced
What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).
{{ data.<step>.matched }}—boolean.truewhen the conditions matched (thetruebranch was taken),falseotherwise.
Example
A workflow should only forward invoices from customers that carry a PDF. After the trigger, add a Condition node with conditions set to "all" of:
email.from.domain matches domain client.example
email.attachments.mimeTypes contains application/pdf
email.signals.isAutoReply equals falseConnect the next steps to the true port, and a Stop node with status "Ignored" to the false port. Downstream, {{ data.<step>.matched }} is true on the first branch and false on the second.
Tips
- Text comparisons ignore case by default; accents always matter. Tick "Case sensitive" for an exact comparison.
- A node with no condition row lets everything through (an empty "all" is true). An empty "any" group is false.
- On a list field (recipients, attachment names, folders), the operators match when at least one element matches, except "does not equal", which requires that no element equals the value.
- A
data.path that does not exist counts as empty: "is empty" answerstrueand every other operator answersfalse. Anemail.field is never satisfied when the run has no triggering email (schedule, webhook, called workflow). - The value is converted to the type of the field: on a number,
9"is greater than"10is false, as expected. On a text field, "is greater than" compares alphabetically, which works for ISO dates such asemail.receivedAt>2026-01-01. - An incomplete row (no field, unknown operator) is ignored at run time; the editor reports it before publishing.