docs/flows/formula-reference.mdx
This is the complete catalog of data manipulation functions. Most users will reach for them through the / slash trigger inside any text input — see Data Manipulation for an introduction.
function_name(arg1; arg2; arg3)
;), not commas.combine(John; Smith) and combine("John"; "Smith") both work), except for empty or whitespace-only values — use "" for an empty string and " " for a single-space separator.Functions that work with strings of text.
| Function | Signature | Description | Example |
|---|---|---|---|
combine | combine(text1; text2; separator) | Joins two or more values into one piece of text. | combine(John; Smith; " ") → John Smith |
uppercase | uppercase(text) | Changes all characters to uppercase. | uppercase(acme inc) → ACME INC |
lowercase | lowercase(text) | Changes all characters to lowercase. | lowercase([email protected]) → [email protected] |
titlecase | titlecase(text) | Capitalizes the first letter of every word. | titlecase(john smith) → John Smith |
trim | trim(text) | Removes space characters at the start and end. | trim( Hello World ) → Hello World |
prefix | prefix(text; value) | Adds text before a value. | prefix(10042; ORD-) → ORD-10042 |
suffix | suffix(text; value) | Adds text after a value. | suffix(Acme; " Ltd.") → Acme Ltd. |
replace | replace(text; find; with) | Finds a word or character and swaps it for another. | replace(first_name; "_"; " ") → first name |
remove | remove(text; value) | Deletes every occurrence of a character or word. | remove(004-420-712; "-") → 004420712 |
first_n | first_n(text; n) | Returns only the first N characters. | first_n(Jonathan; 3) → Jon |
last_n | last_n(text; n) | Returns only the last N characters. | last_n(ACC-7890; 4) → 7890 |
truncate | truncate(text; n) | Cuts text to N characters and adds ... at the end. | truncate(Annual Revenue Report; 14) → Annual Revenue... |
split | split(text; separator; index) | Breaks text into parts and returns one of them. | split(John Smith; " "; 0) → John |
extract_between | extract_between(text; start; end) | Returns the text sitting between two markers. | extract_between(Status [urgent]; "["; "]") → urgent |
extract_email | extract_email(text) | Finds and returns the first email address in a text. | extract_email(Contact [email protected] for help) → [email protected] |
extract_url | extract_url(text) | Finds and returns the first URL in a text. | extract_url(Visit https://acme.com today) → https://acme.com |
length | length(text) | Counts how many characters are in the text. | length(Hello World) → 11 |
contains | contains(text; value) | Checks if the text has a specific word or character in it. | contains(bug, urgent, backend; urgent) → TRUE |
starts_with | starts_with(text; value) | Checks if the text begins with a specific value. | starts_with([email protected]; info@) → FALSE |
ends_with | ends_with(text; value) | Checks if the text ends with a specific value. | ends_with(report.pdf; .pdf) → TRUE |
remove_spaces | remove_spaces(text) | Removes all extra spaces and line breaks inside the text. | remove_spaces(hello world) → hello world |
word_count | word_count(text) | Counts how many words are in the text. | word_count(The quick brown fox) → 4 |
pad_left | pad_left(text; length; char) | Pads text on the left with a character so it reaches a set length. | pad_left(42; 5; "0") → 00042 |
pad_right | pad_right(text; length; char) | Pads text on the right with a character so it reaches a set length. | pad_right(42; 5; "0") → 42000 |
repeat | repeat(text; count) | Repeats text a given number of times. | repeat(ab; 3) → ababab |
reverse | reverse(text) | Reverses the order of characters in the text. | reverse(hello) → olleh |
slug | slug(text) | Turns text into a URL-friendly slug (lowercase, dashes between words). | slug(Hello World!) → hello-world |
Functions for arithmetic and formatting numeric values.
| Function | Signature | Description | Example |
|---|---|---|---|
add | add(num1; num2) | Adds two numbers together. | add(49.99; 5.00) → 54.99 |
subtract | subtract(num1; num2) | Takes the second number away from the first. | subtract(100.00; 10.50) → 89.5 |
multiply | multiply(num1; num2) | Multiplies two numbers together. | multiply(3; 49.99) → 149.97 |
divide | divide(num1; num2) | Divides the first number by the second. | divide(4999; 100) → 49.99 |
round | round(number; decimals) | Rounds a number to a set number of decimal places. | round(49.9871; 2) → 49.99 |
round_up | round_up(number) | Always rounds up to the next whole number. | round_up(7.1) → 8 |
round_down | round_down(number) | Always rounds down to the previous whole number. | round_down(7.9) → 7 |
absolute | absolute(number) | Returns the positive version of a number, removing any minus sign. | absolute(-42.00) → 42 |
percentage | percentage(value; total) | Calculates what percentage the value is of the total. | percentage(75; 100) → 75% |
format_number | format_number(number; decimals) | Adds thousand separators so large numbers are easier to read. | format_number(1250000; 2) → 1,250,000.00 |
format_currency | format_currency(number; symbol) | Adds a currency symbol and formats the number. | format_currency(49.99; "$") → $49.99 |
cents_to_dollars | cents_to_dollars(number) | Converts a value stored in cents into dollars. | cents_to_dollars(4999) → $49.99 |
min | min(num1; num2) | Returns the smaller of two numbers. | min(87; 100) → 87 |
max | max(num1; num2) | Returns the larger of two numbers. | max(-5; 0) → 0 |
to_number | to_number(text) | Converts a text value into a number you can calculate with. | to_number(1990) → 1990 |
random | random() | Returns a random decimal number between 0 (included) and 1 (excluded). | random() → 0.4827 |
random_int | random_int(min; max) | Returns a random whole number between two values (both included). | random_int(1; 100) → 57 |
power | power(base; exponent) | Raises a number to the power of another number. | power(2; 10) → 1024 |
sqrt | sqrt(number) | Returns the square root of a number. | sqrt(144) → 12 |
modulo | modulo(num1; num2) | Returns the remainder left over after dividing one number by another. | modulo(10; 3) → 1 |
clamp | clamp(number; min; max) | Keeps a number between a minimum and a maximum. | clamp(150; 0; 100) → 100 |
sign | sign(number) | Returns -1 if the number is negative, 1 if positive, and 0 if zero. | sign(-42) → -1 |
Functions for working with dates and times.
| Function | Signature | Description | Example |
|---|---|---|---|
format_date | format_date(date; format) | Changes how a date looks using a format you pick. | format_date(2025-01-15; MMM DD, YYYY) → Jan 15, 2025 |
format_date_long | format_date_long(date) | Shows the full date written out in plain language. | format_date_long(2025-01-15) → Friday, January 15, 2025 |
format_time | format_time(date; format) | Pulls the time out of a date and formats it. | format_time(2025-01-15T14:30:00Z; h:mm A) → 2:30 PM |
relative_time | relative_time(date) | Shows how long ago or how far away a date is. | relative_time(2025-01-12) → 3 days ago |
add_days | add_days(date; n) | Adds a number of days to a date. | add_days(2025-01-15; 30) → Feb 14, 2025 |
subtract_days | subtract_days(date; n) | Goes back a number of days from a date. | subtract_days(2025-01-15; 7) → Jan 08, 2025 |
add_hours | add_hours(date; n) | Adds a number of hours to a date and time. | add_hours(2025-01-15T14:30:00Z; 2) → 2025-01-15T16:30:00Z |
days_between | days_between(date1; date2) | Counts how many days are between two dates. | days_between(2025-01-01; 2025-01-15) → 14 |
get_day | get_day(date) | Returns the day number from a date (1–31). | get_day(2025-01-15) → 15 |
get_month | get_month(date) | Returns the month from a date. | get_month(2025-01-15) → January |
get_year | get_year(date) | Returns the year from a date. | get_year(2025-01-15) → 2025 |
get_day_of_week | get_day_of_week(date) | Returns the name of the day of the week. | get_day_of_week(2025-01-15) → Wednesday |
start_of_month | start_of_month(date) | Returns the first day of the same month. | start_of_month(2025-01-15) → Jan 01, 2025 |
end_of_month | end_of_month(date) | Returns the last day of the same month. | end_of_month(2025-01-15) → Jan 31, 2025 |
convert_timezone | convert_timezone(date; timezone) | Converts a date and time from one timezone to another. | convert_timezone(2025-01-15T14:30:00Z; America/New_York) → Jan 15, 9:30 AM EST |
now | now() | Returns the current date and time at the moment the flow runs. | now() → 2025-01-15T14:30:00Z |
today | today() | Returns today's date with no time attached. | today() → 2025-01-15 |
to_date | to_date(text) | Turns a text value into a proper date the flow can work with. | to_date(January 15, 2025) → 2025-01-15T00:00:00Z |
add_minutes | add_minutes(date; n) | Adds a number of minutes to a date and time. | add_minutes(2025-01-15T14:30:00Z; 15) → 2025-01-15T14:45:00Z |
hours_between | hours_between(date1; date2) | Counts how many hours are between two dates. | hours_between(2025-01-15T09:00:00Z; 2025-01-15T17:30:00Z) → 8 |
start_of_day | start_of_day(date) | Returns the date at midnight (the start of that day). | start_of_day(2025-01-15T14:30:00Z) → 2025-01-15T00:00:00Z |
end_of_day | end_of_day(date) | Returns the date at one moment before midnight (the end of that day). | end_of_day(2025-01-15T14:30:00Z) → 2025-01-15T23:59:59Z |
is_before | is_before(date1; date2) | Checks if the first date is before the second date. | is_before(2025-01-01; 2025-02-01) → TRUE |
is_after | is_after(date1; date2) | Checks if the first date is after the second date. | is_after(2025-02-01; 2025-01-01) → TRUE |
is_same_day | is_same_day(date1; date2) | Checks if two dates land on the same calendar day, ignoring the time. | is_same_day(2025-01-15T09:00:00Z; 2025-01-15T21:00:00Z) → TRUE |
Functions for working with collections (arrays of items).
| Function | Signature | Description | Example |
|---|---|---|---|
filter_list | filter_list(list; field; value) | Keeps only the items where a field matches a value. | filter_list(tickets; status; open) → [3 of 10 items] |
sort_list | sort_list(list; field; order) | Sorts a list from highest to lowest, or A to Z, by a field. | sort_list(orders; amount; desc) → [sorted: 500, 200, 50] |
pluck | pluck(list; field) | Picks one field out of every item in a list. | pluck(users; email) → [[email protected], [email protected]] |
join_list | join_list(list; separator) | Turns a list into a single piece of text with a separator. | join_list([bug;urgent;backend]; ", ") → bug, urgent, backend |
first_item | first_item(list) | Returns the first item in a list. | first_item([apple;banana;cherry]) → apple |
last_item | last_item(list) | Returns the last item in a list. | last_item([apple;banana;cherry]) → cherry |
item_at | item_at(list; index) | Returns the item at a specific position in a list. | item_at([apple;banana;cherry]; 1) → banana |
count | count(list) | Counts how many items are in a list. | count([bug;urgent;backend]) → 3 |
sum | sum(list; field) | Adds up a number field across all items in a list. | sum(orders; amount) → 4820.5 |
average | average(list; field) | Calculates the average of a number field across all items. | average(scores; value) → 82.4 |
max_in_list | max_in_list(list; field) | Finds the highest value of a field across all items. | max_in_list(orders; amount) → 1200 |
min_in_list | min_in_list(list; field) | Finds the lowest value of a field across all items. | min_in_list(orders; amount) → 9.99 |
deduplicate | deduplicate(list; field) | Removes items that have the same value in a field. | deduplicate(leads; email) → [7 of 10 items] |
flatten | flatten(list) | Turns a list of lists into one flat list. | flatten([[a;b];[c;d]]) → [a,b,c,d] |
split_text_to_list | split_text_to_list(text; separator) | Turns a comma-separated text into a list of items. | split_text_to_list(bug,urgent,backend; ",") → [bug,urgent,backend] |
reverse_list | reverse_list(list) | Reverses the order of items in a list. | reverse_list([a;b;c]) → [c,b,a] |
contains_item | contains_item(list; value) | Checks if a list contains a specific value. | contains_item([bug;urgent;backend]; urgent) → TRUE |
Functions for conditionals, comparisons, and fallbacks.
| Function | Signature | Description | Example |
|---|---|---|---|
if | if(condition; true_value; false_value) | Returns one value if something is true, and another if it's not. | if(1500 > 1000; High value; Standard) → High value |
if_empty | if_empty(value; fallback) | Uses a fallback value if the field is empty. | if_empty(""; No name) → No name |
if_null | if_null(value; fallback) | Uses a fallback value if the field has no value at all. | if_null(null; N/A) → N/A |
switch | switch(value; key1; result1; key2; result2; ...) | Maps a value to another — like a lookup table written inline. | switch(US; US; North America; DE; Europe) → North America |
is_empty | is_empty(value) | Checks if a field has no value. | is_empty("") → TRUE |
is_not_empty | is_not_empty(value) | Checks if a field has any value in it. | is_not_empty([email protected]) → TRUE |
is_equal | is_equal(value1; value2) | Checks if two values are exactly the same. | is_equal(active; active) → TRUE |
and | and(condition1; condition2) | Returns true only if both conditions are true at the same time. | and(25 >= 18; US = US) → TRUE |
or | or(condition1; condition2) | Returns true if at least one of the conditions is true. | or(standard = vip; 600 > 500) → TRUE |
not | not(condition) | Flips a true to false, or a false to true. | not(is_empty([email protected])) → TRUE |
coalesce | coalesce(value1; value2; value3; ...) | Returns the first field that has a value, skipping any empty ones. | coalesce(""; John; User) → John |
is_number | is_number(value) | Checks if the value is a number (text that looks numeric returns false). | is_number(42) → TRUE |
is_list | is_list(value) | Checks if the value is a list. | is_list([a;b;c]) → TRUE |
No functions are currently deprecated. When a function gets replaced or scheduled for removal, it will appear here with the recommended replacement and the version it will be removed in. Saved flows that use a deprecated function keep running — the editor just shows a strikethrough badge to flag the issue.