Kinds of Data
Map plain values, JSON records, lists, and files into the exact input shape each Step expects. Data moves between steps in those four shapes, which decide what a later step can do with a value.
- Use it to
- Map plain values, JSON records, lists, and file tokens into the input type each destination Step expects
- Find it
- Workflow data panel → Data select (expand records and lists, or select file tokens)
- Instead
- Extract from File (to read CSV, Excel, PDF, JSON, or text files) or Convert to File (to generate downloadable files)
| Shape | Example | How to reference or use it |
|---|---|---|
| Plain value | "[email protected]", 42, true | Map directly: {{ 2.email }}. Standalone tokens keep their type; mixing with text produces text. |
| Record (JSON object) | { "customer": { "email": "[email protected]" } } | Pick the leaf field with dots: {{ 2.customer.email }}. |
| List (array) | [ { "name": "Ada" }, { "name": "Alan" } ] | Index by position ({{ 2.0.name }} or {{ 2.[0].name }}), use Run for each item, or pass to a list Step. |
| File | PDF attachment or uploaded document | Map the file token directly into a file input field rather than passing its filename as text. |
Plain values
Text, numbers and yes/no values pass between steps without any handling on your part.
Check the destination’s required type. Some services accept the number 42 but reject the string "42". A standalone reference can preserve the source type in a typed field; embedding a value in longer text produces text.
Yes/no values (booleans) show as true or false. Conditions steps compare against these directly.
Records
A record (an object) is a bundle of labelled values that belong together. For example, a customer’s name, email, company and plan travel as one item:
{
"name": "Ada Lovelace",
"email": "[email protected]",
"company": "Analytical Engines",
"plan": "pro"
}You reach a value inside it by naming the label after a dot. If that record came from step 2, the email is {{ 2.email }}. A nested record needs one more dot: {{ 2.customer.email }}.
- Resolves to the single value you want, such as [email protected].
- Safe to drop into an email recipient, subject line, or CRM text field.
- Resolves to the entire JSON record wrapped in braces.
- Use only when the destination expects a structured object. In a text field, expand customer and pick the leaf inside it.
A bare numbered reference to an absent field raises a reference error. With
a transformation chain, that absence can warn and continue. For optional
fields, choose an explicit fallback such as
{{ 3.company | default:"Unknown" }}. Inspect warnings to distinguish a
genuinely optional field from a mistyped path.
Lists
A list (an array) is several items of the same kind. Examples include spreadsheet rows, emails in a thread, or search results from an API:
[
{ "name": "Ada Lovelace", "email": "[email protected]" },
{ "name": "Alan Turing", "email": "[email protected]" },
{ "name": "Grace Hopper", "email": "[email protected]" }
]Positions count from zero and accept either dots or square brackets, so the
second name is {{ 2.1.name }} (or {{ 2.[1].name }}).
An ordinary app action does not automatically repeat over a list. Passing forty addresses to a “Send Email” step will not send forty emails. List steps work on the collection as a whole; for an action, choose how to handle the list:
- Run the step once per item. Set the step to Run for each item and point it at the list. Inside,
{{ item }}is the one you are on. This is how you send forty emails. - Take one item out. If you only want the first result, reference it by position:
{{ 1.results.0.name }}. - Shrink the list first. The Filter step drops unwanted items before the list reaches the action step.
Which one you want depends on the job, and the wrong choice is usually visible immediately in the Executions tab.
Files
File inputs need a file representation that the destination action accepts, rather than the file’s name as plain text. When a step produces a file (such as a PDF attachment or a file generated by Convert to File), Glow stores it for the run and exposes it in the data selector. Click the destination step’s file field and pick that file token directly.
To read rows, columns, or text out of an incoming CSV, TSV, Excel (.xlsx), PDF, JSON, JSON Lines, or plain-text file, pass the file reference to Extract from File. To package a list of records or text into a downloadable .csv, .xlsx, .json, .jsonl, .html, or .txt file, use Convert to File.
Check the receiving action’s accepted file format, size, and input type. A file reference, download URL, and encoded file content are not interchangeable across every connector, so test with a representative file.
- Run
- Expand an upstream Step in Data select, pick a leaf field or file token, and click Run step in Test & Debug.
- You should see
- The Step receives the value in its expected type and records the result in the Executions tab.
What’s Next?
- 👉 Step-Level Executions →: inspect the real records, lists and files a step produced.
- Learn the expression syntax for reaching into nested fields in Variable Reference Syntax.