Data Transformation
When building workflows, incoming data is rarely in the exact format your downstream apps expect. Customer names might have accidental spaces, prices might lack tax or currency symbols, and timestamps might be in UTC instead of your local timezone.
Instead of cluttering your canvas with intermediate code or formatting steps, Data transformation lets you clean, calculate, and reshape data directly inside any step field.
The Core Concept
Whenever you reference data from an earlier step (like {{ 2.email }} or {{ 3.total }}), you can attach a chain of transformations to it. The transformations execute in-memory right when the step reads the token, without creating intermediate canvas steps or spending extra step credits.
{{ 1.email }}| extract_domain"cyberdyne.com""cyberdyne.com"How to Use Data Transformation
You can configure transformations visually or write them inline using pipe syntax.
1. Visual Configuration (Workflow Data Panel)
You can configure transformations visually without writing formulas or syntax:
Open the Workflow Data Panel
Click into any step input field on your canvas to open the Workflow data drawer/modal (where you select dynamic variables).
Switch to the Data Transformation Tab
In the Workflow data top bar, click the Data transformation tab (next to Data select and Data flow).
Add Transformations to Step Variables
All variables mapped in the current step appear here. Click Add transformation on any variable to add operations (such as Trim spaces, To lowercase, Times, Format as currency, or Format the date).
Live In-Memory Execution
The transformations run in memory when this step resolves the field. The transformed value is used in that field, while the earlier stepβs stored output stays unchanged. If later steps need the changed value as a reusable result, use a dedicated canvas step instead.
2. Fast Inline Pipe Syntax
If you prefer writing directly inside text inputs, append a pipe (|) and the operation name inside any variable token:
{{ 2.email | trim | lower }}
{{ 3.subtotal | times:1.21 | format_currency:"$" }}
{{ 1.created_at | format_date:date_medium:Europe/Prague }}Everyday Examples
| Common Goal | Original Data | Transformation | Result |
|---|---|---|---|
| Clean up customer name | " john doe " | Trim spaces + Capitalise Each Word | "John Doe" |
| Extract email domain | "[email protected]" | Take the domain | "acme.com" |
| Add 21% VAT and format price | 100 | Times: 1.21 + Format as currency: "$" | "$121.00" |
| Format phone number | "777123456" | Format a phone number: CZ | "+420 777 123 456" |
| Human-readable date | "2026-09-01T12:00:00Z" | Format the date: 13 Aug 2026 | "1 Sep 2026" |
| Join list into text | ["Apple", "Banana"] | Join items (comma + space) | "Apple, Banana" |
| Fallback for missing value | null or "" | If empty, use: "Unknown" | "Unknown" |
Operation Catalogue
Text & Clean Up
Text & Clean Up Operations
Use these operations to clean user input, change capitalization, slice text, and extract specific tokens.
| Operation | Inline Syntax | Description | Example |
|---|---|---|---|
| Trim spaces | | trim | Removes leading and trailing whitespace. | " hello " β "hello" |
| lower case | | lower | Converts all letters to lowercase. | "Hello World" β "hello world" |
| UPPER CASE | | upper | Converts all letters to uppercase. | "Hello World" β "HELLO WORLD" |
| Capitalise Each Word | | capitalize | Capitalizes first letter of each word; preserves hyphens. | "john doe" β "John Doe" |
| Take the text out of HTML | | strip_html | Removes HTML tags while preserving line breaks and converting list items to bullets. | "<p>Hi</p>" β "Hi" |
| Take the markdown out | | strip_markdown | Removes markdown headings, bolding, and links for plain text messaging. | "**Important**" β "Important" |
| Remove the code fence | | strip_fence | Unwraps outer ``` markdown code blocks from AI outputs. | "```json\n{}\n```" β "{}" |
| Replace text | | replace:"old":"new" | Replaces all occurrences of a search string. | "cat" | replace:"cat":"dog" β "dog" |
| Everything before | | before:"@" | Extracts text before the first occurrence of a delimiter. | "[email protected]" β "user" |
| Everything after | | after:"@" | Extracts text after the first occurrence of a delimiter. | "[email protected]" β "glow.app" |
| First line only | | first_line | Takes only the first non-empty line of text. | "Line 1\nLine 2" β "Line 1" |
| Shorten to | | limit:100 | Truncates text after a specified character count. | "Long text" | limit:4 β "Long" |
| Split on | | split:comma | Splits text into a true list (by comma, space, newline, or tab). | "a, b" | split:comma β ["a", "b"] |
| Take the domain | | extract_domain | Extracts clean domain from URL or email (removes www. and protocols). | "https://glow.app" β "glow.app" |
| Take the email address | | extract_email | Finds and extracts the first valid email address from raw text. | "Contact [email protected]" β "[email protected]" |
| Take the number | | extract_number | Extracts first numeric sequence (preserves leading zeros for SKUs). | "Order #0042" β "0042" |
| Take the link | | extract_url | Finds and extracts the first web address from text. | "Visit https://glow.app" β "https://glow.app" |
| Make safe for JSON | | escape_json | Escapes quotes and newlines so text can safely sit inside raw JSON. | "A \"quote\"" β "A \\\"quote\\\"" |
| Make safe for web address | | url_encode | Encodes special characters for URL parameters. | "Hello World" β "Hello%20World" |
| Count characters / words | | count_characters | Returns the total character or word count as a number. | "Hello" β 5 |
Fallback Values (If empty)
If an upstream field might be missing, null, or an empty string, append If empty, use (or | default:"value") to provide a fallback:
{{ 3.company | default:"Individual / Self-Employed" }}Safe Defaults: The default operation only replaces missing values or
empty strings. Valid values such as 0 or false are preserved and will
never be overwritten.
Choosing Between In-Field Transforms and Canvas Steps
| Use In-Field Data Transformation | Use Dedicated Canvas Steps |
|---|---|
| Formatting & Cleaning: Lowercase text, trim spaces, extract domains, format currencies. | Branching & Logic: Routing workflows based on complex condition branches (Conditions). |
| Direct Field Aggregation: Plucking emails from a list and joining with commas. | Looping Over API Actions: Calling an external API once per item (Repeater). |
| Dataset Size: Up to 10,000 items. | Large Scale Datasets: Sorting and filtering 100,000+ items (Sort, Filter). |
Whatβs Next?
- π Kinds of Data β: Learn how records, lists, and files move between steps.
- Variable Reference Syntax: Master expressions, nested paths, and system variables.
- Repeater Step: Loop through arrays and execute actions per item.