Steps are the building blocks
Once a trigger starts a workflow, its steps do the work. A step is a single node in your workflow's graph. Every step has:
- a step key — a unique identifier within the workflow (required), e.g.
welcome_email; - a type — one of action, filter, transform, or delay (defaults to action);
- an optional connector and action (for action steps);
- a configuration — the step's settings, including data mappings;
- a position — a number used for ordering;
- a depends_on list — the step keys that must complete before this step runs.
Because each step can depend on earlier steps, your workflow is a directed acyclic graph (DAG) rather than a straight line. That is what lets you branch, run steps in parallel stages, and gate whole branches behind a filter.
The four step types
Action
An action does something in a connector — send_email (StretchMail), create_task (StretchTasks), add_tag (StretchCRM), record_payment (StretchBooks), schedule_post (StretchSocial), http_request (Webhook/HTTP), and so on. You pick the connector and its action, then map the action's inputs from the trigger and earlier steps. During a simulate run the action's resolved input is captured with no real side effect; in a live run the action is queued for dispatch.
Filter A filter is a gate. It evaluates one or more rules against the run's data; if the rules pass, execution continues; if they do not pass, the filter is skipped and — importantly — every step that depends on it (directly or transitively) is skipped too. Filters are how you say "only continue when the order total is over $100" or "only for VIP customers."
Transform A transform reshapes data without touching a connector — combining fields, renaming keys, formatting values — so later steps receive exactly the shape they need. Its resolved output is added to the run context for downstream steps to use.
Delay A delay pauses the branch before continuing — useful for spacing out a follow‑up email or waiting before a reminder. Filters, transforms, and delays are all provided by the Built‑in logic connector.
Dependencies and the DAG
The depends_on list is the heart of the graph. A step with an empty depends_on runs off the trigger. A step that lists ["welcome_email"] runs only after welcome_email completes. When you validate and plan a workflow, StretchAutomate performs a topological sort: it groups steps into ordered stages where each stage's steps have all their dependencies satisfied by earlier stages. Steps in the same stage can run together.
Because it is acyclic, a workflow cannot contain a dependency cycle (A depends on B and B depends on A). Validation catches cycles and other structural problems before you run.
Add a step, step by step
- Open the workflow and choose Add step.
- Enter a unique step key (kebab‑case is easy to reference, e.g.
notify_owner). - Select the type. For an action, also pick the connector and action.
- Fill in the configuration, mapping inputs from
{{ trigger.* }}and{{ steps.<key>.* }}. - Set depends_on to the step keys that must run first (leave empty to run off the trigger).
- Save. Re‑using an existing step key updates that step in place instead of adding a duplicate.
Realistic example
A workflow triggered by StretchShop order_created has four steps:
high_value— a filter that passes only when{{ trigger.total }}is above 500.vip_tag— an action (StretchCRMtag_customer) that depends onhigh_value.owner_task— an action (StretchTaskscreate_task) that also depends onhigh_value, telling an account manager to follow up.thanks_delaythenthanks_email— a delay followed by a StretchMailsend_email, spacing a thank‑you a day later.
Because vip_tag and owner_task both depend on high_value, they land in the same stage and run together — but only if the filter passes. If the order is under 500, high_value is skipped and so is the entire branch beneath it.
Tips
- Give steps descriptive keys — you will type them into other steps' mappings and dependencies.
- Use filters early to gate expensive branches; skips propagate downward, so one filter can guard many steps.
- Model true parallelism by giving independent steps the same dependency — they will share a stage.
- Prefer a transform to cramming complex data juggling into an action's config; it keeps each step readable.
Troubleshooting
"A step_key is required." Every step needs a unique key. Provide one.
A step I expected to run was skipped. It (or a step it depends on) sits under a filter that did not pass. Check the filter's rules and the run's data in the ledger.
Validation reports an invalid graph. You likely have a dependency on a step key that doesn't exist, or a cycle. Fix the depends_on references and re‑validate.
Was this helpful?
Help us improve this article
Use these controls to share whether this answer solved the issue. Feedback helps prioritize updates to StretchSuite Support.

