Building Workflows
Insert values from earlier nodes, explore nested output, use current items, and format the result.
A flow tag is a placeholder for data that will exist when the workflow runs. Use one when a later node needs an entry field, API response, run ID, or another earlier result.
A setting that accepts flow tags shows Insert flow tag on its label row. Select it to see all data for every available earlier node, nearest first.
Each value has a friendly type such as Text, Email, Number, List, or Group. If you run a test on a node, it will include real sample values you can choose from the shape the workflow actually produced.
Type to search, use the arrow keys to move, and press Enter to insert. Each node shows its first few values; select more for the rest or All output (JSON) for the complete output.

The picker inserts a tag such as:
{{ "Form submitted"["3"] }}This reads the raw value stored for Gravity Forms field 3 from the node named Form submitted.
Type {{ in a field that supports flow tags to open the same menu at the keyboard cursor. Continue typing to search, then press Enter or Tab to insert. Esc closes the menu without removing what you typed.
After a node name, type . to browse values inside it. Typing more letters narrows that level—for example, .mes can find message.
Certain settings require a particular kind of value. For example, Form Source expects a numeric form ID.
When you open the flow tag picker, the label says Expects a form ID · number fields first, and values known to contain numbers appear first. Values with other data types remain available under Other types.
This ordering makes compatible values easier to find, but it does not validate what a value represents. For example, a Number field is numeric, but it’s not necessarily a valid form ID.
Some settings normally ask you to choose a fixed value from a dropdown, making every workflow run use that same choice.
To fill those settings with dynamic data instead, switch from List to Custom. The Custom field lets you type a value or insert a flow tag.
For example, Form Source could be set in either of these ways:
{{ "Find form".id }} when an earlier node supplies the form ID.List includes the usual selector and automatic sources. Each side remembers its value while the node window remains open; only the visible mode is saved.

The node window’s Input column presents the same data as cards with readable field names and types. You can add that data directly to a Settings field:
When no setting is ready, the value says Drag. Drag it to any compatible field. Valid targets turn blue; incompatible targets explain the required data.
Gravity Forms bookkeeping fields such as Entry ID, Date Created, and IP Address are folded into one Entry meta row so the form fields stay easy to scan.

The most basic flow tag format is {{ "Node name" }}, which returns the whole output as compact JSON.
Add a path after the quoted node name:
| Flow tag | Result |
|---|---|
{{ "Form submitted".id }} |
Entry ID |
{{ "Form submitted"["3.1"] }} |
A key containing a dot, such as a field sub-input |
{{ "HTTP request".body.data[0].name }} |
name from the first item in a response |
{{ "HTTP request".headers.location }} |
Lowercase location response header |
Use .key for a simple property, [0] for a list position, and ["key"] for keys containing punctuation.
A value that contains other values has a Group or List type and a › arrow. Open it to move one level deeper. The breadcrumb shows where you are, while the field shows the flow tag being built.
Inside a group, you can:
Inside a list:
[0]—so you can choose one of its fields;First item always reads from the first item when the workflow runs. The picker does not display every list item. Use For Each when later nodes should run once per item.
To read another known position, edit the index in the flow tag. Use [1] for the second item or [-1] for the last item:
{{ "HTTP request".body.data[0].name }}{{ "HTTP request".body.data[1].name }}{{ "HTTP request".body.data[-1].name }}For dynamic output such as an HTTP response, the structure may be unknown until the node has been tested. The picker says Fields appear after a test run and offers a test action. You can still type a path you already know.

Use a numeric path for the raw stored Gravity Forms value:
{{ "Form submitted"["3"] }}{{ "Form submitted"["3.1"] }}Use .mergeTag() when you want Gravity Forms to produce its display-formatted value:
{{ "Form submitted".mergeTag('{Field:3}') }}The quoted node must provide an entry. Colon-style field shorthand is not supported.
A pipe (|) sends the selected value through a filter. Filters run from left to right:
{{ "Order".total | number(2) | default('0') }}| Flow tag filter | Example use |
|---|---|
number(decimals=0) |
number(2) formats 1234.5 as 1234.50 |
upper / lower |
Change text case |
trim |
Remove surrounding whitespace |
truncate(length, ellipsis='…') |
Shorten text |
default(fallback) |
Supply a value when the result is empty |
date(format) |
Format a date with a PHP date format |
join(separator=', ') |
Turn a list into text |
count |
Count the items in a list or keys in a group |
markdown |
Turn Markdown, such as an AI reply, into formatted HTML |
For example, {{ "Get Entries".items | count }} returns the number of entries.
AI replies usually come back as Markdown, so # headings and - bullets show up as plain characters. Add | markdown to display them as real headings and lists: {{ "AI Text".response_text | markdown }}. Scripts and other unsafe HTML are removed.
A filter that receives the wrong kind of value fails clearly instead of guessing—for example, join or count on one string, or number on non-numeric text.
These unquoted selectors come from the current run rather than a named node:
| Flow tag | Available when | Result |
|---|---|---|
{{ item.email }} |
Inside a For Each Each item branch | A value from the current item |
{{ loop_1.index }} |
Inside that For Each scope | Zero-based item position; use the picker for the real loop ID |
{{ run.id }} |
Anywhere | Run ID |
{{ run.key }} |
Anywhere | Stable, hard-to-guess correlation key |
{{ site.admin_email }} |
Anywhere | The site’s admin email. {{ site.name }}, {{ site.url }}, and {{ site.admin_url }} work the same way |
Insert flow tag lists these under This run and Site, after your nodes.
A node actually named item still uses quotes: {{ "item".id }}.
Hover over a complete flow tag, or move the keyboard cursor into it. A card will appear showing:
Before a test, the card says Not checked yet. A reference to a missing node or output gets a red wavy underline, and the card explains what is missing so you can insert a replacement.
After testing a node, a Custom setting can show the sample value produced by a simple flow tag. This helps you confirm that the tag points to the value you expected.
The preview comes from the latest test only. It is not save or activation validation. A preview may not be available when:
Flowcrafter blocks activation when a named reference points to a missing, ambiguous, or later node. A property path can only be checked against real data when output exists.
If a flow tag cannot resolve at run time, Flowcrafter leaves the original tag visible instead of silently replacing it with an empty string.