# Work with variables

Pass values between steps, select the right output, and avoid empty or broken references.

## What a variable contains

A variable is a value supplied by a trigger, a workflow Property, or a node. It may contain a reply, an identifier, text from an AI response, a JSON result, or a database field.

Use the variable picker in a field that supports expressions. It inserts the reference in the form the application expects. Literal text and variables can appear together in the same text expression.

## Give sources clear names

Workflow [Properties](/workflows/properties/) are reusable text settings you select through the same picker. Custom Node Types expose Properties as inputs supplied by each instance. Use these for configurable business information; use node outputs for values specific to the current run.

Name a lookup step **orderLookup** and a question step **customerQuestion**, for example. This makes the picker easier to read. Choose stable names before wiring many later steps to them.

After changing a source name or node type, inspect dependent fields and validation errors. A different node can expose different outputs even if it occupies the same spot on the canvas.

## Read data in order

Use a value only after the step that produces it has run. A value produced on another branch may not exist on the path currently executing.

For example, when a lookup has a not-found outcome, do not send a message that assumes an order number and delivery date were returned. Add a fallback response.

## Common empty-value causes

- The source step has not run yet.
- The customer has not answered a Receive Message step.
- Execution took a different branch.
- The source node is [paused](/workflows/pause-nodes/).
- The workflow Property has no value.
- A response extractor did not find the requested value.
- A copied workflow still refers to a source that needs remapping.

## Use Set Variable

**Set Variable** gives a value a named step in your workflow. Configure its Value field with text or an expression, then use its output in a later step. It is useful for a calculated or composed value, such as a short greeting.

The [manual starter](/recipes/manual-starter/) includes a working Set Variable example that you can import.

## JSON is data, not a sentence

Some outputs contain structured data encoded as text. Parse or extract the fields you need before presenting them to a person. When sending JSON to another service, ensure the final text remains valid JSON after variable substitution.

Use the relevant parser or response-extraction controls rather than relying on the visual appearance of a JSON string.
