Skip to Content
BuildKinds of Data

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.

At a glanceVerified in app · Oct 30, 2026
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)
ShapeExampleHow to reference or use it
Plain value"[email protected]", 42, trueMap 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.
FilePDF attachment or uploaded documentMap 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 }}.

Pick the leaf field{{ 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.
Pick the parent branch{{ 2.customer }}
  • 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.

Verify it works
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?

Last updated on

Search documentation

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