Skip to Content
BuildAutomation Data

Automation Data

Pass outputs from earlier Steps into downstream fields using variable chips from the Workflow data panel. You reach any earlier result with a reference like {{ <step number>.<field> }} so the Step number and path stay accurate.

At a glanceVerified in app · Oct 30, 2026
Use it to
Map outputs from earlier Steps, system tokens, and workspace variables into downstream Step fields
Find it
Any Step input field → data icon → Workflow data panel (Data select, Data flow, Data transformation)
Output
Numbered references such as {{ 4.result }}, {{ item.email }}, {{ $input.customerId }}, and {{ $var.KEY }}
Instead
Custom Variables (for run-scoped calculated values) or Variables in the left sidebar (for persistent workspace values)

How data flows between steps

Connections decide which Steps run next. Field references decide which data each Step reads; a connection alone does not copy the previous Step’s output into every input.

  1. Open Workflow data: Click the data icon at the right of any field. The Workflow data panel opens with three tabs: Data select, Data flow, and Data transformation. Data select lists Input data, System Variables, Team Variables and Secrets, and every earlier Step by name and number.
  2. Pick a field: Expand a Step or group in Data select and click the value you want. It appears in the field as a chip such as 4.result or 3.$full_result. Behind the chip is the reference {{ 4.result }}.
  3. Run once to see real fields: Before the first run, a Step shows only the fields its schema promises to return. After a run, Data select lists the fields and values the Step actually returned.
You wantWriteExample result
One field of an earlier Step{{ 4.result }}Today is a fresh opportunity...
A nested field{{ 2.customer.address.city }}Prague
The first item of a list{{ 2.items.0.name }}Pro plan
The whole output of a Step{{ 3.$full_result }}The whole object or list, as JSON
The current item in a loop{{ item }}, {{ item.email }}[email protected]
Input from a parent automation{{ $input.customerId }}cus_9821
Today’s date (UTC){{ $today }}2026-10-29
A workspace secret{{ $secret.STRIPE_API_KEY }}Masked as [REDACTED] in logs
A fallback when a field is empty{{ 3.company | default:"Unknown" }}Unknown

Why numbers, not names

A Step receives its number when created and keeps it if you rename or move it on the canvas. Deleted Step numbers are never reused, so existing references never break or point at a different Step. Gaps in numbering (such as Steps 3 and 4 on a two-step automation) are normal. There is no name-based form: {{ trigger.email }} and {{ steps.trigger.data.email }} do not work.

The three tabs in Workflow data

TabWhat it does
Data selectLists Input data, System Variables, Team Variables and Secrets, and every earlier Step.
Data flowShows how data moves between Steps and when each connection last carried a payload.
Data transformationTidies a value in memory before this Step uses it; see Tidying a value.
The Workflow data panel open beside a step's Setup tab, showing earlier step outputs in Data select mapped into input fields as coloured variable chips.
Pick any value from Data select to insert a live reference chip into the field.

Pick a specific field when you can. Before a Step runs, Data select offers $full_result ({{ N.$full_result }}), which passes the entire output object. For AI Steps, run the upstream Step once first. Then pick only the fields the prompt needs instead of sending the whole object.

Tidying a value before a step uses it

The Data transformation tab (or a | pipe chain written directly in a reference) lets you clean, format, filter, or total a value in memory without adding another Step:

{{ 3.email | trim | lower }} {{ 2.items | where:"status":"paid" | pluck:amount | total }} {{ $now | date_add:7:days | format_date:date_iso }}
  • Supported heads: Pipe chains work on Step references ({{ N.field | ... }}), loop items ({{ item.field | ... }}), and subflow inputs ({{ $input.field | ... }}). They also work on UTC clock tokens ({{ $now | ... }}, {{ $today | ... }}, {{ $yesterday | ... }}).
  • Missing fields & untaken branches: An empty or missing field skips every operation except default:<value>. Add | default:"Unknown" so a missing optional field or untaken branch does not stop the run.

See Variable Reference Syntax and Data Transformation for the full list of operations.

Run-scoped vs. workspace variables

  • Custom Variables Step ({{ 3.status }}): Computes named values for later Steps in the same run. Each run calculates its own values; nothing is carried over to the next run.
  • Workspace variables and secrets ({{ $var.KEY }}, {{ $secret.KEY }}, {{ $key.KEY }}): Persistent workspace-wide values managed under Variables in the left sidebar.

Inspecting data

When a field receives an unexpected value, trace it backward in the same run:

  1. Find the run: Open the Execution Log or the Step’s Executions tab and expand the latest run (it opens expanded by default).
  2. Check the referenced source: Read the chip in the failing Step’s field (such as {{ 3.ret.id }}), then open Step 3’s Executions tab for that same run to see what it returned.
  3. Verify before retrying writes: Check the connected destination app before repeating any send, create, or update action. See Step-Level Executions.
Verify it works
Run
Click the data icon inside a Step input field, select an upstream field from Data select, and click Run step.
You should see
The field resolves the variable chip using the upstream Step's recorded output for that run.

What’s Next?

Last updated on

Search documentation

Start with a guide, or search by Step, task or error.