Automation basics

Using data in fields

Fill a field with data from earlier in the run: variables, the table, loop items and built-in functions.

Many text fields accept references: a name in double braces, replaced by its value just before the block runs. Where a field accepts them, typing {{ offers a list to pick from.

A reference starts with where the data lives, then a path into it, separated by dots. {{variables.email}} and {{variables@email}} mean the same thing. A list position is a number counting from 0.

The places you can read from: variables, the workflow's variables, including the Start block's parameters. table, the workflow's table. loopData, the current item of a loop, by its Loop ID. prevBlockData, what the block before this one handed on. globalData, the JSON set under Global data in the editor's toolbar. googleSheets, rows a Google Sheets block read under a reference key. workflow, what a workflow run by Execute workflow left behind, under its Execute Id (optional). secrets, the credentials in Databases. Resource, the accounts imported for the profile with Import resource on the Profiles page. activeTabUrl, the address of the page the run is on.

With table, a column name alone reads the first row. Use $last for the last row, or a number for a given row.

If a reference finds nothing, it stays in the field as written. When you see {{variables.email}} typed into a page, the variable was never set. A value that is not text, such as a list, is written as JSON.

Functions start with $. Inside a function, a reference goes in square brackets instead of braces: {{$increment([variables.page], 1)}}. Put text in quotes and separate the values with commas.

To compute a value, start the field with !!. Everything inside the braces is then evaluated as a JavaScript expression, for example !!{{variables.total > 100 ? 'large' : 'small'}}.

A WarpX Phone run has no profile and no page, so Resource and activeTabUrl have nothing to give there. Keep an account's secrets in secrets or the table instead.

You writeIt means
{{variables.email}}The value of the variable email.
{{variables.$$apiToken}}The variable apiToken kept in Databases → Variables, shared by every workflow.
{{table.price}}The price column of the table's first row.
{{table.$last.price}}The price column of the table's last row.
{{table.2.price}}The price column of the third row.
{{loopData.order}}The current item of the loop whose Loop ID is order.
{{loopData.order.Email}}The Email field of that item, when the items are objects.
{{loopData.order.$index}}The item's position, counting from 0.
{{prevBlockData}}Everything the previous block handed on.
{{prevBlockData.0.email}}The email of the first row the previous block handed on.
{{globalData.shopUrl}}shopUrl from the workflow's Global data JSON.
{{googleSheets.orders.0.Status}}The Status of the first row a Google Sheets block read with reference key orders.
{{workflow.checkout.variables.orderId}}The variable orderId of a workflow run by Execute workflow with Execute Id (optional) set to checkout.
{{secrets.shopPassword}}The credential shopPassword from Databases → Credentials.
{{Resource.Facebook.Username}}The Facebook username imported for the profile that is running.
{{activeTabUrl}}The address of the page the run is on.
{{$date('YYYY-MM-DD')}}Today's date, such as 2026-09-19.
{{$date([variables.createdAt], 'DD MMM YYYY')}}A date variable reformatted, such as 05 Jan 2026. The format relative gives 3 days ago, and timestamp gives milliseconds.
{{$randint(1000, 5000)}}A whole number from 1000 to 5000.
{{$randData('?u?l?l?l?d?d?d')}}Random text such as Kqwe482. ?l lowercase, ?u uppercase, ?d digit, ?s symbol, ?f lower and upper, ?n lower and digit, ?m upper and digit, ?i lower, upper and digit, ?a any.
{{$randData([variables.names])}}One item picked at random from a list.
{{$getLength([variables.items])}}How many items the list has, or how many characters the text has.
{{$slice([variables.code], 0, 4)}}The first four characters, or the first four items of a list.
{{$increment([variables.page], 1)}}The number plus 1. $subtract, $multiply, $divide and $modulo work the same way.
{{$replace([variables.title], ' ', '-')}}The first space replaced by a dash. $replaceAll replaces every one.
{{$toLowerCase([variables.email])}}The text in lowercase. $toUpperCase gives uppercase.
{{$filter([variables.orders], '$..email')}}Every email in the data, picked with a JSONPath expression.
{{$stringify([variables.user])}}The value as JSON text.