--- title: 'Transform' description: 'Remap fields from upstream data into a new shape.' --- # Transform Builds a new object by mapping source fields (referenced with `{{...}}`) onto target keys. Use this when you need to reshape data between two nodes — e.g. taking a Stripe payload and producing the shape your CRM expects. ## When to use - Renaming or restructuring fields between two systems. - Extracting a subset of fields from a big payload. - Applying a basic transformation (`uppercase`, `lowercase`, `trim`) while copying the value. - Computing derived fields (concatenation, defaults). For more complex transformation that needs branching logic, consider **AI Transform** instead. ## Configuration | Field | Required | What it does | |---|---|---| | `mappings` | Yes | JSON array of mapping rules. | ### Mapping rule format ```json [ { "targetKey": "customer_email", "sourceExpression": "{{trigger.data.customer.email}}", "transform": "lowercase" }, { "targetKey": "full_name", "sourceExpression": "{{trigger.data.first_name}} {{trigger.data.last_name}}" }, { "targetKey": "amount_cents", "sourceExpression": "{{trigger.data.amount}}" } ] ``` `transform` is optional. Supported: `lowercase`, `uppercase`, `trim`, `number` (coerces strings to numbers), `boolean` (coerces "true"/"false" strings to booleans). ## What it outputs An object built from the `targetKey`/result pairs: ``` { customer_email: "alice@example.com", full_name: "Alice Smith", amount_cents: 9999 } ``` Downstream nodes reference fields as `{{.data.customer_email}}` etc. ## Gotchas - **Missing source fields** produce empty strings in the output, not `undefined`. If you need "field was missing" semantics, pair with a downstream If/Else checking `exists`. - **Template concatenation** is string-based — `{{a.b}} {{c.d}}` produces a space-separated string, not a number sum. For arithmetic, use AI Transform or Set Variable with a computed value.