---
title: Make Functions
slug: make-functions
docTags: 
createdAt: 2026-03-24T11:21:17.511Z
---

::::VerticalSplit{layout="left"}
:::VerticalSplitItem
![](https://api.archbee.com/api/optimize/oAyFj2GHlBeBVWF5OAir2/i43tF-y1KSz0LBESEbSGn-20260408-140823.png)
:::

:::VerticalSplitItem
The Make Functions app is a visual way to handle data transformations within your scenarios. Previously, Make IML (Integromat Markup Language) functions were only accessible inside mapping fields. Now, these functions are available as standalone modules.
:::
::::

:::hint{type="info"}
<font color="#0C121D">**Behavior with an empty input** </font>

<font color="#0C121D">If the value mapped to an input field is empty, null, or missing, the module outputs an empty result without stopping the scenario. No error is raised.
To handle missing values explicitly, use the **General** &gt; **If Empty** operation to supply a fallback, or add a filter before the module to verify the upstream value exists.</font>
:::

# Key benefits

- **Visual chaining:** You can connect individual functions as separate modules that can be chained together in the scenario builder.
- **Simplified usage**: The entry barrier is lower for non-technical users who may find traditional function setup challenging.
- **Zero-cost execution:** Using Make Functions modules costs zero operations and zero credits. They are free to use, just like standard IML functions.
- **High discoverability:** You can find functions within the scenario builder under the Make Functions app, categorized by type (String, Math, Date, etc.).
- **Familiar interface:** Each module uses the standard Make mapping interface with clearly defined inputs and outputs.

# Credit usage

Because these modules act as visual wrappers for standard IML logic, which is already free to use within mapping fields, they do not consume any operations or credits.

# Make Functions modules

You can use the following module to build your scenarios.

:::::ExpandableHeading{isOpen="true"}
## Transform

&#x20;Use this module when you need to chain multiple transformations — for example, trim, replace, and encode a string — without linking separate modules for each step.

| **Field**     | **Description**                                |
| ------------- | ---------------------------------------------- |
| Initial Value | The starting value for the pipeline (required) |
| Steps         | One or more operation steps (required)         |

From the operations field, you can select operations listed below.

| **Type** | **Examples of operations&#x20;**                                                                                                   |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Text     | To upper case, To lower case, Capitalize, Start case, Trim whitespace, Substring, Replace, Split, Join, Format Number, Format Date |
| Number   | Absolute value, Length, Index Of, Round up, Round down, Round, Truncate, Sum, Average, Length (Array), Date Difference             |
| Array    | Split, Slice (Array), Reverse (Array), Sort (Array), Add (Array)                                                                   |
| Date     | Now, Yesterday, Tomorrow, Add days, Set hour, Parse date                                                                           |

:::hint{type="info"}
**Type compatibility:**

Each operation requires a specific **input type** and produces a fixed **output type**. If a step’s expected input type does not match the output type of the preceding step, the scenario fails immediately. Make generates a  **Type mismatch error** and no steps are executed.
:::

**Common incompatible pairs to avoid:**

- <font color="#0C121D">**Split → Absolute Value**\: Split outputs an array; Absolute Value expects a number.</font>
- ****<font color="#0C121D">**Length → Uppercase**\: Length outputs a number; Uppercase expects text.</font>
- <font color="#0C121D">**Sum → Split**\: Sum outputs a number; Split expects text.</font>

<font color="#0C121D">Operations that accept any input type such as - Get, If, If Empty, Switch, To String, To Number, To Boolean, Array\: First, Array\: Last, or that generate their own value regardless of the previous step (Now, Yesterday, Tomorrow) are always compatible in a chain.</font>
**Output**

| **Field** | **Type**                                                                                                             |
| --------- | -------------------------------------------------------------------------------------------------------------------- |
| Result    | The output of the last step                                                                                          |
| Steps     | An array containing the `operation` name and `result` for every step, it is useful for debugging intermediate values |

**Example: Normalize an invoice total**
Use the Transform functions module to turn a localized amount from an email, PDF parser, or form submission into a clean accounting-friendly number.

::::WorkflowBlock
:::WorkflowBlockItem
In your scenario builder, add **Make Functions&#x20;**>**&#x20;Transform** module.
:::

:::WorkflowBlockItem
In the **Initial Value** field, map the amount from the previous module, or add a value for example  € 1.234,567.
:::

:::WorkflowBlockItem
Clic&#x6B;**&#x20;Add item** to add the first step.
:::

:::WorkflowBlockItem
In the **Operation** field, select **Trim whitspace (text)**.
:::

:::WorkflowBlockItem
Click **Add item** to add the second step.
:::

:::WorkflowBlockItem
In the **Operation&#x20;**&#x66;ield, select **Replace (text)**.
:::

:::WorkflowBlockItem
In the **Pattern** field, enter */\[^0-9,.-]/g.*
:::

:::WorkflowBlockItem
Leave the **Replacement** field empty.
:::

:::WorkflowBlockItem
Click **Add item** to add the third step.&#x20;
:::

:::WorkflowBlockItem
In the **Operation** field, select **Parse number (text -> number)**.&#x20;
:::

:::WorkflowBlockItem
In the **Decimal separator** field, enter `,`.
:::

:::WorkflowBlockItem
Click **Add item** to add the fourth step.
:::

:::WorkflowBlockItem
In the **Operation** field, select **Round (Number)**.
:::

:::WorkflowBlockItem
Set **Decimal places** to `2`.
:::

:::WorkflowBlockItem
Click **Add item** to add the fifth step.
:::

:::WorkflowBlockItem
In the **Operation field**, select **Format number (number -> text)**.
:::

:::WorkflowBlockItem
Set the **Decimal places** to `2`, **Decimal separator** to` .`, and **Thousands separator** to `,`.
:::

:::WorkflowBlockItem
Click **Save**.
:::

:::WorkflowBlockItem
Run the module
:::
::::

The module outputs 1,234.57. The Steps output shows the intermediate result after each operation so you can inspect where the value changed.
:::::

:::::ExpandableHeading{isOpen="true"}
## Array functions

Use the Array functions module to get elements, sort, filter, merge, transform arrays, extract keys, and convert between arrays and objects.&#x20;

Select an operation from the dropdown list, then fill in the fields that appear.

| **Operation**       | **Description**                                        | **Additional fields**                                                     |
| ------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------- |
| Get first element   | Returns the first element                              |                                                                           |
| Get last element    | Returns the last element                               |                                                                           |
| Array length        | Returns the number of elements                         |                                                                           |
| Slice               | Returns a portion of the array                         | Start (required), End                                                     |
| Reverse             | Returns the array in reverse order                     |                                                                           |
| Sort                | Sorts the array                                        | Order (asc/desc, default: asc), Key (property name for arrays of objects) |
| Shuffle             | Returns the array in random order                      |                                                                           |
| Contains            | Returns true if the array contains the given value     | Value (required)                                                          |
| Add element         | Appends or prepends a value                            | Value (required), Position (beginning/end, default: end)                  |
| Remove element      | Removes the element at a given 0-based index           | Index (required)                                                          |
| Merge arrays        | Concatenates two arrays                                | Second array (required)                                                   |
| Remove duplicates   | Removes duplicate values                               | Key (property name for deduplication in arrays of objects)                |
| Flatten             | Flattens a nested array                                | Depth (number of nesting levels to flatten)                               |
| Get keys            | Returns the keys of a collection as an array           | Object (required)                                                         |
| Map values          | Extracts a single property from an array of objects    | Key (property name, required)                                             |
| Array to collection | Converts an array of key-value pairs into a collection | Key field (default: `key`), Value field (default: `value`)                |
| Collection to array | Converts a collection into an array of key-value pairs | Object (required)                                                         |

**Output**

| **Field** | **Type**                                                   |
| --------- | ---------------------------------------------------------- |
| Result    | Array, collection, or primitive — depends on the operation |

**Example: Extract active customer email addresses from a contact list**

Use the Array module to output an array of email addresses from the active contacts in a list.

:::BlockQuote
Input array:
\[
&#x20;\{ "name": "Alice", "email": "alice\@example.com", "status": "active" },
&#x20;\{ "name": "Bob", "email": "bob\@example.com", "status": "inactive" },
&#x20;\{ "name": "Clara", "email": "clara\@example.com", "status": "active" }
]
:::

Use a JSON parser along with an array aggregator to parse the array.

::::WorkflowBlock
:::WorkflowBlockItem
In your scenario builder, add **Make Functions&#x20;**>**&#x20;Array functions** module.
:::

:::WorkflowBlockItem
In the **Operation** field, select **Map values**.
:::

:::WorkflowBlockItem
In the **Array&#x20;**&#x66;ield, map the `email` array from the previous module.
:::

:::WorkflowBlockItem
In the **Key&#x20;**&#x66;ield, enter *email*.
:::

:::WorkflowBlockItem
In th&#x65;**&#x20;Key to filter by&#x20;**&#x66;ield, enter *status*.
:::

:::WorkflowBlockItem
In the **Values to filter** field, enter *active*.
:::

:::WorkflowBlockItem
Click **OK**.
:::
::::

The module transforms the list of objects into an array containing only the email addresses, for example: *alice\@example.com, clara\@example.com.*
:::::

:::::ExpandableHeading{isOpen="true"}
## Hash functions

Use the Hash functions module to use hash and encode operations such as MD5, SHA-1, SHA-256, SHA-512, and Base64 encoding.

| **Operation** | **Description**                                                       | **Additional fields**                                                                                 |
| ------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| MD5           | Returns the MD5 hash of the input                                     |                                                                                                       |
| SHA1          | Returns the SHA-1 hash. Provide an HMAC key to compute HMAC-SHA1.     | HMAC key, Key encoding (UTF-8/Hex/Base64, default: UTF-8), Output encoding (Hex/Base64, default: Hex) |
| SHA256        | Returns the SHA-256 hash. Provide an HMAC key to compute HMAC-SHA256. | HMAC key, Key encoding (UTF-8/Hex/Base64, default: UTF-8), Output encoding (Hex/Base64, default: Hex) |
| SHA512        | Returns the SHA-512 hash. Provide an HMAC key to compute HMAC-SHA512. | HMAC key, Key encoding (UTF-8/Hex/Base64, default: UTF-8), Output encoding (Hex/Base64, default: Hex) |
| Base64 Encode | Encodes the input as Base64                                           |                                                                                                       |

**Output**

| Field  | Type |
| ------ | ---- |
| Result | Text |

**Example: Verify a webhook signature**

Use the Hash module to verify a webhook signature.

:::BlockQuote
Input data: hello
HMAC key: secret
:::

::::WorkflowBlock
:::WorkflowBlockItem
In your scenario builder, add **Make Function&#x20;**>**&#x20;Hash functions** module.
:::

:::WorkflowBlockItem
In the **Operation** field, select **SHA256**.
:::

:::WorkflowBlockItem
In the **Data&#x20;**&#x66;ield, map the raw webhook request body from a previous module.
:::

:::WorkflowBlockItem
In the **HMAC key** field, map or enter your webhook secret.
:::

:::WorkflowBlockItem
Set **Key encoding** to **UTF-8**.
:::

:::WorkflowBlockItem
Set **Output encoding** to **Hex**.
:::

:::WorkflowBlockItem
Click **Save**.
:::
::::

The module outputs the HMAC-SHA256 (88aab3ede8d3adf94d26ab90d3bafd4a2083070c3bcce9c014ee04a443847c0b) signature. You can compare this value against the signature sent in the webhook headers using a filter.
:::::

:::::ExpandableHeading{isOpen="true"}
## Date functions

Use the Date functions module to add or subtract time, set specific date components, calculate differences, and format or parse dates.

Select an operation from the dropdown, then fill in the fields that appear.

| **Operation**        | **Description**                                            | **Additional fields**                                                                        |
| -------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| Now                  | Returns the current date and time                          |                                                                                              |
| Yesterday            | Returns yesterday's date                                   | Date (defaults to today if omitted)                                                          |
| Tomorrow             | Returns tomorrow's date                                    | Date (defaults to today if omitted)                                                          |
| Add seconds          | Adds seconds to a date. Use a negative number to subtract. | Seconds (required)                                                                           |
| Add minutes          | Adds minutes to a date                                     | Minutes (required)                                                                           |
| Add hours            | Adds hours to a date                                       | Hours (required)                                                                             |
| Add days             | Adds days to a date                                        | Days (required)                                                                              |
| Add months           | Adds months to a date                                      | Months (required)                                                                            |
| Add years            | Adds years to a date                                       | Years (required)                                                                             |
| Set second           | Sets the seconds component (0–59)                          | Value (required)                                                                             |
| Set minute           | Sets the minutes component (0–59)                          | Value (required)                                                                             |
| Set hour             | Sets the hours component (0–23)                            | Value (required)                                                                             |
| Set day of week      | Sets the day of the week                                   | Value: day name or number 0–6 (required)                                                     |
| Set day of the month | Sets the day of the month (1–31)                           | Value (required)                                                                             |
| Set month            | Sets the month                                             | Value: month name or number 1–12 (required)                                                  |
| Set year             | Sets the year                                              | Value (required)                                                                             |
| Date difference      | Returns the difference between two dates                   | Start date (required), End date (required), Unit (days/hours/minutes/seconds, default: days) |
| Format date          | Formats a date as a string                                 | Date (required), Format (required, e.g. `YYYY-MM-DD`)                                        |
| Parse date           | Parses a date from a text string                           | Text (required), Format (required, e.g.` YYYY-MM-DD`)                                        |

**Output**

| **Field** | **Type**                                   |
| --------- | ------------------------------------------ |
| Result    | Date or number, depending on the operation |

**Format tokens**

| **Token** | **Description**        | **Example** |
| --------- | ---------------------- | ----------- |
| YYYY      | 4-digit year           | 2026        |
| MM        | 2-digit month (01–12)  | 3           |
| DD        | 2-digit day (01–31)    | 18          |
| HH        | Hour in 24-hour format | 14          |
| mm        | Minutes                | 5           |
| ss        | Seconds                | 9           |

**Example: Calculate the number of days until a deadline**

Use the Date module to calculate the number of days until a deadline.

::::WorkflowBlock
:::WorkflowBlockItem
In your scenario builder, add **Make Function&#x20;**>**&#x20;Date functions** module.
:::

:::WorkflowBlockItem
In the **Operation** field, select **Date difference**.
:::

:::WorkflowBlockItem
In the **Start date** field, click the calendar icon and set to **Now**; or map the current date from a previous module.
:::

:::WorkflowBlockItem
In the **End date** field, map the deadline date from the previous module (for example, a due date from a project management app).
:::

:::WorkflowBlockItem
In th&#x65;**&#x20;Unit** field, select **Days**.
:::

:::WorkflowBlockItem
Click **OK**.
:::
::::

The module outputs the number of days between today and the deadline. If the result is a negative number, the deadline has already passed.
:::::

:::::ExpandableHeading{isOpen="true"}
## General functions

Use the General functions module to use control flow and type conversion operations such as conditional logic, switch statements, property access, and type conversions.

| **Operation** | **Description**                                                    | **Additional fields**                                                  |
| ------------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------- |
| Get           | Returns the value at a dot-notation path inside an object or array | Object (required), Path (required, e.g. user.address.city)             |
| If            | Returns one of two values based on a condition                     | Condition (required), Then (required), Else                            |
| If empty      | Returns a fallback value when the input is empty or null           | Value (required), Fallback (required)                                  |
| Switch        | Maps a value to a result from a list of cases                      | Value (required), Cases (array of key/result pairs, required), Default |
| Omit keys     | Returns an object with the specified keys removed                  | Object (required), Keys (comma-separated, required)                    |
| Pick keys     | Returns an object containing only the specified keys               | Object (required), Keys (comma-separated, required)                    |
| To String     | Converts any value to a string                                     | Value (required)                                                       |
| To Number     | Converts a value to a number                                       | Value (required)                                                       |
| To Boolean    | Converts a value to a boolean                                      | Value (required)                                                       |

**Output**

| **Field** | **Type**                                                  |
| --------- | --------------------------------------------------------- |
| Result    | Any — matches the type returned by the selected operation |

**Example: Assign a priority from a plan name**

Use the General functions module to return a priority label based on a value from a previous module.&#x20;

:::BlockQuote
Input value: enterprise
:::

::::WorkflowBlock
:::WorkflowBlockItem
In your scenario builder, add **Make Functions&#x20;**>**&#x20;General** **functions&#x20;**&#x6D;odule.
:::

:::WorkflowBlockItem
In the **Operation** field, select **Switch**.
:::

:::WorkflowBlockItem
In the **Value&#x20;**&#x66;ield, map the plan name field from the previous module.
:::

:::WorkflowBlockItem
In **Cases** field, enter the following:
free -> low
pro -> standard
enterprise -> high-touch
:::

:::WorkflowBlockItem
In the **Default value** field, enter *standard.*
:::

:::WorkflowBlockItem
Click **Save**.
:::
::::

The module outputs *high-touch*.
:::::

:::::ExpandableHeading{isOpen="true"}
## Math functions

Use the Math functions module to round off, truncate, find minimum and maximum values, calculate sums and averages, and format numbers.&#x20;

Select an operation from the dropdown list, then fill in the fields that appear.

| **Operation**  | **Description**                                     | **Additional fields**                                                                                                             |
| -------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Absolute Value | Returns the non-negative value of a number          |                                                                                                                                   |
| Round up       | Rounds up to the nearest integer                    |                                                                                                                                   |
| Round down     | Rounds down to the nearest integer                  |                                                                                                                                   |
| Round          | Rounds to the nearest value                         | Precision (decimal places, default: `0`)                                                                                          |
| Truncate       | Removes the fractional part without rounding        | Digits (decimal places to keep, default: `0`)                                                                                     |
| Maximum        | Returns the largest number from a list              | Values (array of numbers, required)                                                                                               |
| Minimum        | Returns the smallest number from a list             | Values (array of numbers, required)                                                                                               |
| Sum            | Adds all numbers in a list                          | Values (array of numbers, required)                                                                                               |
| Average        | Returns the arithmetic mean of a list               | Values (array of numbers, required)                                                                                               |
| Median         | Returns the median of a list                        | Values (array of numbers, required)                                                                                               |
| Parse Number   | Parses a number from a text string                  | Text (required), Decimal separator (default: `.`)                                                                                 |
| Format Number  | Formats a number as a string with custom separators | Number (required), Decimal points (default: `2`),<br />Decimal separator (default: `.`), <br />Thousands separator (default: `,`) |

**Output**

| Field  | Type   |
| ------ | ------ |
| Result | Number |

**Example: Format a price for display**

Use the Math module to convert a raw numeric value into a standard currency format.

::::WorkflowBlock
:::WorkflowBlockItem
In your scenario builder, add **Make Functions&#x20;**>**&#x20;Math functions** module.
:::

:::WorkflowBlockItem
In the **Operation** field, select **Format Number**.
:::

:::WorkflowBlockItem
In the **Number** field, map the price value from your source module (e.g., 1234.5).
:::

:::WorkflowBlockItem
Set **Decimal points** to `2`.
:::

:::WorkflowBlockItem
Set **Decimal separator** to`.` .
:::

:::WorkflowBlockItem
Set **Thousands separator** to `,`.
:::

:::WorkflowBlockItem
Click **OK**.
:::
::::

The module will output the formatted string: `1,234.50`.
:::::

:::::ExpandableHeading{isOpen="true"}
## String functions

Use the String functions module to transform case, extract substring, replace patterns, split and join text, and encode/decode URLs.

| **Operation**    | **Description**                                                      | **Additional fields**                                                    |
| ---------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| To upper case    | Converts all characters to uppercase                                 |                                                                          |
| To lower case    | Converts all characters to lowercase                                 |                                                                          |
| Capitalize       | Capitalizes the first letter of the first word                       |                                                                          |
| Start case       | Capitalizes the first letter of every word                           |                                                                          |
| Trim white space | Removes leading and trailing whitespace                              |                                                                          |
| Text length      | Returns the number of characters                                     |                                                                          |
| Substring        | Extracts a portion of the string                                     | Start (required), length                                                 |
| Index of         | Returns the 0-based position of a substring; returns -1 if not found | Search (required), start index (default: `0`)                            |
| Replace          | Replaces a pattern with a replacement. The pattern accepts regex.    | Pattern (required), Replacement (required), Replace all (default: false) |
| Split            | Splits a string into an array using a separator                      | Separator (required)                                                     |
| Join             | Joins an array of strings into a single string                       | Array (required), Separator (default: `,`)                               |
| Contains         | Returns true if the string contains the given substring              | Substring (required), Case sensitive (default: true)                     |
| Encode URL       | URL-encodes the text                                                 |                                                                          |
| Decode URL       | Decodes a URL-encoded string                                         |                                                                          |
| Escape HTML      | Escapes HTML special characters (\<, >, &, ")                        |                                                                          |
| Strip HTML       | Removes all HTML tags and returns plain text<br />                   |                                                                          |

**Output**

| **Field&#x20;** | **Type**                                 |
| --------------- | ---------------------------------------- |
| Result          | Text (or number for length and index of) |

**Example: Process text with Make Functions**

In this example, you will use Make Functions to automatically trim whitespace and capitalize a string within your scenario.

::::WorkflowBlock
:::WorkflowBlockItem
In your scenario builder, add **Make Functions&#x20;**>**&#x20;String functions** module.
:::

:::WorkflowBlockItem
In the **Operation** field, select **Trim whitespaces**.
:::

:::WorkflowBlockItem
In the **Text** field, map the value from your source module.
:::

:::WorkflowBlockItem
Click **OK**.
:::

:::WorkflowBlockItem
Add a second **Make Functions** > **String functions&#x20;**&#x6D;odule following the first one.
:::

:::WorkflowBlockItem
In the **Operation&#x20;**&#x66;ield, select **Capitalize**.
:::

:::WorkflowBlockItem
In the **Text&#x20;**&#x66;ield, map the output of the first Text module.
:::

:::WorkflowBlockItem
Click **OK**.
:::
::::

The second module will output the trimmed and capitalized string.
:::::

# Templates

You can look for Make Functions templates in [Make's template gallery](https://www.make.com/en/templates), where you'll find thousands of pre-created scenarios.
