Steps and data
Steps are what a workflow does, in order. Each one hands its result to the steps after it, which read it with @ references.
A step is one thing a workflow does: add a row, send a message, make a decision, wait for an approval. Steps run in order, and each can use the results of every step before it.
Two kinds of steps
App actions work in one of your apps through your connection to it, such as Google Sheets' Append row or Slack's Send a message to a channel. There are thousands of them; the integrations directory lists every one with its inputs and outputs.
Built-in steps are Lodol's own. They decide which steps run, repeat steps, wait for people, call AI models, and work with data and files:
| Built-in step | Use it to |
|---|---|
| If and Otherwise | Run steps only when something is true |
| Repeat | Run steps once per item in a list, or several times |
| Request approval | Pause until a person approves, rejects or replies |
| Run an AI agent | Have an AI read, research or decide, and hand back fields |
| Text, Lists, Math, Dates & Times | Format, clean up, count and convert values |
| Files | Read what's inside a file, make a CSV, Excel or PDF file, or resize an image |
| Stored values | Remember a value from one run to the next |
| Wait | Pause for a while, or until a date and time |
| Run a workflow | Use another workflow as a step |
| Call an API, Run Python code | Reach a service with no app in Lodol, or compute something no step covers |
Every step hands its result to the steps after it
The trigger's event and each step's result have a name. Later steps read them with an @ reference: in the editor you type @ and pick the value, and it appears as a single token in the field.
In the Stripe example, the trigger's event is called payment, so the Slack step's Message can read:
New payment: @payment.amount @payment.currency for @payment.descriptionStripe sends amount in cents, so the finished workflow divides it by 100 and formats it first; see Money can arrive in cents.
References reach as deep as the data goes:
| Reference | Reads |
|---|---|
@payment.amount | The amount field of the trigger's event |
@lead.company.name | A field inside a field |
@sheet.rows | A whole list, ready for a Repeat step |
@sheet.rows[0] | The first item of a list ([-1] is the last) |
Every action's integration page lists its Outputs: the fields its result has. A step that returns a list puts it inside a field rather than returning the bare list: Google Sheets' Read rows returns its rows in rows, so a Repeat goes over @sheet.rows, not @sheet.
Good to know about data
Data from apps arrives the way the app stores it, which isn't always the way people read it. These are the cases that most often surprise people.
Workspace values
Besides step results, a step can read values your workspace keeps, such as a base URL every workflow shares. Write them as @values.NAME, for example @values.BASE_URL. Keys and passwords don't belong in values: store them as secrets, which stay encrypted and hidden.