Change Fields
Change fields reshapes a record on its way between two steps. Rename a field the receiving system calls something else, add one it needs, drop the ones it should never see.
It is the step that saves you from writing code purely to move data from one shape into another.
Transforming single fields inline? If you only need to clean, uppercase, format, or extract a specific field value before passing it to a downstream step, use Data Transformation (e.g. {{ 3.company | trim | upper }} or {{ 3.users | pluck:email }}). Use the Change fields canvas step when reshaping entire records (renaming, adding, and dropping multiple keys simultaneously).
Three passes, in a fixed order
The step runs three passes, always in this order.
| Pass | When it runs | What it does |
|---|---|---|
| Rename fields | First | Each row gives a fieldโs current name and its new one |
| Set fields | Second | Each row sets a field to a value |
| Remove fields | Last | Each row names a field to leave out of the result |
Because renaming happens first, a Set row can write to a name that only exists because a Rename above created it. And because removal happens last, a field you set can still be removed in the same step. That suits a value you need briefly and do not want to pass on.
Setting it up
Add the step
Open Tools in the dock and choose Change fields under Data.
Point it at a record
Start from takes the record you want to change, normally a reference to an earlier step such as {{ 3 }}.
Rename what needs renaming
Under Rename fields, add a row per field: its current name, then the name it should have. Add Row for each one.
Set what needs setting
Under Set fields, add a row per field with its value. The value can be a reference, so {{ 1.email }} or {{ $today }} both work.
Remove what should not travel on
Under Remove fields, name any field to leave out: usually an internal identifier, or a large blob you do not want carried into the next step.
What it passes on
The changed record itself, with your renames, sets and removes applied. Fields sit at the top level, so a downstream step reads them directly:
{{ 4.firstName }}
{{ 4.greeting }}Everything you did not mention travels through unchanged, keeping its type.
Examples to copy
Match a CRMโs field names
An enrichment API returns company_name and employee_count, but your CRM expects Company and Headcount.
Start from: {{ 3.ret }}. Two Rename rows: company_name โ Company, employee_count โ Headcount. Nothing else needed.
Stamp a record before storing it
Set fields: processedAt = {{ $now }}, source = Website form, workflowUrl = {{ $workflow_url }}.
The last one gives whoever finds the record later a link straight back to the workflow that wrote it.
Cut a record down before sending it on
An app returns fifty fields and the next system wants six.
Use Remove fields for the big ones: the raw HTML of an email, an attached file, an internal id nobody downstream reads. A smaller record moves between steps faster and stays under the size a run may carry.
Rename, then build on the new name
Rename: first_name โ firstName. Set: greeting = Hi {{ 3.first_name }}.
The rename gives downstream steps the tidy firstName; the greeting is built from the source stepโs value. A {{ }} reference always reads an earlier stepโs stored output: a step cannot reference its own result while it is still being made.
Whatโs Next?
- ๐ Workflow Data & Mapping โ: understand how values move from one Step to the next.
- Parse JSON: turn a JSON string into a record you can reshape.
- AI Data Transform: reshape unstructured content when there are no fixed fields to select.