What it does
- Evaluates the expression in each field against
ctx - Type-casts each value to the field’s declared type
- Records the resulting object under the step’s name
- Continues to the next step (it does not set the workflow’s return value)
Transform vs Output
The two share the same field editor (name, type, value), so a Transform is easy to promote to an Output later, or vice-versa.
Fields
Each field has:- Name — the key on the produced object
- Type —
string,number,boolean,array, orobject - Value — a literal or expression resolved against
ctx
{ "field": { "value": "{{ expr }}", "type": "string" } }.
What lands in ctx
After the step runs, its fields are recorded as a flat object under the step’s name:When to use it
- Reshape and rename — turn a verbose API response into a small, clearly-named object for the rest of the workflow.
- Consolidate — combine fields from several upstream steps into one payload you reference in one place.
- Normalize types — coerce a stringy value into a real
numberorbooleanbefore a Condition step.
Example: clean up an API response
Given an HTTP stepn4 that returned a large CRM record, a Transform step can distill just what downstream steps need:
{{ n5.name }}, {{ n5.tier }}, and {{ n5.is_vip }} instead of digging back into the raw response.
Considerations
- Pure expressions preserve types.
{{ n4.body.balance }}in anumberfield stays a number. Anumberfield whose expression resolves to non-numeric text will fail the type-cast — keep the declared type and the value in sync. - It doesn’t terminate. Remember to connect a Transform to a following step; on its own it produces data but returns nothing to the caller.

