Written by
Joshua ThompsonArticle details
» 7 min read
Quick answer: Make's if(condition; value_if_true; value_if_false) returns one of two values. Use it to choose a value inside a field; use a filter or router when different modules need to run. The downloadable example below tests thresholds, zero and missing amounts.
Download a tested if() blueprint: thresholds and missing amounts
Tested in Make on 29 October 2026.
Download the Make if() blueprint (JSON, 7 KB)
It contains seven synthetic inputs and four modules, needs no account connections, and is available without a newsletter signup.
The example labels an amount as above, at_threshold or below a threshold of 100. Blank, missing and null amounts return needs_review. A genuine zero stays zero and returns below.
- Save the JSON download. Create a new blank scenario in Make, open More > Import blueprint and select the file. You can also copy the complete JSON and choose Paste blueprint from clipboard.
- Save the scenario with scheduling Inactive, then select Run once.
- Open the execution bubble above Check actual against expected. Use Next operation to inspect all seven outputs. Each should show
passed: true.
| Case | Input amount | Converted value | Observed outcome |
|---|---|---|---|
| Above | "101.00" | 101 | above |
| Below | "99.00" | 99 | below |
| Exactly at the threshold | "100.00" | 100 | at_threshold |
| Zero | "0" | 0 | below |
| Blank | "" | MISSING | needs_review |
| Missing field | No amount key | MISSING | needs_review |
| Null | null | MISSING | needs_review |
How the four modules work
JSON > Parse JSON reads the sample array and emits seven bundles. The first Tools > Set multiple variables module converts a present decimal string using the formula below. The sentinel MISSING is a label, not a numeric zero.
{{if(ifempty(1.amount; "__MISSING__") = "__MISSING__"; "MISSING"; parseNumber(1.amount; "."))}}
The next module chooses a label from the converted value:
{{if(2.numericAmount = "MISSING"; "needs_review"; if(2.numericAmount > 100; "above"; if(2.numericAmount = 100; "at_threshold"; "below")))}}
The final module compares the actual label with the expected label. I exported the successful scenario, imported that exact export into another blank scenario, and verified all seven results again. Both test scenarios were left inactive.
Scope: this test covers the listed clean dot-decimal strings and missing-value cases. Currency symbols, thousands separators, decimal commas, whitespace-only strings and other malformed input need separate validation. Do not treat this example as a general-purpose price validator. Module numbers can differ in your scenario; choose your own mapped tokens.
Make documents if() and ifempty() as general mapping functions and parseNumber() as a numeric conversion function. For arrays of text amounts, follow the tested map() and parseNumber() example.
Make.com switch() vs if(): a tested status-mapping example
Use if() for a condition such as an amount exceeding a threshold. Use switch() to map one input to several named results: for example, turn order statuses into labels. A filter or router still decides which modules run.
Make's general-functions reference defines switch(expression; value1; result1; value2; result2; else): it returns the result for the first matching value. The final fallback is optional, but specifying one makes an unfamiliar status visible.
{{switch(ifempty(1.status; "__MISSING__"); "paid"; "ready"; "pending"; "wait"; "review")}}
Tested in Make on 30 October 2026: all six cases below passed after importing the downloadable file into a new blank scenario.
Download the tested switch() blueprint (JSON, 4 KB)
| Input status | Observed result |
|---|---|
paid | ready |
pending | wait |
cancelled (unrecognised) | review |
| Blank string | review |
| Missing status field | review |
null | review |
- Import the JSON into a new blank Make scenario using More > Import blueprint. It contains three built-in modules and synthetic data, with no external account connections.
- Leave scheduling Inactive, save and select Run once.
- Open the execution bubble above Check actual against expected and inspect all six operations. Each should show
passed: true.
The first module reads the sample inputs; the second maps each status; the third compares its result with the expected value. The test scenario was left inactive. In your own workflow, select your mapped status token instead of assuming it is 1.status, and test any capitalisation or surrounding spaces your source can send.
Who is this guide for?
You’re comfortable dragging modules around but want cleaner logic, fewer errors, and faster scenarios. You might be reaching for Filters and Routers by default. I’ll show you when an if() inside a field beats another branch in your canvas – keeping your blueprint lean and easier to debug.
What is the if() function in Make.com?
if(condition; value_if_true; value_if_false) returns one of two values based on whether the condition is true or false. It’s perfect for defaulting missing data, creating labels, handling edge cases, and making decisions without spawning new branches.
For list transformations, see this guide to the Make.com map() function syntax and examples. If your mapped amounts arrive as text, follow the tested map() and parseNumber() walkthrough, which shows the sample inputs, decimal separator and observed numeric result.
When should you use if() instead of a filter or router?
In general in make.com I like to keep my automations as simple as possible. There’s nothing worse than having multiple routes and having to duplicate logic.
- Use if() when the decision only affects a single field or the payload you’re building. Examples include choosing a label, swapping a default value, or doing light calculations.
- Use Filters or Routers when you genuinely need different paths of modules. If both branches do almost the same work and only a value changes, keep it in the field with
if(). - Reducing unnecessary Filters keeps blueprint size smaller, makes it easier to understand, speeds up loading, and simplifies handovers to teammates.
Basic syntax and tips
For the current signatures, see Make's official documentation for if(), parseNumber(), text functions and parseDate().
- Shape –
if(condition; value_if_true; value_if_false) - Separators - Use semicolons between function arguments. A comma inside quoted text, such as
parseNumber("10,5"; ","), is part of the value. - Strings – Wrap text in quotes. If spaces might be present, apply
trim()first. - Numbers - For ungrouped numeric text, use
parseNumber(text; ".")for a dot decimal separator orparseNumber(text; ",")for a comma. Check missing or invalid input separately. An already numeric field does not need this conversion. - Dates - Use
parseDate(text; format)with a matching input format before comparing date text withnow. Supply the optional timezone when it matters.
Make.com if() examples to adapt
These are self-contained examples using literal demonstration values. For your scenario, select the corresponding fields from Make's mapping panel instead of copying another scenario's module numbers. Test the result with your own sample data before using it in a live workflow.
Order Value - Low or High Ticket
This example converts the text value "25" using a dot decimal separator, then labels values strictly above 20 as High Ticket. The result is High Ticket; 20 itself is Low Ticket. Replace "25" with the mapped order-value text, or use an already numeric field directly.
{{if(parseNumber("25"; ".") > 20; "High Ticket"; "Low Ticket")}}
Lead Score Tiers
Hot Lead means budget is strictly above 500 and company size is strictly above 1000. Otherwise, Warm Lead means budget is strictly above 100 or company size is strictly above 2500. All other cases are Cold Lead.
The literal example below uses a numeric budget of 600 and company size of 1200, so it returns Hot Lead. Replace each 600 with the mapped numeric budget and each 1200 with the mapped numeric company size. If either source is numeric text, convert it with parseNumber() first. Nested if() calls keep the conditions explicit.
{{if(600 > 500; if(1200 > 1000; "Hot Lead"; "Warm Lead"); if(600 > 100; "Warm Lead"; if(1200 > 2500; "Warm Lead"; "Cold Lead")))}}
Gender-based greeting
For this literal demonstration, the input code is M and the result is Sir. The left-hand M in each comparison represents the input. Replace those two left-hand values with the same mapped field, while keeping the right-hand F and M comparison values unchanged. F returns Madame; an unrecognised code returns Friend.
{{if("M" = "F"; "Madame"; if("M" = "M"; "Sir"; "Friend"))}}
Common If Make.com mistakes to avoid
- Semicolons, not commas – In Make, use semicolons to separate arguments.
- Forgetting quotes – Wrap text in quotes, and cast numbers before comparison.
- String vs number - Convert numeric text with
parseNumber()and the decimal separator used by that input; check missing or invalid values separately. - Date formats - Give
parseDate()a format that matches the source date text, and use an explicit timezone when required. - Whitespace – Use
trim()when checking for empty values, e.g.length(trim(x)) = 0. - Case sensitivity – Normalise with
lower()before usingcontains().
Optimisation best practices
- Prefer field logic over new branches – If the result is simply a value, keep it within an
if()rather than creating a separate branch. - Normalise once - Apply functions like
trim,parseNumber, orlowerwhere appropriate, store the result in a variable, and reuse it. - Set variables for readability – Use a quick Set module with clear variable names to make complex formulas easier to read, without adding unnecessary branches.
- Replace big condition trees – When mapping categories, a lookup table is more efficient than multiple nested
if()statements. - Log decisions while building – Temporarily output your chosen label or boolean to the Inspector to check behaviour, then remove it once confirmed.
If() vs Filters vs Routers – my rule of thumb
If the difference is a value, use if(). If the difference is the workflow, use a Filter or Router. Default to fewer branches – your future self will thank you when the canvas loads instantly and you can see the whole story without scrolling.
Try the example
Import the tested blueprint, inspect all seven results, and adapt the tokens and threshold to your own input. Keep missing values separate from real zero amounts. For more practical examples, join the free newsletter on the homepage.
Video walkthrough
This earlier video introduces the if() function. The downloadable boundary-case test above was added on 29 October 2026.
Tagged
Last updated
Category
AutomationLikes
More posts
You might also enjoy
Automation
Make.com map() Function: Syntax, Examples and parseNumber()
Learn how Make.com’s map() function extracts and filters array values, how to combine it with join(), first() and max(), and when to use parseNumber().
JoshuaOctober 1, 2025
Automation
Free Make.com Reddit Scraper Blueprint
Download a free Make.com Reddit scraper blueprint that uses public RSS, cleans post data, filters ideas with AI and sends results to your content workflow.
JoshuaSeptember 17, 2025
Automation
Tracking Clicks Made Simple for your Business (and other ideas)!
Tracking Clicks for Business is the first step to smarter marketing. Grab free downloads and build your own easy metrics dashboard today!
JoshuaAugust 24, 2025
Star Rating
No ratings yet
Comments
No comments yet - start the conversation.