Transform Node
Reshape records with map, aggregate, deduplicate, sort, and limit operations
Last updated 24 Jun 2026
The Transform node is the general-purpose data-reshaping step. It runs one of five operations on the incoming records: map (select, rename, compute, coerce types), aggregate (group and summarize), deduplicate, sort, or limit.
When to Use
Use Transform to normalize field names, coerce types, compute derived fields, roll rows up into group summaries, remove duplicates, reorder, or cap the row count before passing data downstream.
Configuration
The available fields depend on the selected operation.
| Field | Type | Operation | Description |
|---|---|---|---|
operation | map | aggregate | deduplicate | sort | limit | all | The transform to run (default: map) |
mappings | array | map | Field operations, each { useExpression, source, expression, target, type } |
includeUnmapped | boolean | map | Keep fields not listed in mappings (default: false) |
onError | skip | fail | null | map | What to do when a value fails coercion (default: skip) |
groupBy | array | aggregate | Fields to group by, each { field } |
aggregates | array | aggregate | Aggregations, each { function, source, as } |
keys | array | deduplicate | Fields that define a duplicate, each { field } |
strategy | first | last | deduplicate | Which duplicate row to keep (default: first) |
caseSensitive | boolean | deduplicate | Treat key values case-sensitively (default: true) |
sortBy | array | sort | Sort keys, each { field, direction, nulls } |
limit | number | limit | Maximum rows to keep (default: 100) |
offset | number | limit | Rows to skip before taking limit (default: 0) |
Map Mappings
Each mapping selects a source field and writes it to target. Set useExpression to compute the value with an expression instead of copying a field. Aggregation functions are count, sum, avg, min, max, count_distinct, first, and last.
Inline Expressions (map)
Map expressions interpolate field values with ${fieldName} and support safe arithmetic:
${first_name} ${last_name} → concatenation
${revenue} * 0.1 → 10% of revenue
Example
Normalize a CRM export, keeping only mapped fields:
operation: map
mappings:
- source: "Email Address"
target: email
type: string
- source: "Annual Revenue"
target: revenue
type: number
- useExpression: true
expression: "${First Name} ${Last Name}"
target: full_name
includeUnmapped: false
onError: skip
Notes
- With
includeUnmapped: false, only fields with an explicit mapping appear in the output. typecoercion options areauto,string,number,boolean, anddate. On a coercion failure,onErrordecides whether to skip the row, fail the run, or substitutenull.- In
sort, each key chooses adirection(asc/desc) and null placement (first/last). - In
aggregate, the output is one row per group, with one column per entry inaggregates.
Related articles
Still stuck? Browse the FAQ or contact us.